| @@ -1680,6 +1680,37 @@ func GetCloudbrainsNeededStopByUserID(userID int64) ([]*Cloudbrain, error) { | |||
| 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) { | |||
| 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) | |||
| @@ -211,21 +211,6 @@ func GetAllStatusCloudBrain() map[string]int { | |||
| 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) { | |||
| sess := x.NewSession() | |||
| defer sess.Close() | |||
| @@ -466,11 +466,14 @@ func RestartTask(ctx *context.Context, task *models.Cloudbrain, newID *string) e | |||
| log.Error("no such resourceSpecId(%d)", task.ResourceSpecId, ctx.Data["MsgID"]) | |||
| return errors.New("no such resourceSpec") | |||
| } | |||
| datasetInfos, _, err := models.GetDatasetInfo(task.Uuid) | |||
| if err != nil { | |||
| log.Error("GetDatasetInfo failed:%v", err, ctx.Data["MsgID"]) | |||
| return err | |||
| var datasetInfos map[string]models.DatasetInfo | |||
| if task.Uuid != "" { | |||
| var err error | |||
| datasetInfos, _, err = models.GetDatasetInfo(task.Uuid) | |||
| if err != nil { | |||
| log.Error("GetDatasetInfo failed:%v", err, ctx.Data["MsgID"]) | |||
| return err | |||
| } | |||
| } | |||
| volumes := []models.Volume{ | |||
| @@ -510,24 +513,25 @@ func RestartTask(ctx *context.Context, task *models.Cloudbrain, newID *string) e | |||
| }, | |||
| }, | |||
| } | |||
| if len(datasetInfos) == 1 { | |||
| volumes = append(volumes, models.Volume{ | |||
| HostPath: models.StHostPath{ | |||
| Path: datasetInfos[task.Uuid].DataLocalPath, | |||
| MountPath: DataSetMountPath, | |||
| ReadOnly: true, | |||
| }, | |||
| }) | |||
| } else { | |||
| for _, dataset := range datasetInfos { | |||
| if datasetInfos != nil { | |||
| if len(datasetInfos) == 1 { | |||
| volumes = append(volumes, models.Volume{ | |||
| HostPath: models.StHostPath{ | |||
| Path: dataset.DataLocalPath, | |||
| MountPath: DataSetMountPath + "/" + dataset.Name, | |||
| Path: datasetInfos[task.Uuid].DataLocalPath, | |||
| MountPath: DataSetMountPath, | |||
| ReadOnly: true, | |||
| }, | |||
| }) | |||
| } else { | |||
| for _, dataset := range datasetInfos { | |||
| volumes = append(volumes, models.Volume{ | |||
| HostPath: models.StHostPath{ | |||
| Path: dataset.DataLocalPath, | |||
| MountPath: DataSetMountPath + "/" + dataset.Name, | |||
| ReadOnly: true, | |||
| }, | |||
| }) | |||
| } | |||
| } | |||
| } | |||
| @@ -2993,33 +2993,33 @@ func GetCloudbrainCluster(task models.Cloudbrain, ctx *context.Context) string { | |||
| return "" | |||
| } | |||
| 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 { | |||
| var WaitTime string | |||
| var waitTime string | |||
| 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 { | |||
| 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 { | |||
| 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) { | |||
| @@ -3029,11 +3029,11 @@ func GetCloudbrainCardNumAndType(task models.Cloudbrain) (int, string, error) { | |||
| if !models.GpuInfosMapInitFlag { | |||
| models.InitCloudbrainOneGpuInfoMap() | |||
| } | |||
| FlavorName, err := GetCloudbrainFlavorName(task) | |||
| flavorName, err := GetCloudbrainFlavorName(task) | |||
| if err != nil { | |||
| return 0, "", nil | |||
| } | |||
| return getCardNumAndTypeByFlavorname(FlavorName) | |||
| return getCardNumAndTypeByFlavorname(flavorName) | |||
| } | |||
| 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) { | |||
| if task.Type == models.TypeCloudBrainOne { | |||
| ResourceSpec, GpuInfo, err := getCloudBrainOneResourceSpec(task) | |||
| 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") | |||
| 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" | |||
| 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.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 != "" { | |||
| 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 { | |||
| log.Error("strconv.Atoi failed: %v", 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 | |||
| } | |||
| @@ -3112,3 +3112,15 @@ func getCloudBrainOneResourceSpec(task models.Cloudbrain) (*models.ResourceSpec, | |||
| } | |||
| 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 | |||
| } | |||
| @@ -896,7 +896,7 @@ func QueryUserLoginInfo(ctx *context.Context) { | |||
| xlsx.SetCellValue(sheetName, getColumn(tmp)+rows, userLogin.IpAddr) | |||
| tmp = tmp + 1 | |||
| formatTime := userLogin.CreatedUnix.Format("2006-01-02 15:04:05") | |||
| xlsx.SetCellValue(sheetName, getColumn(tmp)+rows, formatTime[0:len(formatTime)-3]) | |||
| xlsx.SetCellValue(sheetName, getColumn(tmp)+rows, formatTime) | |||
| } | |||
| //设置默认打开的表单 | |||
| xlsx.SetActiveSheet(index) | |||
| @@ -1136,7 +1136,7 @@ func RegisterRoutes(m *macaron.Macaron) { | |||
| }) | |||
| }, context.RepoRef()) | |||
| m.Group("/modelmanage", func() { | |||
| m.Post("/create_model", reqRepoModelManageWriter, repo.SaveModel) | |||
| m.Post("/create_model", repo.SaveModel) | |||
| m.Post("/create_model_convert", reqRepoModelManageWriter, repo.SaveModelConvert) | |||
| m.Post("/create_new_model", repo.SaveNewNameModel) | |||
| m.Delete("/delete_model", repo.DeleteModel) | |||
| @@ -497,6 +497,7 @@ | |||
| } | |||
| validate(); | |||
| $('.ui.create_train_job.green.button').click(function(e) { | |||
| send_run_para() | |||
| send_run_para(); | |||
| validate(); | |||
| }) | |||
| </script> | |||
| @@ -499,6 +499,7 @@ | |||
| } | |||
| validate(); | |||
| $('.ui.create_train_job.green.button').click(function (e) { | |||
| send_run_para() | |||
| send_run_para(); | |||
| validate(); | |||
| }) | |||
| </script> | |||
| @@ -446,6 +446,7 @@ | |||
| } | |||
| validate(); | |||
| $('.ui.create_train_job.green.button').click(function(e) { | |||
| send_run_para() | |||
| send_run_para(); | |||
| validate(); | |||
| }) | |||
| </script> | |||
| @@ -478,6 +478,7 @@ | |||
| validate(); | |||
| $('.ui.create_train_job.green.button').click(function(e) { | |||
| get_name() | |||
| send_run_para() | |||
| send_run_para(); | |||
| validate(); | |||
| }) | |||
| </script> | |||
| @@ -522,6 +522,7 @@ | |||
| validate(); | |||
| $('.ui.create_train_job.green.button').click(function(e) { | |||
| send_run_para() | |||
| get_name() | |||
| get_name(); | |||
| validate(); | |||
| }) | |||
| </script> | |||
| @@ -531,6 +531,7 @@ | |||
| validate(); | |||
| $('.ui.create_train_job.green.button').click(function (e) { | |||
| get_name() | |||
| send_run_para() | |||
| send_run_para(); | |||
| validate(); | |||
| }) | |||
| </script> | |||
| @@ -956,7 +956,6 @@ export default { | |||
| this.benchmarkNew = true; | |||
| } | |||
| if (location.href.indexOf("modelarts/notebook/create") !== -1 || location.href.indexOf("/cloudbrain/create") !== -1) { | |||
| console.log("required is false;"); | |||
| this.required = false; | |||
| } | |||
| window.onresize = () => { | |||