Merge pull request 'updated deploytask logics' (#291) from tzwang/pcm-coordinator:master into master

Former-commit-id: a8f2b46f1c
This commit is contained in:
tzwang 2024-08-29 11:34:57 +08:00
commit b0a4b9ee27
13 changed files with 250 additions and 0 deletions

View File

@ -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"`
}
)

View File

@ -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(

View File

@ -0,0 +1,25 @@
package inference
import (
"gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result"
"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 {
result.ParamErrorResult(r, w, err)
return
}
l := inference.NewCreateDeployTaskLogic(r.Context(), svcCtx)
resp, err := l.CreateDeployTask(&req)
result.HttpResult(r, w, resp, err)
}
}

View File

@ -0,0 +1,25 @@
package inference
import (
"gitlink.org.cn/JointCloud/pcm-coordinator/pkg/repository/result"
"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 {
result.ParamErrorResult(r, w, err)
return
}
l := inference.NewGetAdaptersByModelLogic(r.Context(), svcCtx)
resp, err := l.GetAdaptersByModel(&req)
result.HttpResult(r, w, resp, err)
}
}

View File

@ -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"),
)

View File

@ -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
}

View File

@ -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"`
}

View File

@ -0,0 +1,65 @@
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) {
resp = &types.GetAdaptersByModelResp{}
adapterList, err := l.svcCtx.Scheduler.AiStorages.GetAdaptersByType("1")
if err != nil {
return nil, err
}
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 resp, nil
}

View File

@ -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, modelName string, modelType string) bool
}
type IInference interface {

View File

@ -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
}

View File

@ -1251,3 +1251,16 @@ 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 {
ifoption := &option.InferOption{
ModelName: name,
ModelType: mtype,
}
err := o.generateAlgorithmId(ctx, nil, ifoption)
if err != nil {
return false
}
return true
}

View File

@ -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
}

View File

@ -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"`
}