@@ -1680,6 +1680,37 @@ func GetCloudbrainsNeededStopByUserID(userID int64) ([]*Cloudbrain, error) { | |||||
return cloudBrains, err | return cloudBrains, err | ||||
} | } | ||||
func GetWaittingTop() ([]*CloudbrainInfo, error) { | |||||
sess := x.NewSession() | |||||
defer sess.Close() | |||||
var cond = builder.NewCond() | |||||
cond = cond.And( | |||||
builder.Eq{"cloudbrain.status": string(JobWaiting)}, | |||||
) | |||||
sess.OrderBy("cloudbrain.created_unix ASC limit 1") | |||||
cloudbrains := make([]*CloudbrainInfo, 0, 1) | |||||
if err := sess.Table(&Cloudbrain{}).Where(cond). | |||||
Find(&cloudbrains); err != nil { | |||||
log.Info("find error.") | |||||
} | |||||
return cloudbrains, nil | |||||
} | |||||
func GetModelartsReDebugTaskByJobId(jobID string) ([]*Cloudbrain, error) { | |||||
sess := x.NewSession() | |||||
defer sess.Close() | |||||
var cond = builder.NewCond() | |||||
cond = cond.And( | |||||
builder.Eq{"cloudbrain.job_id": jobID}, | |||||
) | |||||
sess.OrderBy("cloudbrain.created_unix ASC limit 1") | |||||
cloudbrains := make([]*Cloudbrain, 0, 10) | |||||
if err := sess.Table(&Cloudbrain{}).Unscoped().Where(cond). | |||||
Find(&cloudbrains); err != nil { | |||||
log.Info("find error.") | |||||
} | |||||
return cloudbrains, nil | |||||
} | |||||
func GetCloudbrainsNeededStopByRepoID(repoID int64) ([]*Cloudbrain, error) { | func GetCloudbrainsNeededStopByRepoID(repoID int64) ([]*Cloudbrain, error) { | ||||
cloudBrains := make([]*Cloudbrain, 0) | cloudBrains := make([]*Cloudbrain, 0) | ||||
err := x.Cols("job_id", "status", "type", "job_type", "version_id", "start_time").Where("repo_id=? AND status !=?", repoID, string(JobStopped)).Find(&cloudBrains) | err := x.Cols("job_id", "status", "type", "job_type", "version_id", "start_time").Where("repo_id=? AND status !=?", repoID, string(JobStopped)).Find(&cloudBrains) | ||||
@@ -211,21 +211,6 @@ func GetAllStatusCloudBrain() map[string]int { | |||||
return cloudBrainStatusResult | return cloudBrainStatusResult | ||||
} | } | ||||
func GetWaittingTop() ([]*CloudbrainInfo, error) { | |||||
sess := x.NewSession() | |||||
defer sess.Close() | |||||
var cond = builder.NewCond() | |||||
cond = cond.And( | |||||
builder.Eq{"cloudbrain.status": string(JobWaiting)}, | |||||
) | |||||
sess.OrderBy("cloudbrain.created_unix ASC limit 10") | |||||
cloudbrains := make([]*CloudbrainInfo, 0, 10) | |||||
if err := sess.Table(&Cloudbrain{}).Where(cond). | |||||
Find(&cloudbrains); err != nil { | |||||
log.Info("find error.") | |||||
} | |||||
return cloudbrains, nil | |||||
} | |||||
func GetRunningTop() ([]*CloudbrainInfo, error) { | func GetRunningTop() ([]*CloudbrainInfo, error) { | ||||
sess := x.NewSession() | sess := x.NewSession() | ||||
defer sess.Close() | defer sess.Close() | ||||
@@ -2993,33 +2993,33 @@ func GetCloudbrainCluster(task models.Cloudbrain, ctx *context.Context) string { | |||||
return "" | return "" | ||||
} | } | ||||
func GetCloudbrainCardDuration(task models.Cloudbrain) string { | func GetCloudbrainCardDuration(task models.Cloudbrain) string { | ||||
CardNum, _, _ := GetCloudbrainCardNumAndType(task) | |||||
CardDuration := models.ConvertDurationToStr(int64(CardNum) * task.Duration) | |||||
return CardDuration | |||||
cardNum, _, _ := GetCloudbrainCardNumAndType(task) | |||||
cardDuration := models.ConvertDurationToStr(int64(cardNum) * task.Duration) | |||||
return cardDuration | |||||
} | } | ||||
func GetCloudbrainWaitTime(task models.Cloudbrain) string { | func GetCloudbrainWaitTime(task models.Cloudbrain) string { | ||||
var WaitTime string | |||||
var waitTime string | |||||
if task.Status == string(models.JobWaiting) { | if task.Status == string(models.JobWaiting) { | ||||
WaitTimeInt := time.Now().Unix() - task.CreatedUnix.AsTime().Unix() | |||||
WaitTime = models.ConvertDurationToStr(WaitTimeInt) | |||||
if WaitTimeInt < 0 { | |||||
WaitTime = "00:00:00" | |||||
waitTimeInt := time.Now().Unix() - task.CreatedUnix.AsTime().Unix() | |||||
waitTime = models.ConvertDurationToStr(waitTimeInt) | |||||
if waitTimeInt < 0 { | |||||
waitTime = "00:00:00" | |||||
} | } | ||||
} else if task.Status == string(models.JobStopped) && task.StartTime.AsTime().Unix() == 0 { | } else if task.Status == string(models.JobStopped) && task.StartTime.AsTime().Unix() == 0 { | ||||
WaitTimeInt := task.EndTime.AsTime().Unix() - task.CreatedUnix.AsTime().Unix() | |||||
WaitTime = models.ConvertDurationToStr(WaitTimeInt) | |||||
if WaitTimeInt < 0 { | |||||
WaitTime = "00:00:00" | |||||
waitTimeInt := task.EndTime.AsTime().Unix() - task.CreatedUnix.AsTime().Unix() | |||||
waitTime = models.ConvertDurationToStr(waitTimeInt) | |||||
if waitTimeInt < 0 { | |||||
waitTime = "00:00:00" | |||||
} | } | ||||
} else { | } else { | ||||
WaitTimeInt := task.StartTime.AsTime().Unix() - task.CreatedUnix.AsTime().Unix() | |||||
WaitTime = models.ConvertDurationToStr(WaitTimeInt) | |||||
if WaitTimeInt < 0 { | |||||
WaitTime = "00:00:00" | |||||
waitTimeInt := task.StartTime.AsTime().Unix() - task.CreatedUnix.AsTime().Unix() | |||||
waitTime = models.ConvertDurationToStr(waitTimeInt) | |||||
if waitTimeInt < 0 { | |||||
waitTime = "00:00:00" | |||||
} | } | ||||
} | } | ||||
return WaitTime | |||||
return waitTime | |||||
} | } | ||||
func GetCloudbrainCardNumAndType(task models.Cloudbrain) (int, string, error) { | func GetCloudbrainCardNumAndType(task models.Cloudbrain) (int, string, error) { | ||||
@@ -3029,11 +3029,11 @@ func GetCloudbrainCardNumAndType(task models.Cloudbrain) (int, string, error) { | |||||
if !models.GpuInfosMapInitFlag { | if !models.GpuInfosMapInitFlag { | ||||
models.InitCloudbrainOneGpuInfoMap() | models.InitCloudbrainOneGpuInfoMap() | ||||
} | } | ||||
FlavorName, err := GetCloudbrainFlavorName(task) | |||||
flavorName, err := GetCloudbrainFlavorName(task) | |||||
if err != nil { | if err != nil { | ||||
return 0, "", nil | return 0, "", nil | ||||
} | } | ||||
return getCardNumAndTypeByFlavorname(FlavorName) | |||||
return getCardNumAndTypeByFlavorname(flavorName) | |||||
} | } | ||||
func getCardNumAndTypeByFlavorname(FlavorName string) (int, string, error) { | func getCardNumAndTypeByFlavorname(FlavorName string) (int, string, error) { | ||||
@@ -3058,36 +3058,36 @@ func getCardNumAndTypeByFlavorname(FlavorName string) (int, string, error) { | |||||
func GetCloudbrainFlavorName(task models.Cloudbrain) (string, error) { | func GetCloudbrainFlavorName(task models.Cloudbrain) (string, error) { | ||||
if task.Type == models.TypeCloudBrainOne { | if task.Type == models.TypeCloudBrainOne { | ||||
ResourceSpec, GpuInfo, err := getCloudBrainOneResourceSpec(task) | |||||
resourceSpec, gpuInfo, err := getCloudBrainOneResourceSpec(task) | |||||
if err != nil { | if err != nil { | ||||
log.Info("getCloudBrainOneResourceSpec err:", err) | log.Info("getCloudBrainOneResourceSpec err:", err) | ||||
return "", err | return "", err | ||||
} else { | } else { | ||||
if ResourceSpec == nil || GpuInfo == nil { | |||||
err := errors.New("ResourceSpec or GpuInfo is nil") | |||||
if resourceSpec == nil || gpuInfo == nil { | |||||
err := errors.New("resourceSpec or gpuInfo is nil") | |||||
return "", err | return "", err | ||||
} else { | } else { | ||||
CloudbrainOneFlavorName := "GPU:" + strconv.Itoa(ResourceSpec.GpuNum) + "*Nvidia-" + GpuInfo.Value + | |||||
" | CPU:" + strconv.Itoa(ResourceSpec.CpuNum) + "核" + strconv.Itoa(ResourceSpec.MemMiB) + "MB" | |||||
CloudbrainOneFlavorName := "GPU:" + strconv.Itoa(resourceSpec.GpuNum) + "*Nvidia-" + gpuInfo.Value + | |||||
" | CPU:" + strconv.Itoa(resourceSpec.CpuNum) + "核" + strconv.Itoa(resourceSpec.MemMiB) + "MB" | |||||
return CloudbrainOneFlavorName, nil | return CloudbrainOneFlavorName, nil | ||||
} | } | ||||
} | } | ||||
} else if (task.Type == models.TypeCloudBrainTwo || task.Type == models.TypeC2Net) && task.FlavorName != "" { | } else if (task.Type == models.TypeCloudBrainTwo || task.Type == models.TypeC2Net) && task.FlavorName != "" { | ||||
ReplaceFlavorName := strings.ReplaceAll(task.FlavorName, ":", ":") | |||||
return ReplaceFlavorName, nil | |||||
replaceFlavorName := strings.ReplaceAll(task.FlavorName, ":", ":") | |||||
return replaceFlavorName, nil | |||||
} else if task.Type == models.TypeCloudBrainTwo && task.FlavorName == "" && task.FlavorCode != "" { | } else if task.Type == models.TypeCloudBrainTwo && task.FlavorName == "" && task.FlavorCode != "" { | ||||
index := strings.LastIndex(task.FlavorCode, ".") | |||||
cardNum, err := strconv.Atoi(strings.TrimSpace(task.FlavorCode[index+1 : len(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 { | if err != nil { | ||||
log.Error("strconv.Atoi failed: %v", err) | |||||
return "", err | return "", err | ||||
} | } | ||||
CloudbrainTwoFlavorName := "Ascend:" + strings.TrimSpace(task.FlavorCode[index+1:len(task.FlavorCode)]) + | |||||
"*Ascend-910(" + strconv.Itoa(cardNum*32) + "GB)|ARM:" + strconv.Itoa(cardNum*24) + | |||||
"核" + strconv.Itoa(cardNum*256) + "GB" | |||||
return CloudbrainTwoFlavorName, nil | |||||
if len(tasks) >= 1 { | |||||
return getFlavorNameByFlavorCode(tasks[0].FlavorCode), nil | |||||
} | |||||
return "", nil | |||||
} | } | ||||
return "", nil | return "", nil | ||||
} | } | ||||
@@ -3112,3 +3112,15 @@ func getCloudBrainOneResourceSpec(task models.Cloudbrain) (*models.ResourceSpec, | |||||
} | } | ||||
return nil, nil, nil | 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 | |||||
} |
Dear OpenI User
Thank you for your continuous support to the Openl Qizhi Community AI Collaboration Platform. In order to protect your usage rights and ensure network security, we updated the Openl Qizhi Community AI Collaboration Platform Usage Agreement in January 2024. The updated agreement specifies that users are prohibited from using intranet penetration tools. After you click "Agree and continue", you can continue to use our services. Thank you for your cooperation and understanding.
For more agreement content, please refer to the《Openl Qizhi Community AI Collaboration Platform Usage Agreement》