forked from JointCloud/pcm-coordinator
132 lines
5.2 KiB
Go
132 lines
5.2 KiB
Go
package service
|
|
|
|
import (
|
|
"github.com/zeromicro/go-zero/zrpc"
|
|
hpcacclient "gitlink.org.cn/JointCloud/pcm-ac/hpcacclient"
|
|
"gitlink.org.cn/JointCloud/pcm-coordinator/internal/config"
|
|
"gitlink.org.cn/JointCloud/pcm-coordinator/internal/scheduler/database"
|
|
"gitlink.org.cn/JointCloud/pcm-coordinator/internal/scheduler/service/collector"
|
|
"gitlink.org.cn/JointCloud/pcm-coordinator/internal/scheduler/service/executor"
|
|
"gitlink.org.cn/JointCloud/pcm-coordinator/internal/scheduler/service/inference"
|
|
"gitlink.org.cn/JointCloud/pcm-coordinator/internal/storeLink"
|
|
"gitlink.org.cn/JointCloud/pcm-coordinator/internal/types"
|
|
"gitlink.org.cn/JointCloud/pcm-modelarts/client/imagesservice"
|
|
"gitlink.org.cn/JointCloud/pcm-modelarts/client/modelartsservice"
|
|
"gitlink.org.cn/JointCloud/pcm-octopus/octopusclient"
|
|
"strconv"
|
|
"sync"
|
|
)
|
|
|
|
const (
|
|
OCTOPUS = "octopus"
|
|
MODELARTS = "modelarts"
|
|
SHUGUANGAI = "shuguangAi"
|
|
)
|
|
|
|
type AiService struct {
|
|
AiExecutorAdapterMap map[string]map[string]executor.AiExecutor
|
|
AiCollectorAdapterMap map[string]map[string]collector.AiCollector
|
|
InferenceAdapterMap map[string]map[string]inference.Inference
|
|
Storage *database.AiStorage
|
|
mu sync.Mutex
|
|
}
|
|
|
|
func NewAiService(conf *config.Config, storages *database.AiStorage) (*AiService, error) {
|
|
var aiType = "1"
|
|
adapterIds, err := storages.GetAdapterIdsByType(aiType)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
aiService := &AiService{
|
|
AiExecutorAdapterMap: make(map[string]map[string]executor.AiExecutor),
|
|
AiCollectorAdapterMap: make(map[string]map[string]collector.AiCollector),
|
|
InferenceAdapterMap: make(map[string]map[string]inference.Inference),
|
|
Storage: storages,
|
|
}
|
|
for _, id := range adapterIds {
|
|
clusters, err := storages.GetClustersByAdapterId(id)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if len(clusters.List) == 0 {
|
|
continue
|
|
}
|
|
exeClusterMap, colClusterMap, inferMap := InitAiClusterMap(conf, clusters.List)
|
|
aiService.AiExecutorAdapterMap[id] = exeClusterMap
|
|
aiService.AiCollectorAdapterMap[id] = colClusterMap
|
|
aiService.InferenceAdapterMap[id] = inferMap
|
|
}
|
|
|
|
return aiService, nil
|
|
}
|
|
|
|
func InitAiClusterMap(conf *config.Config, clusters []types.ClusterInfo) (map[string]executor.AiExecutor, map[string]collector.AiCollector, map[string]inference.Inference) {
|
|
executorMap := make(map[string]executor.AiExecutor)
|
|
collectorMap := make(map[string]collector.AiCollector)
|
|
inferenceMap := make(map[string]inference.Inference)
|
|
for _, c := range clusters {
|
|
switch c.Name {
|
|
case OCTOPUS:
|
|
id, _ := strconv.ParseInt(c.Id, 10, 64)
|
|
octopusRpc := octopusclient.NewOctopus(zrpc.MustNewClient(conf.OctopusRpcConf))
|
|
octopus := storeLink.NewOctopusLink(octopusRpc, c.Nickname, id)
|
|
collectorMap[c.Id] = octopus
|
|
executorMap[c.Id] = octopus
|
|
inferenceMap[c.Id] = octopus
|
|
case MODELARTS:
|
|
id, _ := strconv.ParseInt(c.Id, 10, 64)
|
|
modelArtsRpc := modelartsservice.NewModelArtsService(zrpc.MustNewClient(conf.ModelArtsRpcConf))
|
|
modelArtsImgRpc := imagesservice.NewImagesService(zrpc.MustNewClient(conf.ModelArtsImgRpcConf))
|
|
modelarts := storeLink.NewModelArtsLink(modelArtsRpc, modelArtsImgRpc, c.Name, id, c.Nickname)
|
|
collectorMap[c.Id] = modelarts
|
|
executorMap[c.Id] = modelarts
|
|
inferenceMap[c.Id] = modelarts
|
|
case SHUGUANGAI:
|
|
id, _ := strconv.ParseInt(c.Id, 10, 64)
|
|
aCRpc := hpcacclient.NewHpcAC(zrpc.MustNewClient(conf.ACRpcConf))
|
|
sgai := storeLink.NewShuguangAi(aCRpc, c.Nickname, id)
|
|
collectorMap[c.Id] = sgai
|
|
executorMap[c.Id] = sgai
|
|
inferenceMap[c.Id] = sgai
|
|
}
|
|
}
|
|
|
|
return executorMap, collectorMap, inferenceMap
|
|
}
|
|
|
|
func (as *AiService) UpdateClusterMaps(conf *config.Config, adapterId string, clusters []types.ClusterInfo) {
|
|
for _, c := range clusters {
|
|
_, ok := as.AiExecutorAdapterMap[adapterId][c.Id]
|
|
_, ok2 := as.AiCollectorAdapterMap[adapterId][c.Id]
|
|
_, ok3 := as.InferenceAdapterMap[adapterId][c.Id]
|
|
if !ok && !ok2 && !ok3 {
|
|
switch c.Name {
|
|
case OCTOPUS:
|
|
id, _ := strconv.ParseInt(c.Id, 10, 64)
|
|
octopusRpc := octopusclient.NewOctopus(zrpc.MustNewClient(conf.OctopusRpcConf))
|
|
octopus := storeLink.NewOctopusLink(octopusRpc, c.Nickname, id)
|
|
as.AiExecutorAdapterMap[adapterId][c.Id] = octopus
|
|
as.AiCollectorAdapterMap[adapterId][c.Id] = octopus
|
|
as.InferenceAdapterMap[adapterId][c.Id] = octopus
|
|
case MODELARTS:
|
|
id, _ := strconv.ParseInt(c.Id, 10, 64)
|
|
modelArtsRpc := modelartsservice.NewModelArtsService(zrpc.MustNewClient(conf.ModelArtsRpcConf))
|
|
modelArtsImgRpc := imagesservice.NewImagesService(zrpc.MustNewClient(conf.ModelArtsImgRpcConf))
|
|
modelarts := storeLink.NewModelArtsLink(modelArtsRpc, modelArtsImgRpc, c.Name, id, c.Nickname)
|
|
as.AiExecutorAdapterMap[adapterId][c.Id] = modelarts
|
|
as.AiCollectorAdapterMap[adapterId][c.Id] = modelarts
|
|
as.InferenceAdapterMap[adapterId][c.Id] = modelarts
|
|
case SHUGUANGAI:
|
|
id, _ := strconv.ParseInt(c.Id, 10, 64)
|
|
aCRpc := hpcacclient.NewHpcAC(zrpc.MustNewClient(conf.ACRpcConf))
|
|
sgai := storeLink.NewShuguangAi(aCRpc, c.Nickname, id)
|
|
as.AiExecutorAdapterMap[adapterId][c.Id] = sgai
|
|
as.AiCollectorAdapterMap[adapterId][c.Id] = sgai
|
|
as.InferenceAdapterMap[adapterId][c.Id] = sgai
|
|
}
|
|
} else {
|
|
continue
|
|
}
|
|
}
|
|
}
|