Browse Source

update

tags/v1.22.10.1^2
liuzx 2 years ago
parent
commit
26a1a08aca
4 changed files with 43 additions and 213 deletions
  1. +6
    -4
      routers/admin/cloudbrains.go
  2. +28
    -90
      routers/api/v1/repo/cloudbrain_dashboard.go
  3. +9
    -116
      routers/repo/cloudbrain.go
  4. +0
    -3
      routers/user/home.go

+ 6
- 4
routers/admin/cloudbrains.go View File

@@ -98,8 +98,6 @@ func CloudBrains(ctx *context.Context) {
ciTasks[i].CanDebug = true
ciTasks[i].CanDel = true
ciTasks[i].Cloudbrain.ComputeResource = task.ComputeResource
// ciTasks[i].Cloudbrain.AiCenter = repo.GetCloudbrainAiCenter(task.Cloudbrain, ctx)
// ciTasks[i].Cloudbrain.Cluster = repo.GetCloudbrainCluster(task.Cloudbrain, ctx)
}

pager := context.NewPagination(int(count), setting.UI.IssuePagingNum, page, getTotalPage(count, setting.UI.IssuePagingNum))
@@ -179,6 +177,7 @@ func DownloadCloudBrains(ctx *context.Context) {
log.Warn("Can not get cloud brain info", err)
continue
}
models.LoadSpecs4CloudbrainInfo(pageRecords)
for _, record := range pageRecords {

for k, v := range allValues(row, record, ctx) {
@@ -208,8 +207,11 @@ func allValues(row int, rs *models.CloudbrainInfo, ctx *context.Context) map[str
}

func getCloudbrainCardType(rs *models.CloudbrainInfo) string {
_, cardType, _ := repo.GetCloudbrainCardNumAndType(rs.Cloudbrain)
return cardType
if rs.Cloudbrain.Spec != nil {
return rs.Cloudbrain.Spec.AccCardType
} else {
return ""
}
}

func getRepoPathName(rs *models.CloudbrainInfo) string {


+ 28
- 90
routers/api/v1/repo/cloudbrain_dashboard.go View File

@@ -625,7 +625,7 @@ func GetAllCloudbrainsPeriodDistribution(ctx *context.Context) {
page := 1
pagesize := 10000
count := pagesize
//Each time a maximum of 1000 pieces of data are detected to the memory, batch processing
//Each time a maximum of 10000 pieces of data are detected to the memory, batch processing
for count == pagesize && count != 0 {
cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{
ListOptions: models.ListOptions{
@@ -699,6 +699,9 @@ func GetAllCloudbrainsPeriodDistribution(ctx *context.Context) {
if _, ok := intelligentNetJobTypeRes[v]; !ok {
intelligentNetJobTypeRes[v] = 0
}
if _, ok := cDCenterJobTypeRes[v]; !ok {
cDCenterJobTypeRes[v] = 0
}
}
cloudBrainTypeList := []int{0, 1, 2, 3}
for _, v := range cloudBrainTypeList {
@@ -714,9 +717,10 @@ func GetAllCloudbrainsPeriodDistribution(ctx *context.Context) {
}
}

cloudOneJobTypeRes["EVALUATION"] = cloudOneJobTypeRes[string(models.JobTypeBenchmark)] + cloudOneJobTypeRes[string(models.JobTypeSnn4imagenet)] + cloudOneJobTypeRes[string(models.JobTypeBrainScore)]
cloudTwoJobTypeRes["EVALUATION"] = cloudTwoJobTypeRes[string(models.JobTypeBenchmark)] + cloudTwoJobTypeRes[string(models.JobTypeSnn4imagenet)] + cloudTwoJobTypeRes[string(models.JobTypeBrainScore)]
intelligentNetJobTypeRes["EVALUATION"] = intelligentNetJobTypeRes[string(models.JobTypeBenchmark)] + intelligentNetJobTypeRes[string(models.JobTypeSnn4imagenet)] + intelligentNetJobTypeRes[string(models.JobTypeBrainScore)]
cloudOneJobTypeRes["EVALUATION"] = cloudBrainPeriodNum[0] - cloudOneJobTypeRes[string(models.JobTypeTrain)] - cloudOneJobTypeRes[string(models.JobTypeInference)] - cloudOneJobTypeRes[string(models.JobTypeDebug)]
cloudTwoJobTypeRes["EVALUATION"] = cloudBrainPeriodNum[1] - cloudTwoJobTypeRes[string(models.JobTypeTrain)] - cloudTwoJobTypeRes[string(models.JobTypeInference)] - cloudTwoJobTypeRes[string(models.JobTypeDebug)]
intelligentNetJobTypeRes["EVALUATION"] = cloudBrainPeriodNum[2] - intelligentNetJobTypeRes[string(models.JobTypeTrain)] - intelligentNetJobTypeRes[string(models.JobTypeInference)] - intelligentNetJobTypeRes[string(models.JobTypeDebug)]
cDCenterJobTypeRes["EVALUATION"] = cloudBrainPeriodNum[3] - cDCenterJobTypeRes[string(models.JobTypeTrain)] - cDCenterJobTypeRes[string(models.JobTypeInference)] - cDCenterJobTypeRes[string(models.JobTypeDebug)]
ctx.JSON(http.StatusOK, map[string]interface{}{
"cloudOneJobTypeRes": cloudOneJobTypeRes,
"cloudTwoJobTypeRes": cloudTwoJobTypeRes,
@@ -728,62 +732,6 @@ func GetAllCloudbrainsPeriodDistribution(ctx *context.Context) {
}

func GetCloudbrainsStatusAnalysis(ctx *context.Context) {
// recordCloudbrain, err := models.GetRecordBeginTime()
// if err != nil {
// log.Error("Can not get recordCloudbrain", err)
// ctx.Error(http.StatusBadRequest, ctx.Tr("repo.record_begintime_get_err"))
// return
// }
// recordBeginTime := recordCloudbrain[0].Cloudbrain.CreatedUnix
// endTime := time.Now()
// cloudBrainStatusResult := make(map[string]int)
// cloudBrainStatusAnalysis := make(map[string]int)
// totalCount := 0

// page := 1
// pagesize := 1000
// count := pagesize
// for count == pagesize && count != 0 {
// cloudbrains, _, err := models.CloudbrainAllStatic(&models.CloudbrainsOptions{
// ListOptions: models.ListOptions{
// Page: page,
// PageSize: pagesize,
// },
// Type: models.TypeCloudBrainAll,
// BeginTimeUnix: int64(recordBeginTime),
// EndTimeUnix: endTime.Unix(),
// })
// if err != nil {
// ctx.ServerError("Get cloudbrains failed:", err)
// return
// }
// for _, cloudbrain := range cloudbrains {
// if _, ok := cloudBrainStatusResult[cloudbrain.Status]; !ok {
// cloudBrainStatusResult[cloudbrain.Status] = 1
// } else {
// cloudBrainStatusResult[cloudbrain.Status] += 1
// }
// }
// count = len(cloudbrains)
// totalCount = totalCount + count
// page += 1
// }

// var jobStatuses []string
// jobStatuses = append(jobStatuses, string(models.ModelArtsTrainJobWaiting), string(models.ModelArtsTrainJobFailed), string(models.ModelArtsRunning), string(models.ModelArtsTrainJobCompleted),
// string(models.ModelArtsStarting), string(models.ModelArtsRestarting), string(models.ModelArtsStartFailed),
// string(models.ModelArtsStopping), string(models.ModelArtsStopped), string(models.JobSucceeded))
// jobStatusesCount := 0
// for _, v := range jobStatuses {
// if _, ok := cloudBrainStatusResult[v]; !ok {
// cloudBrainStatusAnalysis[v] = 0
// } else {
// cloudBrainStatusAnalysis[v] = cloudBrainStatusResult[v]
// }
// jobStatusesCount = jobStatusesCount + cloudBrainStatusResult[v]
// }
// cloudBrainStatusAnalysis["OTHER"] = totalCount - jobStatusesCount

cloudbrainStatusCount, err := models.GetCloudbrainStatusCount()
log.Info("cloudbrainStatusCount:", cloudbrainStatusCount)
if err != nil {
@@ -792,7 +740,6 @@ func GetCloudbrainsStatusAnalysis(ctx *context.Context) {
}

ctx.JSON(http.StatusOK, map[string]interface{}{
// "cloudBrainStatusResult": cloudBrainStatusAnalysis,
"cloudbrainStatusCount": cloudbrainStatusCount,
})
}
@@ -893,14 +840,6 @@ func GetCloudbrainsDetailData(ctx *context.Context) {
} else {
taskDetail.WorkServerNum = 1
}
// taskDetail.CardNum, taskDetail.CardType, _ = repo.GetCloudbrainCardNumAndType(ciTasks[i].Cloudbrain)
// if ciTasks[i].Cloudbrain.Spec != nil {
// taskDetail.CardNum = ciTasks[i].Cloudbrain.Spec.AccCardsNum
// taskDetail.CardType = ciTasks[i].Cloudbrain.Spec.AccCardType
// taskDetail.AiCenter = ciTasks[i].Cloudbrain.Spec.AiCenterName
// }
// taskDetail.AiCenter = repo.GetCloudbrainAiCenter(ciTasks[i].Cloudbrain, ctx)
// taskDetail.FlavorName, _ = repo.GetCloudbrainFlavorName(ciTasks[i].Cloudbrain)
taskDetail.CardDuration = repo.GetCloudbrainCardDuration(ciTasks[i].Cloudbrain)
taskDetail.WaitTime = repo.GetCloudbrainWaitTime(ciTasks[i].Cloudbrain)

@@ -926,17 +865,6 @@ func GetCloudbrainsDetailData(ctx *context.Context) {
})
}

func getCloudbrainAiCenter(task models.Cloudbrain, ctx *context.Context) string {
if task.Type == models.TypeCloudBrainOne {
return ctx.Tr("repo.cloudbrain1")
} else if task.Type == models.TypeCloudBrainTwo {
return ctx.Tr("repo.cloudbrain2")
} else if task.Type == models.TypeC2Net {
return task.AiCenter
}
return ""
}

func GetCloudbrainsCreateHoursData(ctx *context.Context) {
recordCloudbrain, err := models.GetRecordBeginTime()
if err != nil {
@@ -1350,6 +1278,7 @@ func DownloadCloudBrainBoard(ctx *context.Context) {
log.Warn("Can not get cloud brain info", err)
continue
}
models.LoadSpecs4CloudbrainInfo(pageRecords)
for _, record := range pageRecords {

for k, v := range allCloudbrainValues(row, record, ctx) {
@@ -1380,10 +1309,9 @@ func allCloudbrainHeader(ctx *context.Context) map[string]string {
"H1": ctx.Tr("cloudbrain.card_duration"),
"I1": ctx.Tr("repo.modelarts.train_job.start_time"), "J1": ctx.Tr("repo.modelarts.train_job.end_time"),
"K1": ctx.Tr("repo.modelarts.computing_resources"), "L1": ctx.Tr("cloudbrain.card_type"),
"M1": ctx.Tr("repo.grampus.train_job.ai_center"), "N1": ctx.Tr("cloudbrain.resource_specification"),
"O1": ctx.Tr("repo.cloudbrain_creator"), "P1": ctx.Tr("repo.repo_name"), "Q1": ctx.Tr("repo.cloudbrain_task_name"),
"R1": ctx.Tr("repo.modelarts.deletetime")}

"M1": ctx.Tr("repo.modelarts.train_job.amount_of_compute_node"), "N1": ctx.Tr("repo.grampus.train_job.ai_center"),
"O1": ctx.Tr("cloudbrain.resource_specification"), "P1": ctx.Tr("repo.cloudbrain_creator"), "Q1": ctx.Tr("repo.repo_name"),
"R1": ctx.Tr("repo.cloudbrain_task_name"), "S1": ctx.Tr("repo.modelarts.deletetime")}
}
func allCloudbrainValues(row int, rs *models.CloudbrainInfo, ctx *context.Context) map[string]string {
return map[string]string{getCellName("A", row): rs.DisplayJobName, getCellName("B", row): getCloudbrainType(rs, ctx), getCellName("C", row): rs.Status, getCellName("D", row): rs.JobType,
@@ -1391,9 +1319,16 @@ func allCloudbrainValues(row int, rs *models.CloudbrainInfo, ctx *context.Contex
getCellName("G", row): rs.TrainJobDuration, getCellName("H", row): repo.GetCloudbrainCardDuration(rs.Cloudbrain),
getCellName("I", row): getBrainStartTime(rs),
getCellName("J", row): getBrainEndTime(rs), getCellName("K", row): rs.ComputeResource, getCellName("L", row): getCloudbrainCardType(rs),
getCellName("M", row): repo.GetCloudbrainAiCenter(rs.Cloudbrain, ctx), getCellName("N", row): getCloudbrainFlavorName(rs),
getCellName("O", row): rs.Name, getCellName("P", row): getBrainRepo(rs),
getCellName("Q", row): rs.JobName, getCellName("R", row): getBrainDeleteTime(rs),
getCellName("M", row): getWorkServerNum(rs), getCellName("N", row): repo.GetCloudbrainAiCenter(rs.Cloudbrain, ctx),
getCellName("O", row): getCloudbrainFlavorName(rs), getCellName("P", row): rs.Name,
getCellName("Q", row): getBrainRepo(rs), getCellName("R", row): rs.JobName, getCellName("S", row): getBrainDeleteTime(rs),
}
}
func getWorkServerNum(rs *models.CloudbrainInfo) string {
if rs.Cloudbrain.WorkServerNumber >= 1 {
return fmt.Sprint(rs.Cloudbrain.WorkServerNumber)
} else {
return "1"
}
}
func getBrainRepo(rs *models.CloudbrainInfo) string {
@@ -1432,11 +1367,14 @@ func getCloudbrainType(rs *models.CloudbrainInfo, ctx *context.Context) string {
}
}
func getCloudbrainCardType(rs *models.CloudbrainInfo) string {
_, cardType, _ := repo.GetCloudbrainCardNumAndType(rs.Cloudbrain)
return cardType
if rs.Cloudbrain.Spec != nil {
return rs.Cloudbrain.Spec.AccCardType
} else {
return ""
}
}
func getCloudbrainFlavorName(rs *models.CloudbrainInfo) string {
flavorName, _ := repo.GetCloudbrainFlavorName(rs.Cloudbrain)
flavorName := repo.GetCloudbrainFlavorName(rs.Cloudbrain)
return flavorName
}



+ 9
- 116
routers/repo/cloudbrain.go View File

@@ -2813,16 +2813,11 @@ func GetBenchmarkTypes(ctx *context.Context) *models.BenchmarkTypes {
}

func GetCloudbrainAiCenter(task models.Cloudbrain, ctx *context.Context) string {
if task.Type == models.TypeCloudBrainOne {
return ctx.Tr("repo.cloudbrain1")
} else if task.Type == models.TypeCloudBrainTwo {
return ctx.Tr("repo.cloudbrain2")
} else if task.Type == models.TypeCDCenter {
return ctx.Tr("repo.cdCenter")
} else if task.Type == models.TypeC2Net {
return getCutStringAiCenterByAiCenter(task.AiCenter)
if task.Spec != nil {
return task.Spec.AiCenterName
} else {
return ""
}
return ""
}
func getCutStringAiCenterByAiCenter(aiCenter string) string {
if aiCenter == "" {
@@ -2885,114 +2880,12 @@ func GetCloudbrainWaitTime(task models.Cloudbrain) string {
}
return waitTime
}

func GetCloudbrainCardNumAndType(task models.Cloudbrain) (int, string, error) {
if !models.SpecsMapInitFlag {
models.InitCloudbrainOneResourceSpecMap()
}
if !models.GpuInfosMapInitFlag {
models.InitCloudbrainOneGpuInfoMap()
}
flavorName, err := GetCloudbrainFlavorName(task)
if err != nil {
return 0, "", nil
}
return getCardNumAndTypeByFlavorname(flavorName)
}

func getCardNumAndTypeByFlavorname(FlavorName string) (int, string, error) {
if FlavorName == "" {
return 0, "", nil
} else {
var beginIndex = strings.Index(FlavorName, ":")
var lastIndex = strings.LastIndex(FlavorName, ":")
var endIndex = strings.Index(FlavorName, "*")
if endIndex >= (beginIndex+1) && lastIndex >= (endIndex+1) {
cardNum, err := strconv.Atoi(strings.TrimSpace(FlavorName[beginIndex+1 : endIndex]))
if err != nil {
log.Error("strconv.Atoi failed: %v", err)
return 0, "", err
}
cardType := strings.TrimSpace(FlavorName[endIndex+1 : lastIndex])
return cardNum, cardType, err
}
return 0, "", nil
}
}

func GetCloudbrainFlavorName(task models.Cloudbrain) (string, error) {
if task.Type == models.TypeCloudBrainOne {
resourceSpec, gpuInfo, err := getCloudBrainOneResourceSpec(task)
if err != nil {
log.Info("getCloudBrainOneResourceSpec err:", err)
return "", err
} else {
if resourceSpec == nil || gpuInfo == nil {
err := errors.New("resourceSpec or gpuInfo is nil")
return "", err
} else {
CloudbrainOneFlavorName := "GPU:" + strconv.Itoa(resourceSpec.GpuNum) + "*Nvidia-" + gpuInfo.Value +
" | CPU:" + strconv.Itoa(resourceSpec.CpuNum) + "核" + strconv.Itoa(resourceSpec.MemMiB) + "MB"
return CloudbrainOneFlavorName, nil
}
}
} else if (task.Type == models.TypeCloudBrainTwo || task.Type == models.TypeC2Net || task.Type == models.TypeCDCenter) && task.FlavorName != "" {
replaceFlavorName := strings.ReplaceAll(task.FlavorName, ":", ":")
return replaceFlavorName, nil
} else if (task.Type == models.TypeCloudBrainTwo || task.Type == models.TypeCDCenter) && task.FlavorName == "" && task.FlavorCode != "" {
cloudbrainTwoFlavorName := getFlavorNameByFlavorCode(task.FlavorCode)
return cloudbrainTwoFlavorName, nil
} else if task.Type == models.TypeCloudBrainTwo && task.JobType == string(models.JobTypeDebug) && task.FlavorName == "" && task.FlavorCode == "" {
tasks, err := models.GetModelartsReDebugTaskByJobId(task.JobID)
if err != nil {
return "", err
}
if len(tasks) >= 1 {
return getFlavorNameByFlavorCode(tasks[0].FlavorCode), nil
}
return "", nil
}
return "", nil
}

func getCloudBrainOneResourceSpec(task models.Cloudbrain) (*models.ResourceSpec, *models.GpuInfo, error) {
gpuQueueDefault := "openidebug"
if task.GpuQueue != "" {
gpuQueueDefault = task.GpuQueue
}
if task.ResourceSpecId >= 0 {
if task.JobType == string(models.JobTypeTrain) {
if models.CloudbrainTrainResourceSpecsMap[task.ResourceSpecId] != nil {
return models.CloudbrainTrainResourceSpecsMap[task.ResourceSpecId], models.CloudbrainTrainGpuInfosMap[gpuQueueDefault], nil
} else {
return models.CloudbrainSpecialResourceSpecsMap[task.ResourceSpecId], models.CloudbrainSpecialGpuInfosMap[gpuQueueDefault], nil
}
} else if task.JobType == string(models.JobTypeDebug) {
if models.CloudbrainDebugResourceSpecsMap[task.ResourceSpecId] != nil {
return models.CloudbrainDebugResourceSpecsMap[task.ResourceSpecId], models.CloudbrainDebugGpuInfosMap[gpuQueueDefault], nil
} else {
return models.CloudbrainSpecialResourceSpecsMap[task.ResourceSpecId], models.CloudbrainSpecialGpuInfosMap[gpuQueueDefault], nil
}
} else if task.JobType == string(models.JobTypeInference) {
return models.CloudbrainInferenceResourceSpecsMap[task.ResourceSpecId], models.CloudbrainInferenceGpuInfosMap[gpuQueueDefault], nil
} else if task.JobType == string(models.JobTypeBenchmark) || task.JobType == string(models.JobTypeSnn4imagenet) || task.JobType == string(models.JobTypeBrainScore) {
return models.CloudbrainBenchmarkResourceSpecsMap[task.ResourceSpecId], models.CloudbrainBenchmarkGpuInfosMap[gpuQueueDefault], nil
}
func GetCloudbrainFlavorName(task models.Cloudbrain) string {
if task.Spec != nil {
flavorName := task.Spec.ComputeResource + ":" + fmt.Sprint(task.Spec.AccCardsNum) + "*" + task.Spec.AccCardType +
",内存:" + strconv.FormatFloat(float64(task.Spec.MemGiB), 'f', 6, 64) + "GB,共享内存:" + strconv.FormatFloat(float64(task.Spec.ShareMemGiB), 'f', 6, 64) + "GB"
return flavorName
} else {
err := errors.New("ResourceSpecId is null")
return nil, nil, err
}
return nil, nil, nil
}
func getFlavorNameByFlavorCode(flavorCode string) string {
index := strings.LastIndex(flavorCode, ".")
cardNum, err := strconv.Atoi(strings.TrimSpace(flavorCode[index+1 : len(flavorCode)]))
if err != nil {
log.Error("strconv.Atoi failed: %v", err)
return ""
}
cloudbrainTwoFlavorName := "Ascend:" + strings.TrimSpace(flavorCode[index+1:len(flavorCode)]) +
"*Ascend-910(" + strconv.Itoa(cardNum*32) + "GB)|ARM:" + strconv.Itoa(cardNum*24) +
"核" + strconv.Itoa(cardNum*256) + "GB"
return cloudbrainTwoFlavorName
}

+ 0
- 3
routers/user/home.go View File

@@ -840,9 +840,6 @@ func Cloudbrains(ctx *context.Context) {
ciTasks[i].CanDebug = true
ciTasks[i].CanDel = true
ciTasks[i].Cloudbrain.ComputeResource = task.ComputeResource
// ciTasks[i].Cloudbrain.AiCenter = repo.GetCloudbrainAiCenter(task.Cloudbrain, ctx)
// ciTasks[i].Cloudbrain.Cluster = repo.GetCloudbrainCluster(task.Cloudbrain, ctx)

}

pager := context.NewPagination(int(count), setting.UI.IssuePagingNum, page, getTotalPage(count, setting.UI.IssuePagingNum))


Loading…
Cancel
Save