| @@ -2022,6 +2022,9 @@ var ( | |||||
| CloudbrainBenchmarkResourceSpecsMap map[int]*ResourceSpec | CloudbrainBenchmarkResourceSpecsMap map[int]*ResourceSpec | ||||
| ModelArtsDebugResourceSpecsMap map[string]*FlavorInfo | ModelArtsDebugResourceSpecsMap map[string]*FlavorInfo | ||||
| ModelArtsTrainResourceSpecsMap map[string]*FlavorInfo | ModelArtsTrainResourceSpecsMap map[string]*FlavorInfo | ||||
| GpuInfosMapInitFlag = false | |||||
| CloudbrainDebugGpuInfosMap map[string]*GpuInfo | |||||
| CloudbrainTrainGpuInfosMap map[string]*GpuInfo | |||||
| ) | ) | ||||
| type ModelArtsFlavor struct { | type ModelArtsFlavor struct { | ||||
| @@ -2080,6 +2083,26 @@ func InitResourceSpecMap() { | |||||
| SpecsMapInitFlag = true | SpecsMapInitFlag = true | ||||
| } | } | ||||
| func InitGpuInfoMap() { | |||||
| if CloudbrainDebugGpuInfosMap == nil || len(CloudbrainDebugGpuInfosMap) == 0 { | |||||
| t := GpuInfos{} | |||||
| json.Unmarshal([]byte(setting.GpuTypes), &t) | |||||
| CloudbrainDebugGpuInfosMap = make(map[int]*GpuInfo, len(t.GpuInfo)) | |||||
| for _, GpuInfo := range t.GpuInfo { | |||||
| CloudbrainDebugGpuInfosMap[GpuInfo.Queue] = GpuInfo | |||||
| } | |||||
| } | |||||
| if CloudbrainTrainGpuInfosMap == nil || len(CloudbrainTrainGpuInfosMap) == 0 { | |||||
| t := GpuInfos{} | |||||
| json.Unmarshal([]byte(setting.TrainGpuTypes), &t) | |||||
| CloudbrainTrainGpuInfosMap = make(map[int]*GpuInfo, len(t.GpuInfo)) | |||||
| for _, GpuInfo := range t.GpuInfo { | |||||
| CloudbrainTrainGpuInfosMap[GpuInfo.Queue] = GpuInfo | |||||
| } | |||||
| } | |||||
| GpuInfosMapInitFlag = true | |||||
| } | |||||
| type ResourceAndFlavor struct { | type ResourceAndFlavor struct { | ||||
| ResourceSpec *ResourceSpec | ResourceSpec *ResourceSpec | ||||
| FlavorInfo *FlavorInfo | FlavorInfo *FlavorInfo | ||||
| @@ -2121,21 +2144,52 @@ func GetCloudbrainResourceSpec(jobType string, clusterType int, resourceSpecId i | |||||
| return nil | return nil | ||||
| } | } | ||||
| func GetCloudbrainTaskCardNum(task Cloudbrain) int { | |||||
| spec := GetCloudbrainResourceSpec(task.JobType, task.Type, task.ResourceSpecId, task.FlavorCode) | |||||
| if spec == nil { | |||||
| return 1 | |||||
| // func GetCloudbrainTaskCardNum(task Cloudbrain) int { | |||||
| // spec := GetCloudbrainResourceSpec(task.JobType, task.Type, task.ResourceSpecId, task.FlavorCode) | |||||
| // if spec == nil { | |||||
| // return 0 | |||||
| // } | |||||
| // if task.Type == TypeCloudBrainOne { | |||||
| // if spec.ResourceSpec == nil { | |||||
| // return 0 | |||||
| // } | |||||
| // return spec.ResourceSpec.GpuNum | |||||
| // } else if task.Type == TypeCloudBrainTwo || task.Type == TypeC2Net { | |||||
| // return getCardnumByFlavorname(task.FlavorName) | |||||
| // } | |||||
| // return 0 | |||||
| // } | |||||
| func getCardNumAndTypeByFlavorname(FlavorName string) (int, string) { | |||||
| var beginIndex = strings.Index(FlavorName, ":") | |||||
| var lastIndex = strings.LastIndex(FlavorName, ":") | |||||
| var endIndex = strings.Index(FlavorName, "*") | |||||
| cardNum, err := strconv.Atoi(strings.TrimSpace(FlavorName[beginIndex:endIndex])) | |||||
| if err != nil { | |||||
| log.Error("strconv.Atoi failed: %v", err) | |||||
| return 0, "" | |||||
| } | |||||
| cardType := strings.TrimSpace(FlavorName[endIndex:lastIndex]) | |||||
| return cardNum, cardType | |||||
| } | |||||
| func GetCloudbrainCardNumAndType(task Cloudbrain) (int, string) { | |||||
| if !SpecsMapInitFlag { | |||||
| InitResourceSpecMap() | |||||
| } | |||||
| if !GpuInfosMapInitFlag { | |||||
| InitGpuInfoMap() | |||||
| } | } | ||||
| if task.Type == TypeCloudBrainOne { | if task.Type == TypeCloudBrainOne { | ||||
| if spec.ResourceSpec == nil { | |||||
| return 1 | |||||
| } | |||||
| return spec.ResourceSpec.GpuNum | |||||
| } else if task.Type == TypeCloudBrainTwo { | |||||
| if spec.FlavorInfo == nil { | |||||
| return 1 | |||||
| switch task.JobType { | |||||
| case string(JobTypeDebug): | |||||
| return CloudbrainDebugResourceSpecsMap[task.ResourceSpecId].GpuNum, CloudbrainDebugGpuInfosMap[task.GpuQueue].Value | |||||
| case string(JobTypeTrain): | |||||
| return CloudbrainTrainResourceSpecsMap[task.ResourceSpecId].GpuNum, CloudbrainTrainGpuInfosMap[task.GpuQueue].Value | |||||
| } | } | ||||
| return spec.FlavorInfo.UnitPrice | |||||
| } else if task.Type == TypeCloudBrainTwo || task.Type == TypeC2Net { | |||||
| return getCardNumAndTypeByFlavorname(task.FlavorName) | |||||
| } | } | ||||
| return 1 | |||||
| return 0, "" | |||||
| } | } | ||||