diff --git a/internal/logic/inference/createdeploytasklogic.go b/internal/logic/inference/createdeploytasklogic.go index 1daa8fc5..831c5428 100644 --- a/internal/logic/inference/createdeploytasklogic.go +++ b/internal/logic/inference/createdeploytasklogic.go @@ -2,6 +2,9 @@ package inference import ( "context" + "errors" + "gitlink.org.cn/JointCloud/pcm-coordinator/internal/scheduler/schedulers/option" + "strconv" "gitlink.org.cn/JointCloud/pcm-coordinator/internal/svc" "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types" @@ -24,7 +27,78 @@ func NewCreateDeployTaskLogic(ctx context.Context, svcCtx *svc.ServiceContext) * } func (l *CreateDeployTaskLogic) CreateDeployTask(req *types.CreateDeployTaskReq) (resp *types.CreateDeployTaskResp, err error) { - // todo: add your logic here and delete this line + resp = &types.CreateDeployTaskResp{} + + if len(req.AdapterClusterMap) == 0 { + return nil, errors.New("adapters are empty") + } + + opt := &option.InferOption{ + TaskName: req.TaskName, + ModelType: req.ModelType, + ModelName: req.ModelName, + Cmd: "", + } + + taskId, err := l.svcCtx.Scheduler.AiStorages.SaveInferDeployTask(req.TaskName, req.ModelName, req.ModelType, req.TaskDesc) + if err != nil { + return nil, err + } + + for aid, v := range req.AdapterClusterMap { + for _, cid := range v { + err = l.createDeployInstance(taskId, aid, cid, opt) + if err != nil { + return nil, err + } + } + } return } + +func (l *CreateDeployTaskLogic) createDeployInstance(taskId int64, adapterId string, clusterId string, opt *option.InferOption) error { + cmap, found := l.svcCtx.Scheduler.AiService.InferenceAdapterMap[adapterId] + if !found { + + } + iCluster, found := cmap[clusterId] + if !found { + + } + insId, err := iCluster.CreateInferDeployInstance(l.ctx, opt) + if err != nil { + return err + } + + aid, err := strconv.ParseInt(adapterId, 10, 64) + if err != nil { + return err + } + cid, err := strconv.ParseInt(clusterId, 10, 64) + if err != nil { + return err + } + + adapterName, err := l.svcCtx.Scheduler.AiStorages.GetAdapterNameById(adapterId) + if err != nil { + return err + } + + clusterName, err := l.svcCtx.Scheduler.AiStorages.GetClusterNameById(clusterId) + if err != nil { + return err + } + + ins, err := iCluster.GetInferDeployInstance(l.ctx, insId) + if err != nil { + return err + } + + _, err = l.svcCtx.Scheduler.AiStorages.SaveInferDeployInstance(taskId, ins.InstanceId, ins.InstanceName, aid, adapterName, cid, clusterName, ins.ModelName, ins.ModelType, ins.InferCard) + if err != nil { + return err + } + + return nil +} diff --git a/internal/scheduler/database/aiStorage.go b/internal/scheduler/database/aiStorage.go index 6f9c4285..4bf9725d 100644 --- a/internal/scheduler/database/aiStorage.go +++ b/internal/scheduler/database/aiStorage.go @@ -373,23 +373,24 @@ func (s *AiStorage) AddNoticeInfo(adapterId string, adapterName string, clusterI } } -func (s *AiStorage) SaveInferDeployInstance(instanceId string, instanceName string, adapterId int64, +func (s *AiStorage) SaveInferDeployInstance(taskId int64, instanceId string, instanceName string, adapterId int64, adapterName string, clusterId int64, clusterName string, modelName string, modelType string, inferCard string) (int64, error) { startTime := time.Now().Format(time.RFC3339) // 构建主任务结构体 insModel := models.AiInferDeployInstance{ - InstanceId: instanceId, - InstanceName: instanceName, - AdapterId: adapterId, - AdapterName: adapterName, - ClusterId: clusterId, - ClusterName: clusterName, - ModelName: modelName, - ModelType: modelType, - InferCard: inferCard, - Status: constants.Saved, - CreateTime: startTime, - UpdateTime: startTime, + DeployInstanceTaskId: taskId, + InstanceId: instanceId, + InstanceName: instanceName, + AdapterId: adapterId, + AdapterName: adapterName, + ClusterId: clusterId, + ClusterName: clusterName, + ModelName: modelName, + ModelType: modelType, + InferCard: inferCard, + Status: constants.Stopped, + CreateTime: startTime, + UpdateTime: startTime, } // 保存任务数据到数据库 tx := s.DbEngin.Table("ai_infer_deploy_instance").Create(&insModel)