From d0dbb2fe99d03482e7a00cf3e1a22be4338068e5 Mon Sep 17 00:00:00 2001 From: tzwang Date: Thu, 29 Aug 2024 10:48:17 +0800 Subject: [PATCH 1/5] added createDeployTask apis Former-commit-id: e3e9a463528086432ea8cc0401a76edf249e5983 --- desc/inference/inference.api | 34 +++++++++++++++++++ desc/pcm.api | 6 ++++ .../inference/deployinstancelistlogic.go | 2 ++ .../scheduler/service/inference/inference.go | 1 + internal/storeLink/modelarts.go | 4 +++ internal/storeLink/octopus.go | 4 +++ internal/storeLink/shuguangai.go | 4 +++ 7 files changed, 55 insertions(+) diff --git a/desc/inference/inference.api b/desc/inference/inference.api index b80d31aa..ec793a70 100644 --- a/desc/inference/inference.api +++ b/desc/inference/inference.api @@ -176,4 +176,38 @@ type ( GetDeployTasksByTypeResp { List interface{} `json:"list"` } + + CreateDeployTaskReq { + TaskName string `form:"taskName"` + TaskDesc string `form:"taskDesc"` + ModelName string `form:"modelName"` + ModelType string `form:"modelType"` + AdapterClusterMap map[string]string `form:"adapterClusterMap"` + } + + CreateDeployTaskResp { + + } + + GetAdaptersByModelReq { + ModelName string `form:"modelName"` + ModelType string `form:"modelType"` + } + + GetAdaptersByModelResp { + Adapters []AdapterAvail `json:"adapters"` + } + + AdapterAvail { + AdapterId string `json:"adapterId"` + AdapterName string `json:"taskName"` + Clusters []ClusterAvail `json:"clusters"` + } + + ClusterAvail { + ClusterId string `json:"clusterId"` + ClusterName string `json:"clusterName"` + } + + ) diff --git a/desc/pcm.api b/desc/pcm.api index 9f068aa7..f075d178 100644 --- a/desc/pcm.api +++ b/desc/pcm.api @@ -971,6 +971,12 @@ service pcm { @handler GetDeployTasksByType get /inference/getDeployTasksByType (GetDeployTasksByTypeReq) returns (GetDeployTasksByTypeResp) + + @handler CreateDeployTask + get /inference/createDeployTask (CreateDeployTaskReq) returns (CreateDeployTaskResp) + + @handler GetAdaptersByModel + get /inference/getAdaptersByModel (GetAdaptersByModelReq) returns (GetAdaptersByModelResp) } @server( diff --git a/internal/logic/inference/deployinstancelistlogic.go b/internal/logic/inference/deployinstancelistlogic.go index 4e4c7c37..dc79c645 100644 --- a/internal/logic/inference/deployinstancelistlogic.go +++ b/internal/logic/inference/deployinstancelistlogic.go @@ -96,6 +96,7 @@ func (l *DeployInstanceListLogic) GenerateDeployTasks(tasklist []*models.AiDeplo deployTask := &DeployTask{ Id: t.Id, Name: t.Name, + Desc: t.Desc, Instances: list, } tasks = append(tasks, deployTask) @@ -106,5 +107,6 @@ func (l *DeployInstanceListLogic) GenerateDeployTasks(tasklist []*models.AiDeplo type DeployTask struct { Id int64 `json:"id,string"` Name string `json:"name,string"` + Desc string `json:"desc,string"` Instances []*models.AiInferDeployInstance `json:"instances,string"` } diff --git a/internal/scheduler/service/inference/inference.go b/internal/scheduler/service/inference/inference.go index 4695ec07..7c60ea2b 100644 --- a/internal/scheduler/service/inference/inference.go +++ b/internal/scheduler/service/inference/inference.go @@ -18,6 +18,7 @@ type ICluster interface { StopInferDeployInstance(ctx context.Context, id string) bool GetInferDeployInstance(ctx context.Context, id string) (*DeployInstance, error) CreateInferDeployInstance(ctx context.Context, option *option.InferOption) (string, error) + CheckModelExistence(ctx context.Context, name string, mtype string) bool } type IInference interface { diff --git a/internal/storeLink/modelarts.go b/internal/storeLink/modelarts.go index 50f96398..d22d9ab7 100644 --- a/internal/storeLink/modelarts.go +++ b/internal/storeLink/modelarts.go @@ -543,3 +543,7 @@ func (m *ModelArtsLink) GetInferResult(ctx context.Context, url string, file mul func (m *ModelArtsLink) CreateInferDeployInstance(ctx context.Context, option *option.InferOption) (string, error) { return "", nil } + +func (m *ModelArtsLink) CheckModelExistence(ctx context.Context, name string, mtype string) bool { + return false +} diff --git a/internal/storeLink/octopus.go b/internal/storeLink/octopus.go index 0b2fc3fd..83c7198e 100644 --- a/internal/storeLink/octopus.go +++ b/internal/storeLink/octopus.go @@ -1251,3 +1251,7 @@ func (o *OctopusLink) CreateInferDeployInstance(ctx context.Context, option *opt return resp.Payload.Id, nil } + +func (o *OctopusLink) CheckModelExistence(ctx context.Context, name string, mtype string) bool { + return false +} diff --git a/internal/storeLink/shuguangai.go b/internal/storeLink/shuguangai.go index a756de3f..7923ef2b 100644 --- a/internal/storeLink/shuguangai.go +++ b/internal/storeLink/shuguangai.go @@ -885,3 +885,7 @@ func (s *ShuguangAi) GetInferResult(ctx context.Context, url string, file multip func (s *ShuguangAi) CreateInferDeployInstance(ctx context.Context, option *option.InferOption) (string, error) { return "", nil } + +func (s *ShuguangAi) CheckModelExistence(ctx context.Context, name string, mtype string) bool { + return false +} From 7aad9ecd4d5e285ceed1c1a1c74103942d0ba7d5 Mon Sep 17 00:00:00 2001 From: tzwang Date: Thu, 29 Aug 2024 10:54:33 +0800 Subject: [PATCH 2/5] added createDeployTask logics Former-commit-id: 52bab362ac9b2167969b1e6a70922ce26836dbd4 --- .../inference/createdeploytaskhandler.go | 28 +++++++++++++++++ .../inference/getadaptersbymodelhandler.go | 28 +++++++++++++++++ internal/handler/routes.go | 10 ++++++ .../logic/inference/createdeploytasklogic.go | 30 ++++++++++++++++++ .../inference/getadaptersbymodellogic.go | 30 ++++++++++++++++++ internal/types/types.go | 31 +++++++++++++++++++ 6 files changed, 157 insertions(+) create mode 100644 internal/handler/inference/createdeploytaskhandler.go create mode 100644 internal/handler/inference/getadaptersbymodelhandler.go create mode 100644 internal/logic/inference/createdeploytasklogic.go create mode 100644 internal/logic/inference/getadaptersbymodellogic.go diff --git a/internal/handler/inference/createdeploytaskhandler.go b/internal/handler/inference/createdeploytaskhandler.go new file mode 100644 index 00000000..3ed4e9d3 --- /dev/null +++ b/internal/handler/inference/createdeploytaskhandler.go @@ -0,0 +1,28 @@ +package inference + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/logic/inference" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types" +) + +func CreateDeployTaskHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.CreateDeployTaskReq + if err := httpx.Parse(r, &req); err != nil { + httpx.ErrorCtx(r.Context(), w, err) + return + } + + l := inference.NewCreateDeployTaskLogic(r.Context(), svcCtx) + resp, err := l.CreateDeployTask(&req) + if err != nil { + httpx.ErrorCtx(r.Context(), w, err) + } else { + httpx.OkJsonCtx(r.Context(), w, resp) + } + } +} diff --git a/internal/handler/inference/getadaptersbymodelhandler.go b/internal/handler/inference/getadaptersbymodelhandler.go new file mode 100644 index 00000000..7aeabfad --- /dev/null +++ b/internal/handler/inference/getadaptersbymodelhandler.go @@ -0,0 +1,28 @@ +package inference + +import ( + "net/http" + + "github.com/zeromicro/go-zero/rest/httpx" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/logic/inference" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types" +) + +func GetAdaptersByModelHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + var req types.GetAdaptersByModelReq + if err := httpx.Parse(r, &req); err != nil { + httpx.ErrorCtx(r.Context(), w, err) + return + } + + l := inference.NewGetAdaptersByModelLogic(r.Context(), svcCtx) + resp, err := l.GetAdaptersByModel(&req) + if err != nil { + httpx.ErrorCtx(r.Context(), w, err) + } else { + httpx.OkJsonCtx(r.Context(), w, resp) + } + } +} diff --git a/internal/handler/routes.go b/internal/handler/routes.go index 0e7f6b77..ceb90566 100644 --- a/internal/handler/routes.go +++ b/internal/handler/routes.go @@ -1233,6 +1233,16 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/inference/getDeployTasksByType", Handler: inference.GetDeployTasksByTypeHandler(serverCtx), }, + { + Method: http.MethodGet, + Path: "/inference/createDeployTask", + Handler: inference.CreateDeployTaskHandler(serverCtx), + }, + { + Method: http.MethodGet, + Path: "/inference/getAdaptersByModel", + Handler: inference.GetAdaptersByModelHandler(serverCtx), + }, }, rest.WithPrefix("/pcm/v1"), ) diff --git a/internal/logic/inference/createdeploytasklogic.go b/internal/logic/inference/createdeploytasklogic.go new file mode 100644 index 00000000..1daa8fc5 --- /dev/null +++ b/internal/logic/inference/createdeploytasklogic.go @@ -0,0 +1,30 @@ +package inference + +import ( + "context" + + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type CreateDeployTaskLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewCreateDeployTaskLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateDeployTaskLogic { + return &CreateDeployTaskLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *CreateDeployTaskLogic) CreateDeployTask(req *types.CreateDeployTaskReq) (resp *types.CreateDeployTaskResp, err error) { + // todo: add your logic here and delete this line + + return +} diff --git a/internal/logic/inference/getadaptersbymodellogic.go b/internal/logic/inference/getadaptersbymodellogic.go new file mode 100644 index 00000000..f0450fd5 --- /dev/null +++ b/internal/logic/inference/getadaptersbymodellogic.go @@ -0,0 +1,30 @@ +package inference + +import ( + "context" + + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type GetAdaptersByModelLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewGetAdaptersByModelLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetAdaptersByModelLogic { + return &GetAdaptersByModelLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +func (l *GetAdaptersByModelLogic) GetAdaptersByModel(req *types.GetAdaptersByModelReq) (resp *types.GetAdaptersByModelResp, err error) { + // todo: add your logic here and delete this line + + return +} diff --git a/internal/types/types.go b/internal/types/types.go index 2e72d660..438a6cce 100644 --- a/internal/types/types.go +++ b/internal/types/types.go @@ -6073,3 +6073,34 @@ type GetDeployTasksByTypeReq struct { type GetDeployTasksByTypeResp struct { List interface{} `json:"list"` } + +type CreateDeployTaskReq struct { + TaskName string `form:"taskName"` + TaskDesc string `form:"taskDesc"` + ModelName string `form:"modelName"` + ModelType string `form:"modelType"` + AdapterClusterMap map[string]string `form:"adapterClusterMap"` +} + +type CreateDeployTaskResp struct { +} + +type GetAdaptersByModelReq struct { + ModelName string `form:"modelName"` + ModelType string `form:"modelType"` +} + +type GetAdaptersByModelResp struct { + Adapters []AdapterAvail `json:"adapters"` +} + +type AdapterAvail struct { + AdapterId string `json:"adapterId"` + AdapterName string `json:"taskName"` + Clusters []ClusterAvail `json:"clusters"` +} + +type ClusterAvail struct { + ClusterId string `json:"clusterId"` + ClusterName string `json:"clusterName"` +} From 7c6389d3d85ec808cce53d956c012a904f269e24 Mon Sep 17 00:00:00 2001 From: tzwang Date: Thu, 29 Aug 2024 11:10:28 +0800 Subject: [PATCH 3/5] updated createDeployTask apis Former-commit-id: c45af4d03769819fa0ff4c2a8d6e83e7fd3b93dd --- desc/inference/inference.api | 4 ++-- .../handler/inference/createdeploytaskhandler.go | 9 +++------ .../handler/inference/getadaptersbymodelhandler.go | 9 +++------ internal/logic/inference/getadaptersbymodellogic.go | 12 +++++++++++- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/desc/inference/inference.api b/desc/inference/inference.api index ec793a70..962b9700 100644 --- a/desc/inference/inference.api +++ b/desc/inference/inference.api @@ -195,13 +195,13 @@ type ( } GetAdaptersByModelResp { - Adapters []AdapterAvail `json:"adapters"` + Adapters []*AdapterAvail `json:"adapters"` } AdapterAvail { AdapterId string `json:"adapterId"` AdapterName string `json:"taskName"` - Clusters []ClusterAvail `json:"clusters"` + Clusters []*ClusterAvail `json:"clusters"` } ClusterAvail { diff --git a/internal/handler/inference/createdeploytaskhandler.go b/internal/handler/inference/createdeploytaskhandler.go index 3ed4e9d3..7fffde9d 100644 --- a/internal/handler/inference/createdeploytaskhandler.go +++ b/internal/handler/inference/createdeploytaskhandler.go @@ -1,6 +1,7 @@ package inference import ( + "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result" "net/http" "github.com/zeromicro/go-zero/rest/httpx" @@ -13,16 +14,12 @@ func CreateDeployTaskHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { var req types.CreateDeployTaskReq if err := httpx.Parse(r, &req); err != nil { - httpx.ErrorCtx(r.Context(), w, err) + result.ParamErrorResult(r, w, err) return } l := inference.NewCreateDeployTaskLogic(r.Context(), svcCtx) resp, err := l.CreateDeployTask(&req) - if err != nil { - httpx.ErrorCtx(r.Context(), w, err) - } else { - httpx.OkJsonCtx(r.Context(), w, resp) - } + result.HttpResult(r, w, resp, err) } } diff --git a/internal/handler/inference/getadaptersbymodelhandler.go b/internal/handler/inference/getadaptersbymodelhandler.go index 7aeabfad..d199313f 100644 --- a/internal/handler/inference/getadaptersbymodelhandler.go +++ b/internal/handler/inference/getadaptersbymodelhandler.go @@ -1,6 +1,7 @@ package inference import ( + "gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result" "net/http" "github.com/zeromicro/go-zero/rest/httpx" @@ -13,16 +14,12 @@ func GetAdaptersByModelHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { var req types.GetAdaptersByModelReq if err := httpx.Parse(r, &req); err != nil { - httpx.ErrorCtx(r.Context(), w, err) + result.ParamErrorResult(r, w, err) return } l := inference.NewGetAdaptersByModelLogic(r.Context(), svcCtx) resp, err := l.GetAdaptersByModel(&req) - if err != nil { - httpx.ErrorCtx(r.Context(), w, err) - } else { - httpx.OkJsonCtx(r.Context(), w, resp) - } + result.HttpResult(r, w, resp, err) } } diff --git a/internal/logic/inference/getadaptersbymodellogic.go b/internal/logic/inference/getadaptersbymodellogic.go index f0450fd5..d4ce296a 100644 --- a/internal/logic/inference/getadaptersbymodellogic.go +++ b/internal/logic/inference/getadaptersbymodellogic.go @@ -2,6 +2,7 @@ package inference import ( "context" + "errors" "gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc" "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types" @@ -24,7 +25,16 @@ func NewGetAdaptersByModelLogic(ctx context.Context, svcCtx *svc.ServiceContext) } func (l *GetAdaptersByModelLogic) GetAdaptersByModel(req *types.GetAdaptersByModelReq) (resp *types.GetAdaptersByModelResp, err error) { - // todo: add your logic here and delete this line + resp = &types.GetAdaptersByModelResp{} + + adapterList, err := l.svcCtx.Scheduler.AiStorages.GetAdaptersByType("1") + if err != nil { + return nil, err + } + + if len(adapterList) == 0 { + return nil, errors.New("适配器不存在") + } return } From 5a88f9e766c9905a4d0bb5f8dde08434a64ab960 Mon Sep 17 00:00:00 2001 From: tzwang Date: Thu, 29 Aug 2024 11:12:43 +0800 Subject: [PATCH 4/5] updated createDeployTask types Former-commit-id: 87c4555d04f0648678ec6f429cba9f2613c20c8d --- internal/types/types.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/types/types.go b/internal/types/types.go index 438a6cce..5af8a866 100644 --- a/internal/types/types.go +++ b/internal/types/types.go @@ -6091,13 +6091,13 @@ type GetAdaptersByModelReq struct { } type GetAdaptersByModelResp struct { - Adapters []AdapterAvail `json:"adapters"` + Adapters []*AdapterAvail `json:"adapters"` } type AdapterAvail struct { - AdapterId string `json:"adapterId"` - AdapterName string `json:"taskName"` - Clusters []ClusterAvail `json:"clusters"` + AdapterId string `json:"adapterId"` + AdapterName string `json:"taskName"` + Clusters []*ClusterAvail `json:"clusters"` } type ClusterAvail struct { From c5b0dc925ff4708751905283c23aafc0962e0ce5 Mon Sep 17 00:00:00 2001 From: tzwang Date: Thu, 29 Aug 2024 11:34:47 +0800 Subject: [PATCH 5/5] updated getAdapterByModel logics Former-commit-id: d777cb359c79a7c6fd96d4ed7de6fb79fcd1d8a1 --- .../inference/getadaptersbymodellogic.go | 35 ++++++++++++++++--- .../scheduler/service/inference/inference.go | 2 +- internal/storeLink/octopus.go | 11 +++++- 3 files changed, 41 insertions(+), 7 deletions(-) diff --git a/internal/logic/inference/getadaptersbymodellogic.go b/internal/logic/inference/getadaptersbymodellogic.go index d4ce296a..fe6a3c2b 100644 --- a/internal/logic/inference/getadaptersbymodellogic.go +++ b/internal/logic/inference/getadaptersbymodellogic.go @@ -2,8 +2,6 @@ package inference import ( "context" - "errors" - "gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc" "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types" @@ -32,9 +30,36 @@ func (l *GetAdaptersByModelLogic) GetAdaptersByModel(req *types.GetAdaptersByMod return nil, err } - if len(adapterList) == 0 { - return nil, errors.New("适配器不存在") + for _, adapter := range adapterList { + var clusterAvail []*types.ClusterAvail + clusters, err := l.svcCtx.Scheduler.AiStorages.GetClustersByAdapterId(adapter.Id) + if err != nil { + return nil, err + } + + for _, cluster := range clusters.List { + exist := l.svcCtx.Scheduler.AiService.InferenceAdapterMap[adapter.Id][cluster.Id].CheckModelExistence(l.ctx, req.ModelName, req.ModelType) + if exist { + c := &types.ClusterAvail{ + ClusterId: cluster.Id, + ClusterName: cluster.Name, + } + clusterAvail = append(clusterAvail, c) + } + } + + if len(clusterAvail) == 0 { + continue + } + + adapterAvail := &types.AdapterAvail{ + AdapterId: adapter.Id, + AdapterName: adapter.Name, + Clusters: clusterAvail, + } + + resp.Adapters = append(resp.Adapters, adapterAvail) } - return + return resp, nil } diff --git a/internal/scheduler/service/inference/inference.go b/internal/scheduler/service/inference/inference.go index 7c60ea2b..95e2a058 100644 --- a/internal/scheduler/service/inference/inference.go +++ b/internal/scheduler/service/inference/inference.go @@ -18,7 +18,7 @@ type ICluster interface { StopInferDeployInstance(ctx context.Context, id string) bool GetInferDeployInstance(ctx context.Context, id string) (*DeployInstance, error) CreateInferDeployInstance(ctx context.Context, option *option.InferOption) (string, error) - CheckModelExistence(ctx context.Context, name string, mtype string) bool + CheckModelExistence(ctx context.Context, modelName string, modelType string) bool } type IInference interface { diff --git a/internal/storeLink/octopus.go b/internal/storeLink/octopus.go index 83c7198e..6aa7cd6f 100644 --- a/internal/storeLink/octopus.go +++ b/internal/storeLink/octopus.go @@ -1253,5 +1253,14 @@ func (o *OctopusLink) CreateInferDeployInstance(ctx context.Context, option *opt } func (o *OctopusLink) CheckModelExistence(ctx context.Context, name string, mtype string) bool { - return false + ifoption := &option.InferOption{ + ModelName: name, + ModelType: mtype, + } + err := o.generateAlgorithmId(ctx, nil, ifoption) + if err != nil { + return false + } + + return true }