You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

modelarts.go 4.1 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. package storeLink
  2. import (
  3. "context"
  4. "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/svc"
  5. "gitlink.org.cn/jcce-pcm/pcm-coordinator/pkg/models"
  6. "gitlink.org.cn/jcce-pcm/pcm-coordinator/pkg/utils"
  7. "gitlink.org.cn/jcce-pcm/pcm-participant-modelarts/modelarts"
  8. "strconv"
  9. "strings"
  10. )
  11. type ModelArtsLink struct {
  12. ctx context.Context
  13. svcCtx *svc.ServiceContext
  14. platform string
  15. pageIndex int32
  16. pageSize int32
  17. participant *models.StorelinkCenter
  18. }
  19. //const (
  20. // IMG_NAME_PREFIX = "oct_"
  21. // IMG_VERSION_PREFIX = "version_"
  22. // TASK_NAME_PREFIX = "trainJob_"
  23. // RESOURCE_POOL = "common-pool"
  24. //)
  25. func NewModelArtsLink(ctx context.Context, svcCtx *svc.ServiceContext, participant *models.StorelinkCenter) *ModelArtsLink {
  26. return &ModelArtsLink{ctx: ctx, svcCtx: svcCtx, participant: participant, platform: participant.Name, pageIndex: 1, pageSize: 100}
  27. }
  28. func (o *ModelArtsLink) UploadImage(path string) (interface{}, error) {
  29. //TODO modelArts上传镜像
  30. return nil, nil
  31. }
  32. func (o *ModelArtsLink) DeleteImage(imageId string) (interface{}, error) {
  33. // TODO modelArts删除镜像
  34. return nil, nil
  35. }
  36. func (o *ModelArtsLink) QueryImageList() (interface{}, error) {
  37. // modelArts获取镜像列表
  38. req := &modelarts.ListRepoReq{
  39. Offset: "0",
  40. Limit: strconv.Itoa(int(o.pageSize)),
  41. Platform: o.platform,
  42. }
  43. resp, err := o.svcCtx.ModelArtsImgRpc.ListReposDetails(o.ctx, req)
  44. if err != nil {
  45. return nil, err
  46. }
  47. //转换成统一返回类型
  48. imgListResp, err := ConvertType[modelarts.ListReposDetailsResp](resp, nil)
  49. if err != nil {
  50. return nil, err
  51. }
  52. return imgListResp, nil
  53. }
  54. func (o *ModelArtsLink) SubmitTask(imageId string, cmd string, params []string, resourceId string) (interface{}, error) {
  55. // modelArts提交任务
  56. environments := make(map[string]string)
  57. for _, param := range params {
  58. s := strings.Split(param, COMMA)
  59. environments[s[0]] = s[1]
  60. }
  61. req := &modelarts.CreateTrainingJobReq{
  62. Kind: "job",
  63. Metadata: &modelarts.MetadataS{
  64. Name: TASK_NAME_PREFIX + utils.RandomString(10),
  65. WorkspaceId: "0",
  66. },
  67. Algorithm: &modelarts.Algorithms{
  68. Engine: &modelarts.EngineCreateTraining{
  69. ImageUrl: imageId,
  70. },
  71. Command: cmd,
  72. Environments: environments,
  73. },
  74. Spec: &modelarts.SpecsC{
  75. Resource: &modelarts.ResourceCreateTraining{
  76. FlavorId: resourceId,
  77. NodeCount: 1,
  78. },
  79. },
  80. Platform: o.platform,
  81. }
  82. resp, err := o.svcCtx.ModelArtsRpc.CreateTrainingJob(o.ctx, req)
  83. if err != nil {
  84. return nil, err
  85. }
  86. //转换成统一返回类型
  87. submitResp, err := ConvertType[modelarts.CreateTrainingJobResp](resp, nil)
  88. if err != nil {
  89. return nil, err
  90. }
  91. return submitResp, nil
  92. }
  93. func (o *ModelArtsLink) QueryTask(taskId string) (interface{}, error) {
  94. // 获取任务
  95. req := &modelarts.DetailTrainingJobsReq{
  96. TrainingJobId: taskId,
  97. Platform: o.platform,
  98. }
  99. resp, err := o.svcCtx.ModelArtsRpc.GetTrainingJobs(o.ctx, req)
  100. if err != nil {
  101. return nil, err
  102. }
  103. //转换成统一返回类型
  104. taskResp, err := ConvertType[modelarts.JobResponse](resp, o.participant)
  105. if err != nil {
  106. return nil, err
  107. }
  108. return taskResp, nil
  109. }
  110. func (o *ModelArtsLink) DeleteTask(taskId string) (interface{}, error) {
  111. // 删除任务
  112. req := &modelarts.DeleteTrainingJobReq{
  113. TrainingJobId: taskId,
  114. Platform: o.platform,
  115. }
  116. resp, err := o.svcCtx.ModelArtsRpc.DeleteTrainingJob(o.ctx, req)
  117. if err != nil {
  118. return nil, err
  119. }
  120. //转换成统一返回类型
  121. deleteResp, err := ConvertType[modelarts.DeleteTrainingJobResp](resp, nil)
  122. if err != nil {
  123. return nil, err
  124. }
  125. return deleteResp, nil
  126. }
  127. func (o *ModelArtsLink) QuerySpecs() (interface{}, error) {
  128. // octopus查询资源规格
  129. req := &modelarts.TrainingJobFlavorsReq{
  130. Platform: o.platform,
  131. }
  132. resp, err := o.svcCtx.ModelArtsRpc.GetTrainingJobFlavors(o.ctx, req)
  133. if err != nil {
  134. return nil, err
  135. }
  136. //转换成统一返回类型
  137. specsResp, err := ConvertType[modelarts.TrainingJobFlavorsResp](resp, o.participant)
  138. if err != nil {
  139. return nil, err
  140. }
  141. return specsResp, nil
  142. }

PCM is positioned as Software stack over Cloud, aiming to build the standards and ecology of heterogeneous cloud collaboration for JCC in a non intrusive and autonomous peer-to-peer manner.