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.

aiService.go 5.7 kB

11 months ago
8 months ago
11 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package service
  2. import (
  3. "github.com/zeromicro/go-zero/zrpc"
  4. hpcacclient "gitlink.org.cn/JointCloud/pcm-ac/hpcacclient"
  5. "gitlink.org.cn/JointCloud/pcm-coordinator/internal/config"
  6. "gitlink.org.cn/JointCloud/pcm-coordinator/internal/scheduler/database"
  7. "gitlink.org.cn/JointCloud/pcm-coordinator/internal/scheduler/service/collector"
  8. "gitlink.org.cn/JointCloud/pcm-coordinator/internal/scheduler/service/executor"
  9. "gitlink.org.cn/JointCloud/pcm-coordinator/internal/scheduler/service/inference"
  10. "gitlink.org.cn/JointCloud/pcm-coordinator/internal/storeLink"
  11. "gitlink.org.cn/JointCloud/pcm-coordinator/internal/types"
  12. "gitlink.org.cn/JointCloud/pcm-modelarts/client/imagesservice"
  13. "gitlink.org.cn/JointCloud/pcm-modelarts/client/modelartsservice"
  14. "gitlink.org.cn/JointCloud/pcm-octopus/octopusclient"
  15. "strconv"
  16. )
  17. const (
  18. OCTOPUS = "octopus"
  19. MODELARTS = "modelarts"
  20. SHUGUANGAI = "shuguangAi"
  21. OPENI = "openI"
  22. )
  23. type AiService struct {
  24. AiExecutorAdapterMap map[string]map[string]executor.AiExecutor
  25. AiCollectorAdapterMap map[string]map[string]collector.AiCollector
  26. InferenceAdapterMap map[string]map[string]inference.ICluster
  27. Storage *database.AiStorage
  28. LocalCache map[string]interface{}
  29. Conf *config.Config
  30. }
  31. func NewAiService(conf *config.Config, storages *database.AiStorage, localCache map[string]interface{}) (*AiService, error) {
  32. var aiType = "1"
  33. adapterIds, err := storages.GetAdapterIdsByType(aiType)
  34. if err != nil {
  35. return nil, err
  36. }
  37. aiService := &AiService{
  38. AiExecutorAdapterMap: make(map[string]map[string]executor.AiExecutor),
  39. AiCollectorAdapterMap: make(map[string]map[string]collector.AiCollector),
  40. InferenceAdapterMap: make(map[string]map[string]inference.ICluster),
  41. Storage: storages,
  42. LocalCache: localCache,
  43. Conf: conf,
  44. }
  45. for _, id := range adapterIds {
  46. clusters, err := storages.GetClustersByAdapterId(id)
  47. if err != nil {
  48. return nil, err
  49. }
  50. if len(clusters.List) == 0 {
  51. continue
  52. }
  53. exeClusterMap, colClusterMap, inferMap := InitAiClusterMap(conf, clusters.List)
  54. aiService.AiExecutorAdapterMap[id] = exeClusterMap
  55. aiService.AiCollectorAdapterMap[id] = colClusterMap
  56. aiService.InferenceAdapterMap[id] = inferMap
  57. }
  58. return aiService, nil
  59. }
  60. func InitAiClusterMap(conf *config.Config, clusters []types.ClusterInfo) (map[string]executor.AiExecutor, map[string]collector.AiCollector, map[string]inference.ICluster) {
  61. executorMap := make(map[string]executor.AiExecutor)
  62. collectorMap := make(map[string]collector.AiCollector)
  63. inferenceMap := make(map[string]inference.ICluster)
  64. for _, c := range clusters {
  65. switch c.Name {
  66. case OCTOPUS:
  67. id, _ := strconv.ParseInt(c.Id, 10, 64)
  68. octopusRpc := octopusclient.NewOctopus(zrpc.MustNewClient(conf.OctopusRpcConf))
  69. octopus := storeLink.NewOctopusLink(octopusRpc, c.Nickname, id)
  70. collectorMap[c.Id] = octopus
  71. executorMap[c.Id] = octopus
  72. inferenceMap[c.Id] = octopus
  73. case MODELARTS:
  74. id, _ := strconv.ParseInt(c.Id, 10, 64)
  75. modelArtsRpc := modelartsservice.NewModelArtsService(zrpc.MustNewClient(conf.ModelArtsRpcConf))
  76. modelArtsImgRpc := imagesservice.NewImagesService(zrpc.MustNewClient(conf.ModelArtsImgRpcConf))
  77. modelarts := storeLink.NewModelArtsLink(modelArtsRpc, modelArtsImgRpc, c.Name, id, c.Nickname)
  78. collectorMap[c.Id] = modelarts
  79. executorMap[c.Id] = modelarts
  80. inferenceMap[c.Id] = modelarts
  81. case SHUGUANGAI:
  82. id, _ := strconv.ParseInt(c.Id, 10, 64)
  83. aCRpc := hpcacclient.NewHpcAC(zrpc.MustNewClient(conf.ACRpcConf))
  84. sgai := storeLink.NewShuguangAi(aCRpc, c.Nickname, id)
  85. collectorMap[c.Id] = sgai
  86. executorMap[c.Id] = sgai
  87. inferenceMap[c.Id] = sgai
  88. case OPENI:
  89. id, _ := strconv.ParseInt(c.Id, 10, 64)
  90. openi := storeLink.NewOpenI(c.Server, id, c.Username, c.Token)
  91. collectorMap[c.Id] = openi
  92. executorMap[c.Id] = openi
  93. inferenceMap[c.Id] = openi
  94. }
  95. }
  96. return executorMap, collectorMap, inferenceMap
  97. }
  98. func (as *AiService) UpdateClusterMaps(conf *config.Config, adapterId string, clusters []types.ClusterInfo) {
  99. for _, c := range clusters {
  100. _, ok := as.AiExecutorAdapterMap[adapterId][c.Id]
  101. _, ok2 := as.AiCollectorAdapterMap[adapterId][c.Id]
  102. _, ok3 := as.InferenceAdapterMap[adapterId][c.Id]
  103. if !ok && !ok2 && !ok3 {
  104. switch c.Name {
  105. case OCTOPUS:
  106. id, _ := strconv.ParseInt(c.Id, 10, 64)
  107. octopusRpc := octopusclient.NewOctopus(zrpc.MustNewClient(conf.OctopusRpcConf))
  108. octopus := storeLink.NewOctopusLink(octopusRpc, c.Nickname, id)
  109. as.AiExecutorAdapterMap[adapterId][c.Id] = octopus
  110. as.AiCollectorAdapterMap[adapterId][c.Id] = octopus
  111. as.InferenceAdapterMap[adapterId][c.Id] = octopus
  112. case MODELARTS:
  113. id, _ := strconv.ParseInt(c.Id, 10, 64)
  114. modelArtsRpc := modelartsservice.NewModelArtsService(zrpc.MustNewClient(conf.ModelArtsRpcConf))
  115. modelArtsImgRpc := imagesservice.NewImagesService(zrpc.MustNewClient(conf.ModelArtsImgRpcConf))
  116. modelarts := storeLink.NewModelArtsLink(modelArtsRpc, modelArtsImgRpc, c.Name, id, c.Nickname)
  117. as.AiExecutorAdapterMap[adapterId][c.Id] = modelarts
  118. as.AiCollectorAdapterMap[adapterId][c.Id] = modelarts
  119. as.InferenceAdapterMap[adapterId][c.Id] = modelarts
  120. case SHUGUANGAI:
  121. id, _ := strconv.ParseInt(c.Id, 10, 64)
  122. aCRpc := hpcacclient.NewHpcAC(zrpc.MustNewClient(conf.ACRpcConf))
  123. sgai := storeLink.NewShuguangAi(aCRpc, c.Nickname, id)
  124. as.AiExecutorAdapterMap[adapterId][c.Id] = sgai
  125. as.AiCollectorAdapterMap[adapterId][c.Id] = sgai
  126. as.InferenceAdapterMap[adapterId][c.Id] = sgai
  127. }
  128. } else {
  129. continue
  130. }
  131. }
  132. }

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.