From 2c6f265cdde12180442192a457181cf638636711 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Wed, 6 Jul 2022 09:53:54 +0800 Subject: [PATCH 01/75] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/cloudbrain.go | 8 ++ modules/auth/cloudbrain.go | 25 ++++ modules/cloudbrain/cloudbrain.go | 33 ++++- routers/repo/ai_model_manage.go | 2 +- routers/repo/cloudbrain.go | 284 ++++++++++++++++++++++++++++++++++++++- routers/repo/grampus.go | 4 + routers/routes/routes.go | 10 ++ 7 files changed, 359 insertions(+), 7 deletions(-) diff --git a/models/cloudbrain.go b/models/cloudbrain.go index 8e1b94a97..600c8ffc4 100755 --- a/models/cloudbrain.go +++ b/models/cloudbrain.go @@ -1742,6 +1742,14 @@ func GetBenchmarkCountByUserID(userID int64) (int, error) { return int(count), err } +func GetWaitingCloudbrainCount(cloudbrainType int, computeResource string, jobTypes ...JobType) (int64, error) { + sess := x.In("JobType", jobTypes).And("status=? and type=?", JobWaiting, cloudbrainType) + if computeResource != "" { + sess.And("compute_resource=?", computeResource) + } + return sess.Count(new(Cloudbrain)) +} + func GetCloudbrainNotebookCountByUserID(userID int64) (int, error) { count, err := x.In("status", ModelArtsCreateQueue, ModelArtsCreating, ModelArtsStarting, ModelArtsReadyToStart, ModelArtsResizing, ModelArtsStartQueuing, ModelArtsRunning, ModelArtsRestarting). And("job_type = ? and user_id = ? and type = ?", JobTypeDebug, userID, TypeCloudBrainTwo).Count(new(Cloudbrain)) diff --git a/modules/auth/cloudbrain.go b/modules/auth/cloudbrain.go index e5be38084..91fa8ad64 100755 --- a/modules/auth/cloudbrain.go +++ b/modules/auth/cloudbrain.go @@ -50,6 +50,27 @@ type EditImageCloudBrainForm struct { Topics string `form:"topics"` } +type CreateCloudBrainInferencForm struct { + JobName string `form:"job_name" binding:"Required"` + DisplayJobName string `form:"display_job_name" binding:"Required"` + Image string `form:"image" binding:"Required"` + Command string `form:"command" binding:"Required"` + Attachment string `form:"attachment" binding:"Required"` + JobType string `form:"job_type" binding:"Required"` + BenchmarkCategory string `form:"get_benchmark_category"` + GpuType string `form:"gpu_type"` + TrainUrl string `form:"train_url"` + TestUrl string `form:"test_url"` + Description string `form:"description"` + ResourceSpecId int `form:"resource_spec_id" binding:"Required"` + BootFile string `form:"boot_file"` + Params string `form:"run_para_list"` + BranchName string `form:"branch_name"` + ModelName string `form:"model_name" binding:"Required"` + ModelVersion string `form:"model_version" binding:"Required"` + CkptName string `form:"ckpt_name" binding:"Required"` +} + func (f *CreateCloudBrainForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { return validate(errs, ctx.Data, f, ctx.Locale) } @@ -61,3 +82,7 @@ func (f *CommitImageCloudBrainForm) Validate(ctx *macaron.Context, errs binding. func (f *EditImageCloudBrainForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { return validate(errs, ctx.Data, f, ctx.Locale) } + +func (f *CreateCloudBrainInferencForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { + return validate(errs, ctx.Data, f, ctx.Locale) +} diff --git a/modules/cloudbrain/cloudbrain.go b/modules/cloudbrain/cloudbrain.go index 430304dd5..1e6e15d92 100755 --- a/modules/cloudbrain/cloudbrain.go +++ b/modules/cloudbrain/cloudbrain.go @@ -37,6 +37,8 @@ const ( Success = "S000" DefaultBranchName = "master" + + ResultPath = "/result" ) var ( @@ -68,6 +70,11 @@ type GenerateCloudBrainTaskReq struct { BenchmarkTypeID int BenchmarkChildTypeID int ResourceSpecId int + ResultPath string + TrainUrl string + ModelName string + ModelVersion string + CkptName string } func isAdminOrOwnerOrJobCreater(ctx *context.Context, job *models.Cloudbrain, err error) bool { @@ -213,8 +220,7 @@ func AdminOrImageCreaterRight(ctx *context.Context) { func GenerateTask(req GenerateCloudBrainTaskReq) error { var resourceSpec *models.ResourceSpec var versionCount int - - if req.JobType == string(models.JobTypeTrain) { + if req.JobType == string(models.JobTypeTrain) || req.JobType == string(models.JobTypeInference) { versionCount = 1 if TrainResourceSpecs == nil { json.Unmarshal([]byte(setting.TrainResourceSpecs), &TrainResourceSpecs) @@ -277,6 +283,13 @@ func GenerateTask(req GenerateCloudBrainTaskReq) error { ReadOnly: true, }, }, + { + HostPath: models.StHostPath{ + Path: req.ResultPath, + MountPath: ResultPath, + ReadOnly: true, + }, + }, } if len(req.DatasetInfos) == 1 { @@ -357,6 +370,11 @@ func GenerateTask(req GenerateCloudBrainTaskReq) error { BootFile: req.BootFile, DatasetName: req.DatasetNames, Parameters: req.Params, + TrainUrl: req.TrainUrl, + ModelName: req.ModelName, + ModelVersion: req.ModelVersion, + CkptName: req.CkptName, + ResultUrl: req.ResultPath, CreatedUnix: createTime, UpdatedUnix: createTime, CommitID: req.CommitID, @@ -377,6 +395,8 @@ func GenerateTask(req GenerateCloudBrainTaskReq) error { notification.NotifyOtherTask(req.Ctx.User, req.Ctx.Repo.Repository, stringId, req.DisplayJobName, models.ActionCreateBenchMarkTask) } else if string(models.JobTypeTrain) == req.JobType { notification.NotifyOtherTask(req.Ctx.User, req.Ctx.Repo.Repository, jobID, req.DisplayJobName, models.ActionCreateGPUTrainTask) + } else if string(models.JobTypeInference) == req.JobType { + notification.NotifyOtherTask(req.Ctx.User, req.Ctx.Repo.Repository, jobID, req.DisplayJobName, models.ActionCreateInferenceTask) } else { notification.NotifyOtherTask(req.Ctx.User, req.Ctx.Repo.Repository, stringId, req.DisplayJobName, models.ActionCreateDebugGPUTask) } @@ -388,6 +408,15 @@ func IsBenchmarkJob(jobType string) bool { return string(models.JobTypeBenchmark) == jobType || string(models.JobTypeBrainScore) == jobType || string(models.JobTypeSnn4imagenet) == jobType } +func GetWaitingCloudbrainCount(cloudbrainType int, computeResource string, jobTypes ...models.JobType) int64 { + num, err := models.GetWaitingCloudbrainCount(cloudbrainType, computeResource, jobTypes...) + if err != nil { + log.Warn("Get waiting count err", err) + num = 0 + } + return num +} + func RestartTask(ctx *context.Context, task *models.Cloudbrain, newID *string) error { jobName := task.JobName diff --git a/routers/repo/ai_model_manage.go b/routers/repo/ai_model_manage.go index 2c24527ce..e135e9dc3 100644 --- a/routers/repo/ai_model_manage.go +++ b/routers/repo/ai_model_manage.go @@ -766,7 +766,7 @@ func QueryModelListForPredict(ctx *context.Context) { PageSize: -1, }, RepoID: repoId, - Type: -1, + Type: ctx.QueryInt("type"), New: -1, }) if err != nil { diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index 5a3d0a6f8..148ae4ead 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -46,6 +46,9 @@ const ( tplCloudBrainTrainJobNew base.TplName = "repo/cloudbrain/trainjob/new" tplCloudBrainTrainJobShow base.TplName = "repo/cloudbrain/trainjob/show" + + tplCloudBrainInferenceJobNew base.TplName = "repo/cloudbrain/inference/new" + tplCloudBrainInferenceJobShow base.TplName = "repo/cloudbrain/inference/show" ) var ( @@ -200,6 +203,8 @@ func CloudBrainNew(ctx *context.Context) { ctx.ServerError("get new cloudbrain info failed", err) return } + waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeCloudBrainOne, "", models.JobTypeDebug) + ctx.Data["WaitCount"] = waitCount ctx.HTML(200, tplCloudBrainNew) } @@ -318,6 +323,7 @@ func CloudBrainCreate(ctx *context.Context, form auth.CreateCloudBrainForm) { BenchmarkTypeID: 0, BenchmarkChildTypeID: 0, ResourceSpecId: resourceSpecId, + ResultPath: storage.GetMinioPath(jobName, cloudbrain.ResultPath+"/"), } err = cloudbrain.GenerateTask(req) @@ -334,6 +340,138 @@ func CloudBrainCreate(ctx *context.Context, form auth.CreateCloudBrainForm) { } } +func CloudBrainInferenceJobCreate(ctx *context.Context, form auth.CreateCloudBrainInferencForm) { + ctx.Data["PageIsCloudBrain"] = true + displayJobName := form.DisplayJobName + jobName := util.ConvertDisplayJobNameToJobName(displayJobName) + image := strings.TrimSpace(form.Image) + uuid := form.Attachment + jobType := form.JobType + gpuQueue := form.GpuType + codePath := setting.JobPath + jobName + cloudbrain.CodeMountPath + resourceSpecId := form.ResourceSpecId + branchName := form.BranchName + repo := ctx.Repo.Repository + + ckptUrl := form.TrainUrl + form.CkptName + + tpl := tplCloudBrainInferenceJobNew + command := cloudbrain.Command + if jobType == string(models.JobTypeTrain) { + tpl = tplCloudBrainTrainJobNew + commandTrain, err := getInferenceJobCommand(form) + if err != nil { + log.Error("getTrainJobCommand failed: %v", err) + ctx.RenderWithErr(err.Error(), tpl, &form) + return + } + + command = commandTrain + } + + tasks, err := models.GetCloudbrainsByDisplayJobName(repo.ID, jobType, displayJobName) + if err == nil { + if len(tasks) != 0 { + log.Error("the job name did already exist", ctx.Data["MsgID"]) + cloudBrainNewDataPrepare(ctx) + ctx.RenderWithErr("the job name did already exist", tpl, &form) + return + } + } else { + if !models.IsErrJobNotExist(err) { + log.Error("system error, %v", err, ctx.Data["MsgID"]) + cloudBrainNewDataPrepare(ctx) + ctx.RenderWithErr("system error", tpl, &form) + return + } + } + + if !jobNamePattern.MatchString(displayJobName) { + ctx.RenderWithErr(ctx.Tr("repo.cloudbrain_jobname_err"), tpl, &form) + return + } + + if jobType != string(models.JobTypeBenchmark) && jobType != string(models.JobTypeDebug) && jobType != string(models.JobTypeTrain) { + log.Error("jobtype error:", jobType, ctx.Data["MsgID"]) + cloudBrainNewDataPrepare(ctx) + ctx.RenderWithErr("jobtype error", tpl, &form) + return + } + + count, err := models.GetCloudbrainCountByUserID(ctx.User.ID, jobType) + if err != nil { + log.Error("GetCloudbrainCountByUserID failed:%v", err, ctx.Data["MsgID"]) + cloudBrainNewDataPrepare(ctx) + ctx.RenderWithErr("system error", tpl, &form) + return + } else { + if count >= 1 { + log.Error("the user already has running or waiting task", ctx.Data["MsgID"]) + cloudBrainNewDataPrepare(ctx) + ctx.RenderWithErr(ctx.Tr("repo.cloudbrain.morethanonejob"), tpl, &form) + return + } + } + + if branchName == "" { + branchName = cloudbrain.DefaultBranchName + } + downloadCode(repo, codePath, branchName) + uploadCodeToMinio(codePath+"/", jobName, cloudbrain.CodeMountPath+"/") + resultPath := setting.JobPath + jobName + cloudbrain.ResultPath + "/" + mkResultPath(resultPath) + uploadCodeToMinio(resultPath, jobName, cloudbrain.ResultPath+"/") + + commitID, _ := ctx.Repo.GitRepo.GetBranchCommitID(branchName) + + datasetInfos, datasetNames, err := models.GetDatasetInfo(uuid) + if err != nil { + log.Error("GetDatasetInfo failed: %v", err, ctx.Data["MsgID"]) + cloudBrainNewDataPrepare(ctx) + ctx.RenderWithErr(ctx.Tr("cloudbrain.error.dataset_select"), tpl, &form) + return + } + + req := cloudbrain.GenerateCloudBrainTaskReq{ + Ctx: ctx, + DisplayJobName: displayJobName, + JobName: jobName, + Image: image, + Command: command, + Uuids: uuid, + DatasetNames: datasetNames, + DatasetInfos: datasetInfos, + CodePath: storage.GetMinioPath(jobName, cloudbrain.CodeMountPath+"/"), + ModelPath: ckptUrl, + BenchmarkPath: storage.GetMinioPath(jobName, cloudbrain.BenchMarkMountPath+"/"), + Snn4ImageNetPath: storage.GetMinioPath(jobName, cloudbrain.Snn4imagenetMountPath+"/"), + BrainScorePath: storage.GetMinioPath(jobName, cloudbrain.BrainScoreMountPath+"/"), + JobType: jobType, + GpuQueue: gpuQueue, + Description: form.Description, + BranchName: branchName, + BootFile: form.BootFile, + Params: form.Params, + CommitID: commitID, + ResourceSpecId: resourceSpecId, + ResultPath: storage.GetMinioPath(jobName, cloudbrain.ResultPath+"/"), + ModelName: form.ModelName, + ModelVersion: form.ModelVersion, + CkptName: form.CkptName, + TrainUrl: form.TrainUrl, + } + + err = cloudbrain.GenerateTask(req) + if err != nil { + cloudBrainNewDataPrepare(ctx) + ctx.RenderWithErr(err.Error(), tpl, &form) + return + } + + ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/modelarts/inference-job") + +} + func CloudBrainRestart(ctx *context.Context) { var ID = ctx.Params(":id") var resultCode = "0" @@ -1181,6 +1319,20 @@ func CloudBrainDownloadModel(ctx *context.Context) { ctx.Resp.Header().Set("Cache-Control", "max-age=0") http.Redirect(ctx.Resp, ctx.Req.Request, url, http.StatusMovedPermanently) } +func CloudBrainDownloadInferenceResult(ctx *context.Context) { + parentDir := ctx.Query("parentDir") + fileName := ctx.Query("fileName") + jobName := ctx.Query("jobName") + filePath := "jobs/" + jobName + "/result/" + parentDir + url, err := storage.Attachments.PresignedGetURL(filePath, fileName) + if err != nil { + log.Error("PresignedGetURL failed: %v", err.Error(), ctx.Data["msgID"]) + ctx.ServerError("PresignedGetURL", err) + return + } + ctx.Resp.Header().Set("Cache-Control", "max-age=0") + http.Redirect(ctx.Resp, ctx.Req.Request, url, http.StatusMovedPermanently) +} func GetRate(ctx *context.Context) { isObjectDetcionAll := ctx.QueryBool("isObjectDetcionAll") @@ -1334,13 +1486,21 @@ func uploadCodeToMinio(codePath, jobName, parentDir string) error { } func mkModelPath(modelPath string) error { - err := os.MkdirAll(modelPath, os.ModePerm) + return mkPathAndReadMeFile(modelPath, "You can put the model file into this directory and download it by the web page.") +} + +func mkResultPath(resultPath string) error { + return mkPathAndReadMeFile(resultPath, "You can put the result file into this directory and download it by the web page.") +} + +func mkPathAndReadMeFile(path string, text string) error { + err := os.MkdirAll(path, os.ModePerm) if err != nil { - log.Error("MkdirAll(%s) failed:%v", modelPath, err) + log.Error("MkdirAll(%s) failed:%v", path, err) return err } - fileName := modelPath + "README" + fileName := path + "README" f, err := os.OpenFile(fileName, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, os.ModePerm) if err != nil { log.Error("OpenFile failed", err.Error()) @@ -1349,7 +1509,7 @@ func mkModelPath(modelPath string) error { defer f.Close() - _, err = f.WriteString("You can put the model file into this directory and download it by the web page.") + _, err = f.WriteString(text) if err != nil { log.Error("WriteString failed", err.Error()) return err @@ -1802,6 +1962,8 @@ func CloudBrainBenchmarkNew(ctx *context.Context) { ctx.ServerError("get new cloudbrain info failed", err) return } + waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeCloudBrainOne, "", models.JobTypeBrainScore, models.JobTypeSnn4imagenet, models.JobTypeBenchmark) + ctx.Data["WaitCount"] = waitCount ctx.HTML(200, tplCloudBrainBenchmarkNew) } @@ -2068,6 +2230,7 @@ func BenchMarkAlgorithmCreate(ctx *context.Context, form auth.CreateCloudBrainFo BenchmarkTypeID: benchmarkTypeID, BenchmarkChildTypeID: benchmarkChildTypeID, ResourceSpecId: resourceSpecId, + ResultPath: storage.GetMinioPath(jobName, cloudbrain.ResultPath+"/"), } err = cloudbrain.GenerateTask(req) @@ -2196,6 +2359,7 @@ func ModelBenchmarkCreate(ctx *context.Context, form auth.CreateCloudBrainForm) BenchmarkTypeID: 0, BenchmarkChildTypeID: benchmarkChildTypeID, ResourceSpecId: resourceSpecId, + ResultPath: storage.GetMinioPath(jobName, cloudbrain.ResultPath+"/"), } err = cloudbrain.GenerateTask(req) @@ -2243,9 +2407,121 @@ func CloudBrainTrainJobNew(ctx *context.Context) { ctx.ServerError("get new train-job info failed", err) return } + waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeCloudBrainOne, "", models.JobTypeTrain) + ctx.Data["WaitCount"] = waitCount ctx.HTML(http.StatusOK, tplCloudBrainTrainJobNew) } +func InferenceCloudBrainJobNew(ctx *context.Context) { + err := cloudBrainNewDataPrepare(ctx) + if err != nil { + ctx.ServerError("get new train-job info failed", err) + return + } + waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeCloudBrainOne, "", models.JobTypeInference) + ctx.Data["WaitCount"] = waitCount + ctx.HTML(http.StatusOK, tplCloudBrainInferenceJobNew) +} + +func InferenceCloudBrainJobShow(ctx *context.Context) { + err := cloudBrainNewDataPrepare(ctx) + if err != nil { + ctx.ServerError("get new train-job info failed", err) + return + } + + var jobID = ctx.Params(":jobid") + + task, err := models.GetCloudbrainByJobID(jobID) + + if err != nil { + log.Error("GetInferenceTask(%s) failed:%v", jobID, err.Error()) + ctx.RenderWithErr(err.Error(), tplCloudBrainInferenceJobShow, nil) + return + } + + //将运行参数转化为epoch_size = 3, device_target = Ascend的格式 + var parameters models.Parameters + err = json.Unmarshal([]byte(task.Parameters), ¶meters) + if err != nil { + log.Error("Failed to Unmarshal Parameters: %s (%v)", task.Parameters, err) + ctx.RenderWithErr(err.Error(), tplCloudBrainInferenceJobShow, nil) + return + } + + if len(parameters.Parameter) > 0 { + paramTemp := "" + for _, Parameter := range parameters.Parameter { + param := Parameter.Label + " = " + Parameter.Value + "; " + paramTemp = paramTemp + param + } + task.Parameters = paramTemp[:len(paramTemp)-2] + } else { + task.Parameters = "" + } + + LabelName := strings.Fields(task.LabelName) + ctx.Data["labelName"] = LabelName + ctx.Data["jobID"] = jobID + ctx.Data["jobName"] = task.JobName + ctx.Data["displayJobName"] = task.DisplayJobName + ctx.Data["task"] = task + ctx.Data["canDownload"] = cloudbrain.CanModifyJob(ctx, task) + + tempUids := []int64{} + tempUids = append(tempUids, task.UserID) + JobCreater, err := models.GetUserNamesByIDs(tempUids) + if err != nil { + log.Error("GetUserNamesByIDs (WhitelistUserIDs): %v", err) + } + ctx.Data["userName"] = JobCreater[0] + + ctx.HTML(http.StatusOK, tplCloudBrainInferenceJobShow) +} + +func DownloadInferenceResultFile(ctx *context.Context) { + var jobID = ctx.Params(":jobid") + var versionName = ctx.Query("version_name") + task, err := models.GetCloudbrainByJobIDAndVersionName(jobID, versionName) + if err != nil { + log.Error("GetCloudbrainByJobID(%s) failed:%v", task.JobName, err.Error()) + return + } + + allFile, err := storage.GetAllObjectByBucketAndPrefixMinio(setting.Attachment.Minio.Bucket, task.ResultUrl) + returnFileName := task.DisplayJobName + ".zip" + MinioDownloadManyFile(task.ResultUrl, ctx, returnFileName, allFile) +} + +func getInferenceJobCommand(form auth.CreateCloudBrainInferencForm) (string, error) { + var command string + bootFile := strings.TrimSpace(form.BootFile) + params := form.Params + + if !strings.HasSuffix(bootFile, ".py") { + log.Error("bootFile(%s) format error", bootFile) + return command, errors.New("bootFile format error") + } + + var parameters models.Parameters + var param string + if len(params) != 0 { + err := json.Unmarshal([]byte(params), ¶meters) + if err != nil { + log.Error("Failed to Unmarshal params: %s (%v)", params, err) + return command, err + } + + for _, parameter := range parameters.Parameter { + param += " --" + parameter.Label + "=" + parameter.Value + } + } + + command += "python /code/" + bootFile + param + " > " + cloudbrain.ResultPath + "/" + form.DisplayJobName + "-" + cloudbrain.LogFile + + return command, nil +} + func getTrainJobCommand(form auth.CreateCloudBrainForm) (string, error) { var command string bootFile := strings.TrimSpace(form.BootFile) diff --git a/routers/repo/grampus.go b/routers/repo/grampus.go index 2e084b535..978b7462d 100755 --- a/routers/repo/grampus.go +++ b/routers/repo/grampus.go @@ -43,6 +43,8 @@ func GrampusTrainJobGPUNew(ctx *context.Context) { ctx.ServerError("get new train-job info failed", err) return } + waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeC2Net, models.GPUResource, models.JobTypeTrain) + ctx.Data["WaitCount"] = waitCount ctx.HTML(http.StatusOK, tplGrampusTrainJobGPUNew) } @@ -53,6 +55,8 @@ func GrampusTrainJobNPUNew(ctx *context.Context) { ctx.ServerError("get new train-job info failed", err) return } + waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeC2Net, models.NPUResource, models.JobTypeTrain) + ctx.Data["WaitCount"] = waitCount ctx.HTML(200, tplGrampusTrainJobNPUNew) } diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 5c90f13fb..bbf594688 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -1090,6 +1090,16 @@ func RegisterRoutes(m *macaron.Macaron) { m.Get("/create", reqWechatBind, reqRepoCloudBrainWriter, repo.CloudBrainTrainJobNew) m.Post("/create", reqWechatBind, reqRepoCloudBrainWriter, bindIgnErr(auth.CreateCloudBrainForm{}), repo.CloudBrainCreate) }) + m.Group("/inference-job", func() { + m.Group("/:jobid", func() { + m.Get("", reqRepoCloudBrainReader, repo.InferenceCloudBrainJobShow) + m.Get("/result_download", cloudbrain.AdminOrJobCreaterRightForTrain, repo.CloudBrainDownloadInferenceResult) + + m.Get("/downloadall", repo.DownloadInferenceResultFile) + }) + m.Get("/create", reqWechatBind, reqRepoCloudBrainWriter, repo.InferenceCloudBrainJobNew) + m.Post("/create", reqWechatBind, reqRepoCloudBrainWriter, bindIgnErr(auth.CreateCloudBrainInferencForm{}), repo.CloudBrainInferenceJobCreate) + }) }, context.RepoRef()) m.Group("/grampus", func() { m.Group("/train-job", func() { From 30e76cd3b5b9f94330ec41d0a3ac1c1c3e07b095 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Thu, 7 Jul 2022 10:57:54 +0800 Subject: [PATCH 02/75] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/repo/modelarts.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/routers/repo/modelarts.go b/routers/repo/modelarts.go index d1d00d095..a673e75e9 100755 --- a/routers/repo/modelarts.go +++ b/routers/repo/modelarts.go @@ -119,7 +119,8 @@ func MustEnableModelArts(ctx *context.Context) { func NotebookNew(ctx *context.Context) { notebookNewDataPrepare(ctx) - + waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeCloudBrainTwo, "", models.JobTypeDebug) + ctx.Data["WaitCount"] = waitCount ctx.HTML(200, tplModelArtsNotebookNew) } @@ -630,6 +631,8 @@ func TrainJobNew(ctx *context.Context) { ctx.ServerError("get new train-job info failed", err) return } + waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeCloudBrainTwo, "", models.JobTypeTrain) + ctx.Data["WaitCount"] = waitCount ctx.HTML(200, tplModelArtsTrainJobNew) } @@ -782,6 +785,8 @@ func TrainJobNewVersion(ctx *context.Context) { ctx.ServerError("get new train-job info failed", err) return } + waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeCloudBrainTwo, "", models.JobTypeTrain) + ctx.Data["WaitCount"] = waitCount ctx.HTML(200, tplModelArtsTrainJobVersionNew) } @@ -2095,6 +2100,8 @@ func InferenceJobNew(ctx *context.Context) { ctx.ServerError("get new inference-job info failed", err) return } + waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeCloudBrainTwo, "", models.JobTypeInference) + ctx.Data["WaitCount"] = waitCount ctx.HTML(200, tplModelArtsInferenceJobNew) } func inferenceJobNewDataPrepare(ctx *context.Context) error { From 5f8b99586e336f8c4e3ef8b4496609cd0e40f41a Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Thu, 7 Jul 2022 11:54:41 +0800 Subject: [PATCH 03/75] fix isssue --- options/locale/locale_en-US.ini | 3 +- options/locale/locale_zh-CN.ini | 4 +- templates/custom/select_dataset_train.tmpl | 2 +- templates/repo/cloudbrain/inference/new.tmpl | 479 +++++++++++++++++++++++++ templates/repo/cloudbrain/new.tmpl | 5 + templates/repo/cloudbrain/trainjob/new.tmpl | 1 + templates/repo/modelarts/inferencejob/new.tmpl | 110 +++--- templates/repo/modelarts/notebook/new.tmpl | 1 + templates/repo/modelarts/trainjob/new.tmpl | 2 + web_src/js/components/images/selectImages.vue | 1 + web_src/less/openi.less | 14 + 11 files changed, 577 insertions(+), 45 deletions(-) create mode 100644 templates/repo/cloudbrain/inference/new.tmpl diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 39a892cc7..92c4f5728 100755 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -997,7 +997,8 @@ image_delete_fail=Failed to delete image, please try again later. image_overwrite=You had submitted the same name image before, are you sure to overwrite the original image? download=Download score=Score - +wait_count_start = There are currently +wait_count_end = tasks queued images.name = Image Tag images.name_placerholder = Please enter the image name image.label_tooltips = Example Python 3.7, Tensorflow 2.0, cuda 10, pytorch 1.6 diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index b9acb6ec0..e90a09b68 100755 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -997,8 +997,8 @@ image_delete_fail=删除镜像失败,请稍后再试。 image_overwrite=您已经提交过相同名称的镜像,您确定要覆盖原来提交的镜像吗? download=模型下载 score=评分 - - +wait_count_start = 当前有 +wait_count_end = 个任务正在排队 images.name = 镜像Tag images.name_placerholder = 请输入镜像Tag image.label_tooltips = 如Python 3.7, Tensorflow 2.0, cuda 10, pytorch 1.6 diff --git a/templates/custom/select_dataset_train.tmpl b/templates/custom/select_dataset_train.tmpl index a6ad0d873..4dc500052 100755 --- a/templates/custom/select_dataset_train.tmpl +++ b/templates/custom/select_dataset_train.tmpl @@ -1,7 +1,7 @@
- {{if or (.benchmarkMode) (.newInference)}} + {{if .benchmarkMode}}       {{else}}{{.i18n.Tr "dataset.dataset"}}    {{end}} {{else}} diff --git a/templates/repo/cloudbrain/inference/new.tmpl b/templates/repo/cloudbrain/inference/new.tmpl new file mode 100644 index 000000000..6dee1b38e --- /dev/null +++ b/templates/repo/cloudbrain/inference/new.tmpl @@ -0,0 +1,479 @@ +{{template "base/head" .}} + +
+
+
+
+
+
+
+
+
+
+ {{template "repo/header" .}} +
+ {{template "base/alert" .}} +

+ {{.i18n.Tr "repo.modelarts.train_job.new_infer"}} +

+
+ +
+ {{.CsrfTokenHtml}} + + + + {{if $.model_version}} + + {{else}} + + {{end}} + {{if $.label_names}} + + {{else}} + + {{end}} +

{{.i18n.Tr "repo.modelarts.train_job.basic_info"}}:

+
+ + +
+
+ + + {{.i18n.Tr "cloudbrain.job_name_rule"}} +
+ +
+ + +
+
+ + +

{{.i18n.Tr "repo.modelarts.train_job.parameter_setting"}}:

+
+
+ + +
+
+ +
+
+ + +
+ + + +
+ +
+ +
+ +
+ + +
+ + {{template "custom/select_dataset_train" .}} + {{.i18n.Tr "cloudbrain.dataset_path_rule"}} +
+ + {{if .bootFile}} + + {{else}} + + {{end}} + + + + {{.i18n.Tr "cloudbrain.view_sample"}} +
+ + +
+ + {{.i18n.Tr "repo.modelarts.train_job.add_run_parameter"}} + +
+ {{if ne 0 (len .params)}} + {{range $k ,$v := .params}} +
+
+ +
+
+ +
+ + + + +
+ {{end}} + {{end}} +
+
+ + + +
+ + +
+ +
+ + +
+ +
+ {{.i18n.Tr "cloudbrain.inference_output_path_rule"}} +
+ +
+ + + {{.i18n.Tr "repo.cloudbrain.cancel"}} +
+ +
+
+
+
+{{template "base/footer" .}} + + diff --git a/templates/repo/cloudbrain/new.tmpl b/templates/repo/cloudbrain/new.tmpl index 295fe0435..0b6f12759 100755 --- a/templates/repo/cloudbrain/new.tmpl +++ b/templates/repo/cloudbrain/new.tmpl @@ -154,6 +154,10 @@ Ascend NPU
+
+ + {{.i18n.Tr "repo.wait_count_start"}}{{.WaitCount}}{{.i18n.Tr "repo.wait_count_end"}} +
@@ -286,6 +290,7 @@
{{template "base/footer" .}} From 1f8a22aa93749e2f13b33e8d6c3f2d3833e44721 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Fri, 8 Jul 2022 09:43:49 +0800 Subject: [PATCH 09/75] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/repo/modelarts.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/repo/modelarts.go b/routers/repo/modelarts.go index a673e75e9..84b74c8b6 100755 --- a/routers/repo/modelarts.go +++ b/routers/repo/modelarts.go @@ -2057,7 +2057,7 @@ func InferenceJobIndex(ctx *context.Context) { PageSize: setting.UI.IssuePagingNum, }, RepoID: repo.ID, - Type: models.TypeCloudBrainTwo, + Type: models.TypeCloudBrainAll, JobTypes: jobTypes, }) if err != nil { From 7d69ff38d6293e46e3a99c01730657b3a5a94242 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Fri, 8 Jul 2022 09:49:57 +0800 Subject: [PATCH 10/75] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/cloudbrain/cloudbrain.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cloudbrain/cloudbrain.go b/modules/cloudbrain/cloudbrain.go index 1e6e15d92..adb142504 100755 --- a/modules/cloudbrain/cloudbrain.go +++ b/modules/cloudbrain/cloudbrain.go @@ -287,7 +287,7 @@ func GenerateTask(req GenerateCloudBrainTaskReq) error { HostPath: models.StHostPath{ Path: req.ResultPath, MountPath: ResultPath, - ReadOnly: true, + ReadOnly: false, }, }, } From 81bb92a17d197e03c2512c393e12aa626b56e639 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 8 Jul 2022 10:10:23 +0800 Subject: [PATCH 11/75] fix issue --- templates/repo/cloudbrain/trainjob/new.tmpl | 4 ---- templates/repo/modelarts/inferencejob/index.tmpl | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/templates/repo/cloudbrain/trainjob/new.tmpl b/templates/repo/cloudbrain/trainjob/new.tmpl index b9d38ce7e..b915b8e7a 100755 --- a/templates/repo/cloudbrain/trainjob/new.tmpl +++ b/templates/repo/cloudbrain/trainjob/new.tmpl @@ -212,10 +212,6 @@
- - - - 训练脚本存储在/code中,数据集存储在/dataset中,训练输出请存储在/model中以供后续下载。
diff --git a/templates/repo/modelarts/inferencejob/index.tmpl b/templates/repo/modelarts/inferencejob/index.tmpl index 89e409b1c..29e7c518f 100644 --- a/templates/repo/modelarts/inferencejob/index.tmpl +++ b/templates/repo/modelarts/inferencejob/index.tmpl @@ -161,6 +161,7 @@
{{$.CsrfTokenHtml}} {{if .CanModify}} + {{.gpu_type}} {{$.i18n.Tr "repo.model_download"}} From 45f1c71c944e1e8dad7b43b00152c0ec32a5e413 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 8 Jul 2022 10:23:27 +0800 Subject: [PATCH 12/75] fix issue --- templates/repo/modelarts/inferencejob/index.tmpl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/templates/repo/modelarts/inferencejob/index.tmpl b/templates/repo/modelarts/inferencejob/index.tmpl index 29e7c518f..2922166f9 100644 --- a/templates/repo/modelarts/inferencejob/index.tmpl +++ b/templates/repo/modelarts/inferencejob/index.tmpl @@ -161,8 +161,7 @@
{{$.CsrfTokenHtml}} {{if .CanModify}} - {{.gpu_type}} - + {{$.i18n.Tr "repo.model_download"}} {{else}} From 41596df85c6fa42d2b9d365878449710dc324921 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Fri, 8 Jul 2022 10:26:29 +0800 Subject: [PATCH 13/75] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/repo/cloudbrain.go | 4 ++-- routers/repo/modelarts.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index 5ed1e017f..eee78d1a5 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -353,8 +353,8 @@ func CloudBrainInferenceJobCreate(ctx *context.Context, form auth.CreateCloudBra branchName := form.BranchName repo := ctx.Repo.Repository - ckptUrl := form.TrainUrl + form.CkptName - + ckptUrl := setting.Attachment.Minio.RealPath + setting.Attachment.Minio.Bucket + "/" + form.TrainUrl + form.CkptName + log.Info("ckpt url:" + ckptUrl) tpl := tplCloudBrainInferenceJobNew command, err := getInferenceJobCommand(form) if err != nil { diff --git a/routers/repo/modelarts.go b/routers/repo/modelarts.go index 84b74c8b6..1354bcae1 100755 --- a/routers/repo/modelarts.go +++ b/routers/repo/modelarts.go @@ -1881,8 +1881,8 @@ func InferenceJobCreate(ctx *context.Context, form auth.CreateModelArtsInference modelName := form.ModelName modelVersion := form.ModelVersion ckptName := form.CkptName - - ckptUrl := form.TrainUrl + form.CkptName + ckptUrl := "/" + setting.Bucket + "/" + form.TrainUrl + form.CkptName + log.Info("ckpt url:" + ckptUrl) count, err := models.GetCloudbrainInferenceJobCountByUserID(ctx.User.ID) if err != nil { From 0df4c11453f80f0b6c74103aa0dc8c0c82db18a6 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Fri, 8 Jul 2022 12:36:07 +0800 Subject: [PATCH 14/75] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/cloudbrain/cloudbrain.go | 41 +++++++++++++++ options/locale/locale_en-US.ini | 5 +- options/locale/locale_zh-CN.ini | 5 +- routers/api/v1/api.go | 7 +++ routers/api/v1/repo/cloudbrain.go | 108 ++++++++++++++++++++++++++++++++++++++ routers/repo/cloudbrain.go | 12 +++++ 6 files changed, 176 insertions(+), 2 deletions(-) diff --git a/modules/cloudbrain/cloudbrain.go b/modules/cloudbrain/cloudbrain.go index adb142504..08e39452c 100755 --- a/modules/cloudbrain/cloudbrain.go +++ b/modules/cloudbrain/cloudbrain.go @@ -3,6 +3,7 @@ package cloudbrain import ( "encoding/json" "errors" + "os" "strconv" "code.gitea.io/gitea/modules/timeutil" @@ -567,3 +568,43 @@ func RestartTask(ctx *context.Context, task *models.Cloudbrain, newID *string) e return nil } + +func DelCloudBrainJob(jobId string) string { + task, err := models.GetCloudbrainByJobID(jobId) + if err != nil { + log.Error("get cloud brain err:", err) + return "cloudbrain.Delete_failed" + + } + if task.Status != string(models.JobStopped) && task.Status != string(models.JobFailed) && task.Status != string(models.JobSucceeded) { + log.Error("the job(%s) has not been stopped", task.JobName) + return "cloudbrain.Not_Stopped" + } + + err = models.DeleteJob(task) + if err != nil { + log.Error("DeleteJob failed:", err) + return "cloudbrain.Delete_failed" + } + + deleteJobStorage(task.JobName) + + return "" +} + +func deleteJobStorage(jobName string) error { + //delete local + localJobPath := setting.JobPath + jobName + err := os.RemoveAll(localJobPath) + if err != nil { + log.Error("RemoveAll(%s) failed:%v", localJobPath, err) + } + + dirPath := setting.CBCodePathPrefix + jobName + "/" + err = storage.Attachments.DeleteDir(dirPath) + if err != nil { + log.Error("DeleteDir(%s) failed:%v", localJobPath, err) + } + + return nil +} diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index 92c4f5728..fca348cd1 100755 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -3081,4 +3081,7 @@ INFERENCE = INFERENCE BENCHMARK = BENCHMARK brain_area = Brain Area -error.dataset_select = dataset select error:the count exceed the limit or has same name \ No newline at end of file +Delete_failed=Fail to delete, please try again later. +Not_Stopped=The job is not stopped, can not be deleted. + +error.dataset_select = dataset select error:the count exceed the limit or has same name diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index e90a09b68..475f3a772 100755 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -3095,4 +3095,7 @@ INFERENCE = 推理任务 BENCHMARK = 评测任务 brain_area = 脑区 -error.dataset_select = 数据集选择错误:数量超过限制或者有同名数据集 \ No newline at end of file +Delete_failed=删除失败,请稍后再试。 +Not_Stopped=任务还未终止,不能删除。 + +error.dataset_select = 数据集选择错误:数量超过限制或者有同名数据集 diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go index e6c572e73..73b9af52e 100755 --- a/routers/api/v1/api.go +++ b/routers/api/v1/api.go @@ -921,6 +921,13 @@ func RegisterRoutes(m *macaron.Macaron) { m.Post("/stop_version", cloudbrain.AdminOrOwnerOrJobCreaterRightForTrain, repo_ext.CloudBrainStop) }) }) + m.Group("/inference-job", func() { + m.Group("/:jobid", func() { + m.Get("", repo.GetCloudBrainInferenceJob) + m.Post("/del", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.DelCloudBrainJob) + m.Get("/result_list", repo.InferencJobResultList) + }) + }) }, reqRepoReader(models.UnitTypeCloudBrain)) m.Group("/modelarts", func() { m.Group("/notebook", func() { diff --git a/routers/api/v1/repo/cloudbrain.go b/routers/api/v1/repo/cloudbrain.go index a81263823..4a219a061 100755 --- a/routers/api/v1/repo/cloudbrain.go +++ b/routers/api/v1/repo/cloudbrain.go @@ -100,6 +100,114 @@ func GetCloudbrainTask(ctx *context.APIContext) { } +func GetCloudBrainInferenceJob(ctx *context.APIContext) { + + jobID := ctx.Params(":jobid") + job, err := models.GetCloudbrainByJobID(jobID) + if err != nil { + ctx.NotFound(err) + return + } + jobResult, err := cloudbrain.GetJob(job.JobID) + if err != nil { + ctx.NotFound(err) + log.Error("GetJob failed:", err) + return + } + result, err := models.ConvertToJobResultPayload(jobResult.Payload) + if err != nil { + ctx.NotFound(err) + log.Error("ConvertToJobResultPayload failed:", err) + return + } + + job.Status = result.JobStatus.State + if result.JobStatus.State != string(models.JobWaiting) && result.JobStatus.State != string(models.JobFailed) { + taskRoles := result.TaskRoles + taskRes, _ := models.ConvertToTaskPod(taskRoles[cloudbrain.SubTaskName].(map[string]interface{})) + + job.ContainerIp = taskRes.TaskStatuses[0].ContainerIP + job.ContainerID = taskRes.TaskStatuses[0].ContainerID + job.Status = taskRes.TaskStatuses[0].State + } + + if result.JobStatus.State != string(models.JobWaiting) { + models.ParseAndSetDurationFromCloudBrainOne(result, job) + err = models.UpdateJob(job) + if err != nil { + log.Error("UpdateJob failed:", err) + } + } + + ctx.JSON(http.StatusOK, map[string]interface{}{ + "JobID": jobID, + "JobStatus": job.Status, + "JobDuration": job.TrainJobDuration, + }) + +} + +func DelCloudBrainJob(ctx *context.APIContext) { + jobID := ctx.Params(":jobid") + + errStr := cloudbrain.DelCloudBrainJob(jobID) + + if errStr != "" { + ctx.JSON(http.StatusOK, models.BaseErrorMessage(ctx.Tr(errStr))) + } else { + ctx.JSON(http.StatusOK, models.BaseOKMessage) + } + +} + +func InferencJobResultList(ctx *context.APIContext) { + jobID := ctx.Params(":jobid") + parentDir := ctx.Query("parentDir") + dirArray := strings.Split(parentDir, "/") + + task, err := models.GetCloudbrainByJobID(jobID) + if err != nil { + log.Error("get cloud brain err:", err) + ctx.ServerError("get cloud brain information failed:", err) + + } + + //get dirs + dirs, err := routerRepo.GetResultDirs(task.JobName, parentDir) + if err != nil { + log.Error("GetModelDirs failed:%v", err.Error(), ctx.Data["msgID"]) + ctx.ServerError("GetModelDirs failed:", err) + return + } + + var fileInfos []storage.FileInfo + err = json.Unmarshal([]byte(dirs), &fileInfos) + if err != nil { + log.Error("json.Unmarshal failed:%v", err.Error(), ctx.Data["msgID"]) + ctx.ServerError("json.Unmarshal failed:", err) + return + } + + for i, fileInfo := range fileInfos { + temp, _ := time.Parse("2006-01-02 15:04:05", fileInfo.ModTime) + fileInfos[i].ModTime = temp.Local().Format("2006-01-02 15:04:05") + } + + sort.Slice(fileInfos, func(i, j int) bool { + return fileInfos[i].ModTime > fileInfos[j].ModTime + }) + + ctx.JSON(http.StatusOK, map[string]interface{}{ + "JobID": jobID, + "StatusOK": 0, + "Path": dirArray, + "Dirs": fileInfos, + "task": task, + "PageIsCloudBrain": true, + }) + +} + func CloudbrainGetLog(ctx *context.Context) { ID := ctx.Params(":id") job, err := models.GetCloudbrainByID(ID) diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index eee78d1a5..d7796c0ba 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -1292,6 +1292,18 @@ func GetModelDirs(jobName string, parentDir string) (string, error) { return getDirs(req) } +func GetResultDirs(jobName string, parentDir string) (string, error) { + var req string + modelActualPath := storage.GetMinioPath(jobName, cloudbrain.ResultPath+"/") + if parentDir == "" { + req = "baseDir=" + modelActualPath + } else { + req = "baseDir=" + modelActualPath + "&parentDir=" + parentDir + } + + return getDirs(req) +} + func CloudBrainDownloadModel(ctx *context.Context) { parentDir := ctx.Query("parentDir") fileName := ctx.Query("fileName") From b18560989f8cbc3f14837e5afa44cb6c937ac1d1 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 8 Jul 2022 14:37:45 +0800 Subject: [PATCH 15/75] fix issue --- templates/repo/modelarts/inferencejob/index.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repo/modelarts/inferencejob/index.tmpl b/templates/repo/modelarts/inferencejob/index.tmpl index 2922166f9..28c16640d 100644 --- a/templates/repo/modelarts/inferencejob/index.tmpl +++ b/templates/repo/modelarts/inferencejob/index.tmpl @@ -117,7 +117,7 @@
- + {{.Status}}
From dc1acbfffb9ac4ff6ca1bd2d923ac5dd8334651a Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 8 Jul 2022 14:53:44 +0800 Subject: [PATCH 16/75] fix issue --- templates/repo/modelarts/inferencejob/index.tmpl | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/templates/repo/modelarts/inferencejob/index.tmpl b/templates/repo/modelarts/inferencejob/index.tmpl index 28c16640d..0b4c1f81a 100644 --- a/templates/repo/modelarts/inferencejob/index.tmpl +++ b/templates/repo/modelarts/inferencejob/index.tmpl @@ -144,6 +144,23 @@
+ {{if eq .Cloudbrain.Type 0 }} +
+ {{$.CsrfTokenHtml}} + {{if .CanDel}} + + {{$.i18n.Tr "repo.stop"}} + + {{else}} + + {{$.i18n.Tr "repo.stop"}} + + {{end}} +
+ {{else}
{{$.CsrfTokenHtml}} {{if .CanDel}} @@ -157,6 +174,7 @@ {{end}}
+ {{end}}
{{$.CsrfTokenHtml}} From d57936b5c153b13652e7d12853015010c40d73c0 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 8 Jul 2022 14:55:31 +0800 Subject: [PATCH 17/75] fix issue --- templates/repo/modelarts/inferencejob/index.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repo/modelarts/inferencejob/index.tmpl b/templates/repo/modelarts/inferencejob/index.tmpl index 0b4c1f81a..a47e0cf88 100644 --- a/templates/repo/modelarts/inferencejob/index.tmpl +++ b/templates/repo/modelarts/inferencejob/index.tmpl @@ -160,7 +160,7 @@ {{end}} - {{else} + {{else}}
{{$.CsrfTokenHtml}} {{if .CanDel}} From 063dad0c4921b29d4ad593f6c7cfbe08852c7dec Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 8 Jul 2022 14:58:41 +0800 Subject: [PATCH 18/75] fix issue --- templates/repo/modelarts/inferencejob/index.tmpl | 32 +++++++++++++----------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/templates/repo/modelarts/inferencejob/index.tmpl b/templates/repo/modelarts/inferencejob/index.tmpl index a47e0cf88..3a26b4532 100644 --- a/templates/repo/modelarts/inferencejob/index.tmpl +++ b/templates/repo/modelarts/inferencejob/index.tmpl @@ -145,21 +145,23 @@
{{if eq .Cloudbrain.Type 0 }} -
- {{$.CsrfTokenHtml}} - {{if .CanDel}} - - {{$.i18n.Tr "repo.stop"}} - - {{else}} - - {{$.i18n.Tr "repo.stop"}} - - {{end}} -
+
+
+ {{$.CsrfTokenHtml}} + {{if .CanDel}} + + {{$.i18n.Tr "repo.stop"}} + + {{else}} + + {{$.i18n.Tr "repo.stop"}} + + {{end}} +
+
{{else}}
{{$.CsrfTokenHtml}} From 20a2ea6f4f00b1173e9cfb580ab1be86d435c61b Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 8 Jul 2022 16:23:35 +0800 Subject: [PATCH 19/75] fix issue --- templates/repo/modelarts/inferencejob/index.tmpl | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/templates/repo/modelarts/inferencejob/index.tmpl b/templates/repo/modelarts/inferencejob/index.tmpl index 3a26b4532..6d230b993 100644 --- a/templates/repo/modelarts/inferencejob/index.tmpl +++ b/templates/repo/modelarts/inferencejob/index.tmpl @@ -194,9 +194,16 @@
{{$.CsrfTokenHtml}} {{if .CanDel}} + {{if eq .Cloudbrain.Type 0 }} + + {{$.i18n.Tr "repo.delete"}} + + {{else}} {{$.i18n.Tr "repo.delete"}} + {{end}} + {{else}} {{$.i18n.Tr "repo.delete"}} From 2581b7f1d53b288b0b9c9aea4334a01139d25f07 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 8 Jul 2022 16:30:56 +0800 Subject: [PATCH 20/75] fix issue --- web_src/js/features/cloudrbanin.js | 777 ++++++++++++++++++++++--------------- 1 file changed, 469 insertions(+), 308 deletions(-) diff --git a/web_src/js/features/cloudrbanin.js b/web_src/js/features/cloudrbanin.js index e1660e021..4ab6663d5 100644 --- a/web_src/js/features/cloudrbanin.js +++ b/web_src/js/features/cloudrbanin.js @@ -1,330 +1,491 @@ export default async function initCloudrain() { - let debug_button = $('.cloudbrain_debug').data('debug') - let debug_again_button = $('.cloudbrain_debug').data('debug-again') - let timeid = window.setInterval(loadJobStatus, 15000); - let timeidShow = window.setInterval(loadShowJobStatus, 15000); - $(document).ready(loadJobStatus); - $(document).ready(loadShowJobStatus); - function loadJobStatus() { - $(".job-status").each((index, job) => { - const ID = job.dataset.jobid; - const repoPath = job.dataset.repopath; - // const computeResource = job.dataset.resource - const versionname = job.dataset.version - const status_text = $(`#${ID}-text`).text() - const finalState = ['STOPPED', 'CREATE_FAILED', 'UNAVAILABLE', 'DELETED', 'RESIZE_FAILED', 'SUCCEEDED', 'IMAGE_FAILED', 'SUBMIT_FAILED', 'DELETE_FAILED', 'KILLED', 'COMPLETED', 'FAILED', 'CANCELED', 'LOST', 'START_FAILED', 'SUBMIT_MODEL_FAILED', 'DEPLOY_SERVICE_FAILED', 'CHECK_FAILED'] - if (finalState.includes(status_text)) { - return - } - // const diffResource = computeResource == "NPU" ? 'modelarts/notebook' : 'cloudbrain' - $.get(`/api/v1/repos/${repoPath}/${ID}?version_name=${versionname}`, (data) => { - const ID = data.ID || data.JobID - const status = data.JobStatus - const duration = data.JobDuration - $('#duration-' + ID).text(duration) - if (status != status_text) { - $('#' + ID + '-icon').removeClass().addClass(status) - $('#' + ID + '-text').text(status) - finalState.includes(status) && $('#' + ID + '-stop').removeClass('blue').addClass('disabled') - } - if (status === "RUNNING") { - $('#ai-debug-' + ID).removeClass('disabled').addClass('blue').text(debug_button).css("margin", "0 1rem") - $('#model-image-' + ID).removeClass('disabled').addClass('blue') - } - if (status !== "RUNNING") { - // $('#model-debug-'+ID).removeClass('blue') - // $('#model-debug-'+ID).addClass('disabled') - $('#model-image-' + ID).removeClass('blue').addClass('disabled') - } - if (["CREATING", "STOPPING", "WAITING", "STARTING"].includes(status)) { - $('#ai-debug-' + ID).removeClass('blue').addClass('disabled') - } - if (['STOPPED', 'FAILED', 'START_FAILED', 'CREATE_FAILED', 'SUCCEEDED'].includes(status)) { - $('#ai-debug-' + ID).removeClass('disabled').addClass('blue').text(debug_again_button).css("margin", "0") - } - if (["RUNNING", "WAITING"].includes(status)) { - $('#ai-stop-' + ID).removeClass('disabled').addClass('blue') - } - if (["CREATING", "STOPPING", "STARTING", "STOPPED", "FAILED", "START_FAILED", "SUCCEEDED", "COMPLETED", "CREATE_FAILED"].includes(status)) { - $('#ai-stop-' + ID).removeClass('blue').addClass('disabled') - } - - if (["STOPPED", "FAILED", "START_FAILED", "KILLED", "COMPLETED", "SUCCEEDED"].includes(status)) { - $('#ai-delete-' + ID).removeClass('disabled').addClass('blue') - } else { - $('#ai-delete-' + ID).removeClass('blue').addClass('disabled') - } - }).fail(function (err) { - console.log(err); - }); - }); - }; - - function loadShowJobStatus() { - $(".ui.accordion.border-according").each((index, job) => { - const jobID = job.dataset.jobid; - const repoPath = job.dataset.repopath; - const versionname = job.dataset.version - // ['IMAGE_FAILED','SUBMIT_FAILED','DELETE_FAILED','KILLED','COMPLETED','FAILED','CANCELED','LOST','START_FAILED'] - // if (job.textContent.trim() == 'IMAGE_FAILED' || job.textContent.trim() == 'SUBMIT_FAILED' || job.textContent.trim() == 'DELETE_FAILED' - // || job.textContent.trim() == 'KILLED' || job.textContent.trim() == 'COMPLETED' || job.textContent.trim() == 'FAILED' - // || job.textContent.trim() == 'CANCELED' || job.textContent.trim() == 'LOST') { - // return - // } - let status = $(`#${versionname}-status-span`).text() + let debug_button = $(".cloudbrain_debug").data("debug"); + let debug_again_button = $(".cloudbrain_debug").data("debug-again"); + let timeid = window.setInterval(loadJobStatus, 15000); + let timeidShow = window.setInterval(loadShowJobStatus, 15000); + $(document).ready(loadJobStatus); + $(document).ready(loadShowJobStatus); + function loadJobStatus() { + $(".job-status").each((index, job) => { + const ID = job.dataset.jobid; + const repoPath = job.dataset.repopath; + // const computeResource = job.dataset.resource + const versionname = job.dataset.version; + const status_text = $(`#${ID}-text`).text(); + const finalState = [ + "STOPPED", + "CREATE_FAILED", + "UNAVAILABLE", + "DELETED", + "RESIZE_FAILED", + "SUCCEEDED", + "IMAGE_FAILED", + "SUBMIT_FAILED", + "DELETE_FAILED", + "KILLED", + "COMPLETED", + "FAILED", + "CANCELED", + "LOST", + "START_FAILED", + "SUBMIT_MODEL_FAILED", + "DEPLOY_SERVICE_FAILED", + "CHECK_FAILED", + ]; + if (finalState.includes(status_text)) { + return; + } + // const diffResource = computeResource == "NPU" ? 'modelarts/notebook' : 'cloudbrain' + $.get( + `/api/v1/repos/${repoPath}/${ID}?version_name=${versionname}`, + (data) => { + const ID = data.ID || data.JobID; + const status = data.JobStatus; + const duration = data.JobDuration; + $("#duration-" + ID).text(duration); + if (status != status_text) { + $("#" + ID + "-icon") + .removeClass() + .addClass(status); + $("#" + ID + "-text").text(status); + finalState.includes(status) && + $("#" + ID + "-stop") + .removeClass("blue") + .addClass("disabled"); + } + if (status === "RUNNING") { + $("#ai-debug-" + ID) + .removeClass("disabled") + .addClass("blue") + .text(debug_button) + .css("margin", "0 1rem"); + $("#model-image-" + ID) + .removeClass("disabled") + .addClass("blue"); + } + if (status !== "RUNNING") { + // $('#model-debug-'+ID).removeClass('blue') + // $('#model-debug-'+ID).addClass('disabled') + $("#model-image-" + ID) + .removeClass("blue") + .addClass("disabled"); + } + if ( + ["CREATING", "STOPPING", "WAITING", "STARTING"].includes(status) + ) { + $("#ai-debug-" + ID) + .removeClass("blue") + .addClass("disabled"); + } + if ( + [ + "STOPPED", + "FAILED", + "START_FAILED", + "CREATE_FAILED", + "SUCCEEDED", + ].includes(status) + ) { + $("#ai-debug-" + ID) + .removeClass("disabled") + .addClass("blue") + .text(debug_again_button) + .css("margin", "0"); + } + if (["RUNNING", "WAITING"].includes(status)) { + $("#ai-stop-" + ID) + .removeClass("disabled") + .addClass("blue"); + } + if ( + [ + "CREATING", + "STOPPING", + "STARTING", + "STOPPED", + "FAILED", + "START_FAILED", + "SUCCEEDED", + "COMPLETED", + "CREATE_FAILED", + ].includes(status) + ) { + $("#ai-stop-" + ID) + .removeClass("blue") + .addClass("disabled"); + } - if (['IMAGE_FAILED', 'SUBMIT_FAILED', 'DELETE_FAILED', 'KILLED', 'COMPLETED', 'FAILED', 'CANCELED', 'LOST', 'START_FAILED', 'SUCCEEDED', 'STOPPED'].includes(status)) { - return - } - let stopArray = ["KILLED", "FAILED", "START_FAILED", "KILLING", "COMPLETED", "SUCCEEDED", "STOPPED"] - $.get(`/api/v1/repos/${repoPath}/${jobID}?version_name=${versionname}`, (data) => { - //$(`#${versionname}-duration-span`).text(data.JobDuration) - $(`#${versionname}-status-span span`).text(data.JobStatus) - $(`#${versionname}-status-span i`).attr("class", data.JobStatus) - // detail status and duration - //$('#'+versionname+'-duration').text(data.JobDuration) - $('#' + versionname + '-status').text(data.JobStatus) - if (stopArray.includes(data.JobStatus)) { - $('#' + versionname + '-stop').addClass('disabled') - } - if (data.JobStatus === "COMPLETED") { - $('#' + versionname + '-create-model').removeClass('disabled').addClass('blue') - } - }).fail(function (err) { - console.log(err); - }); - }); - }; + if ( + [ + "STOPPED", + "FAILED", + "START_FAILED", + "KILLED", + "COMPLETED", + "SUCCEEDED", + ].includes(status) + ) { + $("#ai-delete-" + ID) + .removeClass("disabled") + .addClass("blue"); + } else { + $("#ai-delete-" + ID) + .removeClass("blue") + .addClass("disabled"); + } + } + ).fail(function (err) { + console.log(err); + }); + }); + } + function loadShowJobStatus() { + $(".ui.accordion.border-according").each((index, job) => { + const jobID = job.dataset.jobid; + const repoPath = job.dataset.repopath; + const versionname = job.dataset.version; + // ['IMAGE_FAILED','SUBMIT_FAILED','DELETE_FAILED','KILLED','COMPLETED','FAILED','CANCELED','LOST','START_FAILED'] + // if (job.textContent.trim() == 'IMAGE_FAILED' || job.textContent.trim() == 'SUBMIT_FAILED' || job.textContent.trim() == 'DELETE_FAILED' + // || job.textContent.trim() == 'KILLED' || job.textContent.trim() == 'COMPLETED' || job.textContent.trim() == 'FAILED' + // || job.textContent.trim() == 'CANCELED' || job.textContent.trim() == 'LOST') { + // return + // } + let status = $(`#${versionname}-status-span`).text(); - function assertDelete(obj, versionName, repoPath) { - if (obj.style.color == "rgb(204, 204, 204)") { - return - } else { - const delId = obj.parentNode.id - let flag = 1; - $('.ui.basic.modal') - .modal({ - onDeny: function () { - flag = false - }, - onApprove: function () { - if (!versionName) { - document.getElementById(delId).submit() - } - else { - deleteVersion(versionName, repoPath) - } - flag = true - }, - onHidden: function () { - if (flag == false) { - $('.alert').html('您已取消操作').removeClass('alert-success').addClass('alert-danger').show().delay(1500).fadeOut(); - } - } - }) - .modal('show') - } - } - function deleteVersion(versionName, repoPath) { - const url = `/api/v1/repos/${repoPath}` - $.post(url, { version_name: versionName }, (data) => { - if (data.StatusOK === 0) { - location.reload() - } - }).fail(function (err) { - console.log(err); - }); - } - $('.ui.basic.ai_delete').click(function () { - const repoPath = this.dataset.repopath - const versionName = this.dataset.version - if (repoPath && versionName) { - assertDelete(this, versionName, repoPath) - } - else { - assertDelete(this) + if ( + [ + "IMAGE_FAILED", + "SUBMIT_FAILED", + "DELETE_FAILED", + "KILLED", + "COMPLETED", + "FAILED", + "CANCELED", + "LOST", + "START_FAILED", + "SUCCEEDED", + "STOPPED", + ].includes(status) + ) { + return; + } + let stopArray = [ + "KILLED", + "FAILED", + "START_FAILED", + "KILLING", + "COMPLETED", + "SUCCEEDED", + "STOPPED", + ]; + $.get( + `/api/v1/repos/${repoPath}/${jobID}?version_name=${versionname}`, + (data) => { + //$(`#${versionname}-duration-span`).text(data.JobDuration) + $(`#${versionname}-status-span span`).text(data.JobStatus); + $(`#${versionname}-status-span i`).attr("class", data.JobStatus); + // detail status and duration + //$('#'+versionname+'-duration').text(data.JobDuration) + $("#" + versionname + "-status").text(data.JobStatus); + if (stopArray.includes(data.JobStatus)) { + $("#" + versionname + "-stop").addClass("disabled"); + } + if (data.JobStatus === "COMPLETED") { + $("#" + versionname + "-create-model") + .removeClass("disabled") + .addClass("blue"); + } } - }) - function stopDebug(ID, stopUrl) { - $.ajax({ - type: "POST", - url: stopUrl, - data: $('#stopForm-' + ID).serialize(), - success: function (res) { - if (res.result_code === "0") { - $('#' + ID + '-icon').removeClass().addClass(res.status) - $('#' + ID + '-text').text(res.status) - if (res.status === "STOPPED") { - $('#ai-debug-' + ID).removeClass('disabled').addClass('blue').text(debug_again_button).css("margin", "0") - $('#ai-image-' + ID).removeClass('blue').addClass('disabled') - $('#ai-model-debug-' + ID).removeClass('blue').addClass('disabled') - $('#ai-delete-' + ID).removeClass('disabled').addClass('blue') - $('#ai-stop-' + ID).removeClass('blue').addClass('disabled') - } - else { - $('#ai-debug-' + ID).removeClass('blue').addClass('disabled') - $('#ai-stop-' + ID).removeClass('blue').addClass('disabled') - } - - } else { - $('.alert').html(res.error_msg).removeClass('alert-success').addClass('alert-danger').show().delay(2000).fadeOut(); - } - }, - error: function (res) { - console.log(res) + ).fail(function (err) { + console.log(err); + }); + }); + } + function assertDelete(obj, versionName, repoPath) { + if (obj.style.color == "rgb(204, 204, 204)") { + return; + } else { + const delId = obj.parentNode.id; + let flag = 1; + $(".ui.basic.modal") + .modal({ + onDeny: function () { + flag = false; + }, + onApprove: function () { + if (!versionName) { + document.getElementById(delId).submit(); + } else { + deleteVersion(versionName, repoPath); + } + flag = true; + }, + onHidden: function () { + if (flag == false) { + $(".alert") + .html("您已取消操作") + .removeClass("alert-success") + .addClass("alert-danger") + .show() + .delay(1500) + .fadeOut(); } + }, }) + .modal("show"); } - $('.ui.basic.ai_stop').click(function () { - const ID = this.dataset.jobid - const repoPath = this.dataset.repopath - stopDebug(ID, repoPath) - }) - - function stopVersion(version_name, ID, repoPath) { - const url = `/api/v1/repos/${repoPath}/${ID}/stop_version` - $.post(url, { version_name: version_name }, (data) => { - if (data.StatusOK === 0) { - $('#ai-stop-' + ID).removeClass('blue') - $('#ai-stop-' + ID).addClass('disabled') - refreshStatus(version_name, ID, repoPath) - } - }).fail(function (err) { - console.log(err); - }); + } + function deleteVersion(versionName, repoPath) { + const url = `/api/v1/repos/${repoPath}`; + $.post(url, { version_name: versionName }, (data) => { + if (data.StatusOK === 0 || data.Code === 0) { + location.reload(); + } + }).fail(function (err) { + console.log(err); + }); + } + $(".ui.basic.ai_delete").click(function () { + const repoPath = this.dataset.repopath; + const versionName = this.dataset.version; + if (repoPath && versionName) { + assertDelete(this, versionName, repoPath); + } else { + assertDelete(this); } - function refreshStatus(version_name, ID, repoPath) { + }); + function stopDebug(ID, stopUrl) { + $.ajax({ + type: "POST", + url: stopUrl, + data: $("#stopForm-" + ID).serialize(), + success: function (res) { + if (res.result_code === "0") { + $("#" + ID + "-icon") + .removeClass() + .addClass(res.status); + $("#" + ID + "-text").text(res.status); + if (res.status === "STOPPED") { + $("#ai-debug-" + ID) + .removeClass("disabled") + .addClass("blue") + .text(debug_again_button) + .css("margin", "0"); + $("#ai-image-" + ID) + .removeClass("blue") + .addClass("disabled"); + $("#ai-model-debug-" + ID) + .removeClass("blue") + .addClass("disabled"); + $("#ai-delete-" + ID) + .removeClass("disabled") + .addClass("blue"); + $("#ai-stop-" + ID) + .removeClass("blue") + .addClass("disabled"); + } else { + $("#ai-debug-" + ID) + .removeClass("blue") + .addClass("disabled"); + $("#ai-stop-" + ID) + .removeClass("blue") + .addClass("disabled"); + } + } else { + $(".alert") + .html(res.error_msg) + .removeClass("alert-success") + .addClass("alert-danger") + .show() + .delay(2000) + .fadeOut(); + } + }, + error: function (res) { + console.log(res); + }, + }); + } + $(".ui.basic.ai_stop").click(function () { + const ID = this.dataset.jobid; + const repoPath = this.dataset.repopath; + stopDebug(ID, repoPath); + }); - const url = `/api/v1/repos/${repoPath}/${ID}/?version_name${version_name}` - $.get(url, (data) => { - $(`#${ID}-icon`).attr("class", data.JobStatus) - // detail status and duration - $(`#${ID}-text`).text(data.JobStatus) - if (["STOPPED", "FAILED", "START_FAILED", "KILLED", "COMPLETED", "SUCCEEDED"].includes(data.JobStatus)) { - $('#ai-delete-' + ID).removeClass('disabled').addClass('blue') - } - }).fail(function (err) { - console.log(err); - }); - } - $('.ui.basic.ai_stop_version').click(function () { - const ID = this.dataset.jobid - const repoPath = this.dataset.repopath - const versionName = this.dataset.version - stopVersion(versionName, ID, repoPath) - }) - function getModelInfo(repoPath, modelName, versionName, jobName) { - $.get(`${repoPath}/modelmanage/show_model_info_api?name=${modelName}`, (data) => { - if (data.length === 0) { - $(`#${jobName}`).popup('toggle') - } else { - let versionData = data.filter((item) => { - return item.Version === versionName - }) - if (versionData.length == 0) { - $(`#${jobName}`).popup('toggle') - } - else { - location.href = `${repoPath}/modelmanage/show_model_info?name=${modelName}` - } - } - }) - } - $('.goto_modelmanage').click(function () { - const repoPath = this.dataset.repopath - const modelName = this.dataset.modelname - const versionName = this.dataset.version - const jobName = this.dataset.jobname - getModelInfo(repoPath, modelName, versionName, jobName) - }) - function debugAgain(ID, debugUrl, redirect_to) { - if ($('#' + ID + '-text').text() === "RUNNING") { - window.open(debugUrl + 'debug') + function stopVersion(version_name, ID, repoPath) { + const url = `/api/v1/repos/${repoPath}/${ID}/stop_version`; + $.post(url, { version_name: version_name }, (data) => { + if (data.StatusOK === 0) { + $("#ai-stop-" + ID).removeClass("blue"); + $("#ai-stop-" + ID).addClass("disabled"); + refreshStatus(version_name, ID, repoPath); + } + }).fail(function (err) { + console.log(err); + }); + } + function refreshStatus(version_name, ID, repoPath) { + const url = `/api/v1/repos/${repoPath}/${ID}/?version_name${version_name}`; + $.get(url, (data) => { + $(`#${ID}-icon`).attr("class", data.JobStatus); + // detail status and duration + $(`#${ID}-text`).text(data.JobStatus); + if ( + [ + "STOPPED", + "FAILED", + "START_FAILED", + "KILLED", + "COMPLETED", + "SUCCEEDED", + ].includes(data.JobStatus) + ) { + $("#ai-delete-" + ID) + .removeClass("disabled") + .addClass("blue"); + } + }).fail(function (err) { + console.log(err); + }); + } + $(".ui.basic.ai_stop_version").click(function () { + const ID = this.dataset.jobid; + const repoPath = this.dataset.repopath; + const versionName = this.dataset.version; + stopVersion(versionName, ID, repoPath); + }); + function getModelInfo(repoPath, modelName, versionName, jobName) { + $.get( + `${repoPath}/modelmanage/show_model_info_api?name=${modelName}`, + (data) => { + if (data.length === 0) { + $(`#${jobName}`).popup("toggle"); } else { - $.ajax({ - type: "POST", - url: debugUrl + 'restart?redirect_to=' + redirect_to, - data: $('#debugAgainForm-' + ID).serialize(), - success: function (res) { - if (res['WechatRedirectUrl']) { - window.location.href = res['WechatRedirectUrl'] - } - else if (res.result_code === "0") { - if (res.id !== ID) { - location.reload() - } else { - $('#' + ID + '-icon').removeClass().addClass(res.status) - $('#' + ID + '-text').text(res.status) - $('#ai-debug-' + ID).removeClass('blue').addClass('disabled') - $('#ai-delete-' + ID).removeClass('blue').addClass('disabled') - $('#ai-debug-' + ID).text(debug_button).css("margin", "0 1rem") - } - } else { - $('.alert').html(res.error_msg).removeClass('alert-success').addClass('alert-danger').show().delay(2000).fadeOut(); - } - }, - error: function (res) { - console.log(res) - } - }) + let versionData = data.filter((item) => { + return item.Version === versionName; + }); + if (versionData.length == 0) { + $(`#${jobName}`).popup("toggle"); + } else { + location.href = `${repoPath}/modelmanage/show_model_info?name=${modelName}`; + } } + } + ); + } + $(".goto_modelmanage").click(function () { + const repoPath = this.dataset.repopath; + const modelName = this.dataset.modelname; + const versionName = this.dataset.version; + const jobName = this.dataset.jobname; + getModelInfo(repoPath, modelName, versionName, jobName); + }); + function debugAgain(ID, debugUrl, redirect_to) { + if ($("#" + ID + "-text").text() === "RUNNING") { + window.open(debugUrl + "debug"); + } else { + $.ajax({ + type: "POST", + url: debugUrl + "restart?redirect_to=" + redirect_to, + data: $("#debugAgainForm-" + ID).serialize(), + success: function (res) { + if (res["WechatRedirectUrl"]) { + window.location.href = res["WechatRedirectUrl"]; + } else if (res.result_code === "0") { + if (res.id !== ID) { + location.reload(); + } else { + $("#" + ID + "-icon") + .removeClass() + .addClass(res.status); + $("#" + ID + "-text").text(res.status); + $("#ai-debug-" + ID) + .removeClass("blue") + .addClass("disabled"); + $("#ai-delete-" + ID) + .removeClass("blue") + .addClass("disabled"); + $("#ai-debug-" + ID) + .text(debug_button) + .css("margin", "0 1rem"); + } + } else { + $(".alert") + .html(res.error_msg) + .removeClass("alert-success") + .addClass("alert-danger") + .show() + .delay(2000) + .fadeOut(); + } + }, + error: function (res) { + console.log(res); + }, + }); } - $('.ui.basic.ai_debug').click(function () { - const ID = this.dataset.jobid - const repoPath = this.dataset.repopath - const redirect_to = this.dataset.linkpath - debugAgain(ID, repoPath, redirect_to) - }) + } + $(".ui.basic.ai_debug").click(function () { + const ID = this.dataset.jobid; + const repoPath = this.dataset.repopath; + const redirect_to = this.dataset.linkpath; + debugAgain(ID, repoPath, redirect_to); + }); } function userSearchControll() { - if ($('#userCloud').length === 0) { - return - } - const params = new URLSearchParams(window.location.search) - let jobType - if ($('.cloudbrain_debug').length === 1) { - if (!params.get('jobType')) { - jobType = $('.cloudbrain_debug').data('allTask') - } else { - if (params.get('jobType') === 'DEBUG') { - jobType = $('.cloudbrain_debug').data('debug-task') - } else if (params.get('jobType') === 'TRAIN') { - jobType = $('.cloudbrain_debug').data('train-task') - } - else if (params.get('jobType') === 'INFERENCE') { - jobType = $('.cloudbrain_debug').data('inference-task') - } - else { - jobType = $('.cloudbrain_debug').data('benchmark-task') - } - } + if ($("#userCloud").length === 0) { + return; + } + const params = new URLSearchParams(window.location.search); + let jobType; + if ($(".cloudbrain_debug").length === 1) { + if (!params.get("jobType")) { + jobType = $(".cloudbrain_debug").data("allTask"); + } else { + if (params.get("jobType") === "DEBUG") { + jobType = $(".cloudbrain_debug").data("debug-task"); + } else if (params.get("jobType") === "TRAIN") { + jobType = $(".cloudbrain_debug").data("train-task"); + } else if (params.get("jobType") === "INFERENCE") { + jobType = $(".cloudbrain_debug").data("inference-task"); + } else { + jobType = $(".cloudbrain_debug").data("benchmark-task"); + } } - let listType = !params.get('listType') ? $('.cloudbrain_debug').data('all-compute') : params.get('listType') - let jobStatus = !params.get('jobStatus') ? $('.cloudbrain_debug').data('all-status') : params.get('jobStatus').toUpperCase() - const dropdownValueArray = [jobType, listType, jobStatus] - $('#userCloud .default.text ').each(function (index, e) { - $(e).text(dropdownValueArray[index]) - }) + } + let listType = !params.get("listType") + ? $(".cloudbrain_debug").data("all-compute") + : params.get("listType"); + let jobStatus = !params.get("jobStatus") + ? $(".cloudbrain_debug").data("all-status") + : params.get("jobStatus").toUpperCase(); + const dropdownValueArray = [jobType, listType, jobStatus]; + $("#userCloud .default.text ").each(function (index, e) { + $(e).text(dropdownValueArray[index]); + }); } function AdaminSearchControll() { - if ($('#adminCloud').length === 0) { - return - } - const params = new URLSearchParams(window.location.search) - let jobType = !params.get('jobType') ? $('.cloudbrain_debug').data('all-task') : params.get('jobType') - let listType = !params.get('listType') ? $('.cloudbrain_debug').data('all-compute') : params.get('listType') - let jobStatus = !params.get('jobStatus') ? $('.cloudbrain_debug').data('all-status') : params.get('jobStatus').toUpperCase() - const dropdownValueArray = [jobType, listType, jobStatus] - $('#adminCloud .default.text ').each(function (index, e) { - $(e).text(dropdownValueArray[index]) - }) + if ($("#adminCloud").length === 0) { + return; + } + const params = new URLSearchParams(window.location.search); + let jobType = !params.get("jobType") + ? $(".cloudbrain_debug").data("all-task") + : params.get("jobType"); + let listType = !params.get("listType") + ? $(".cloudbrain_debug").data("all-compute") + : params.get("listType"); + let jobStatus = !params.get("jobStatus") + ? $(".cloudbrain_debug").data("all-status") + : params.get("jobStatus").toUpperCase(); + const dropdownValueArray = [jobType, listType, jobStatus]; + $("#adminCloud .default.text ").each(function (index, e) { + $(e).text(dropdownValueArray[index]); + }); } -userSearchControll() -AdaminSearchControll() - - - +userSearchControll(); +AdaminSearchControll(); From 1f341aa7331b914cf38e9bf835d4815084f26c7e Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 8 Jul 2022 16:34:15 +0800 Subject: [PATCH 21/75] fix issue --- templates/repo/cloudbrain/{trainjob => inference}/show.tmpl | 0 templates/repo/modelarts/inferencejob/index.tmpl | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename templates/repo/cloudbrain/{trainjob => inference}/show.tmpl (100%) mode change 100755 => 100644 diff --git a/templates/repo/cloudbrain/trainjob/show.tmpl b/templates/repo/cloudbrain/inference/show.tmpl old mode 100755 new mode 100644 similarity index 100% rename from templates/repo/cloudbrain/trainjob/show.tmpl rename to templates/repo/cloudbrain/inference/show.tmpl diff --git a/templates/repo/modelarts/inferencejob/index.tmpl b/templates/repo/modelarts/inferencejob/index.tmpl index 6d230b993..b46dc98bc 100644 --- a/templates/repo/modelarts/inferencejob/index.tmpl +++ b/templates/repo/modelarts/inferencejob/index.tmpl @@ -105,7 +105,7 @@
- + {{.DisplayJobName}} From 77fa16eb2f8d30b8c3df8956d1ec4971213c689f Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Fri, 8 Jul 2022 16:38:46 +0800 Subject: [PATCH 22/75] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/cloudbrain/cloudbrain.go | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/modules/cloudbrain/cloudbrain.go b/modules/cloudbrain/cloudbrain.go index 08e39452c..3805f253f 100755 --- a/modules/cloudbrain/cloudbrain.go +++ b/modules/cloudbrain/cloudbrain.go @@ -256,13 +256,7 @@ func GenerateTask(req GenerateCloudBrainTaskReq) error { ReadOnly: false, }, }, - { - HostPath: models.StHostPath{ - Path: req.ModelPath, - MountPath: ModelMountPath, - ReadOnly: false, - }, - }, + { HostPath: models.StHostPath{ Path: req.BenchmarkPath, @@ -292,6 +286,25 @@ func GenerateTask(req GenerateCloudBrainTaskReq) error { }, }, } + if len(req.CkptName) == 0 { + volumes = append(volumes, models.Volume{ + HostPath: models.StHostPath{ + Path: req.ModelPath, + MountPath: ModelMountPath, + ReadOnly: false, + }, + }) + + } else { + volumes = append(volumes, models.Volume{ + HostPath: models.StHostPath{ + Path: req.ModelPath, + MountPath: ModelMountPath + "/" + req.CkptName, + ReadOnly: false, + }, + }) + + } if len(req.DatasetInfos) == 1 { volumes = append(volumes, models.Volume{ From 6e910f2c892c92796621e7fdbb4a7869940348b5 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 8 Jul 2022 16:49:47 +0800 Subject: [PATCH 23/75] fix issue --- templates/repo/cloudbrain/inference/show.tmpl | 2 +- templates/repo/modelarts/inferencejob/index.tmpl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/repo/cloudbrain/inference/show.tmpl b/templates/repo/cloudbrain/inference/show.tmpl index f1087abcf..f1d29c426 100644 --- a/templates/repo/cloudbrain/inference/show.tmpl +++ b/templates/repo/cloudbrain/inference/show.tmpl @@ -226,7 +226,7 @@
{{.displayJobName}}
- {{range $k ,$v := .version_list_task}} + {{with .task}}
diff --git a/templates/repo/modelarts/inferencejob/index.tmpl b/templates/repo/modelarts/inferencejob/index.tmpl index b46dc98bc..89eb3f075 100644 --- a/templates/repo/modelarts/inferencejob/index.tmpl +++ b/templates/repo/modelarts/inferencejob/index.tmpl @@ -105,7 +105,7 @@
- + {{.DisplayJobName}} From b38abe7439ab3cadbadbb18d06de8f62a5f8d3e3 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 8 Jul 2022 17:01:01 +0800 Subject: [PATCH 24/75] fix issue --- templates/repo/cloudbrain/inference/show.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repo/cloudbrain/inference/show.tmpl b/templates/repo/cloudbrain/inference/show.tmpl index f1d29c426..773db4ba8 100644 --- a/templates/repo/cloudbrain/inference/show.tmpl +++ b/templates/repo/cloudbrain/inference/show.tmpl @@ -226,7 +226,7 @@
{{.displayJobName}}
- {{with .task}} + {{range $k ,$v := .task}}
From f8029714ada04505113a594f81d83a3f636c111e Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 8 Jul 2022 17:05:58 +0800 Subject: [PATCH 25/75] fix issue --- templates/repo/cloudbrain/inference/show.tmpl | 439 ++++++++++++-------------- 1 file changed, 205 insertions(+), 234 deletions(-) diff --git a/templates/repo/cloudbrain/inference/show.tmpl b/templates/repo/cloudbrain/inference/show.tmpl index 773db4ba8..8aebc6f10 100644 --- a/templates/repo/cloudbrain/inference/show.tmpl +++ b/templates/repo/cloudbrain/inference/show.tmpl @@ -226,259 +226,230 @@
{{.displayJobName}}
- {{range $k ,$v := .task}} -
- -
-
-
- - - -
- {{TimeSinceUnix1 .CreatedUnix}} - - {{$.i18n.Tr "repo.modelarts.status"}}: - {{.Status}} - - {{$.i18n.Tr "repo.modelarts.train_job.dura_time"}}: - {{$.duration}} - -
-
-
-
-
+ {{with .task}} +
+ -
-
- -
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- {{$.i18n.Tr "repo.cloudbrain_task"}} - -
- {{.DisplayJobName}} -
-
- {{$.i18n.Tr "repo.modelarts.status"}} - -
- {{.Status}} -
-
- {{$.i18n.Tr "repo.modelarts.train_job.start_time"}} - -
- {{TimeSinceUnix1 .CreatedUnix}} -
-
- {{$.i18n.Tr "repo.modelarts.train_job.dura_time"}} - -
- {{$.duration}} -
-
- {{$.i18n.Tr "repo.modelarts.train_job.resource_type"}} - -
- {{$.resource_type}} -
-
- {{$.i18n.Tr "repo.modelarts.train_job.standard"}} - -
- {{$.i18n.Tr "cloudbrain.gpu_num"}}:{{$.GpuNum}},{{$.i18n.Tr "cloudbrain.cpu_num"}}:{{$.CpuNum}},{{$.i18n.Tr "cloudbrain.memory"}}(MB):{{$.MemMiB}},{{$.i18n.Tr "cloudbrain.shared_memory"}}(MB):{{$.ShareMemMiB}} -
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- {{$.i18n.Tr "cloudbrain.mirror"}} - -
- {{.Image}} -
-
- {{$.i18n.Tr "repo.modelarts.code_version"}} - -
- {{.BranchName}} -
-
- {{$.i18n.Tr "repo.modelarts.train_job.start_file"}} - -
- {{.BootFile}} -
-
- {{$.i18n.Tr "repo.modelarts.train_job.train_dataset"}} - -
- {{.DatasetName}} -
-
- {{$.i18n.Tr "repo.modelarts.train_job.run_parameter"}} - -
- {{.Parameters}} -
-
- {{$.i18n.Tr "repo.modelarts.train_job.description"}} - -
- {{.Description}} -
-
-
-
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ {{$.i18n.Tr "repo.cloudbrain_task"}} + +
+ {{.DisplayJobName}} +
+
+ {{$.i18n.Tr "repo.modelarts.status"}} + +
+ {{.Status}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.start_time"}} + +
+ {{TimeSinceUnix1 .CreatedUnix}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.dura_time"}} + +
+ {{$.duration}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.resource_type"}} + +
+ {{$.resource_type}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.standard"}} + +
+ {{$.i18n.Tr "cloudbrain.gpu_num"}}:{{$.GpuNum}},{{$.i18n.Tr "cloudbrain.cpu_num"}}:{{$.CpuNum}},{{$.i18n.Tr "cloudbrain.memory"}}(MB):{{$.MemMiB}},{{$.i18n.Tr "cloudbrain.shared_memory"}}(MB):{{$.ShareMemMiB}} +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ {{$.i18n.Tr "cloudbrain.mirror"}} + +
+ {{.Image}} +
+
+ {{$.i18n.Tr "repo.modelarts.code_version"}} + +
+ {{.BranchName}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.start_file"}} + +
+ {{.BootFile}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.train_dataset"}} + +
+ {{.DatasetName}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.run_parameter"}} + +
+ {{.Parameters}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.description"}} + +
+ {{.Description}} +
+
-
-
-
- -
- - - - - -
+
+
-
+
+
+ +
+ + + +
-
-
- -
- - -

-                            
+
-
+
+
+
+ +
+ + +

                     
-
- - - + +
-
-
+
+ + + -
+
+
+
+ + {{end}} {{template "base/paginate" .}}
From e501169c789411b0986543ceaaaaf4ed28ad9b46 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Fri, 8 Jul 2022 17:07:52 +0800 Subject: [PATCH 26/75] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/cloudbrain/cloudbrain.go | 19 ------------------- routers/repo/cloudbrain.go | 4 +++- 2 files changed, 3 insertions(+), 20 deletions(-) diff --git a/modules/cloudbrain/cloudbrain.go b/modules/cloudbrain/cloudbrain.go index 3805f253f..2ce2cf885 100755 --- a/modules/cloudbrain/cloudbrain.go +++ b/modules/cloudbrain/cloudbrain.go @@ -286,25 +286,6 @@ func GenerateTask(req GenerateCloudBrainTaskReq) error { }, }, } - if len(req.CkptName) == 0 { - volumes = append(volumes, models.Volume{ - HostPath: models.StHostPath{ - Path: req.ModelPath, - MountPath: ModelMountPath, - ReadOnly: false, - }, - }) - - } else { - volumes = append(volumes, models.Volume{ - HostPath: models.StHostPath{ - Path: req.ModelPath, - MountPath: ModelMountPath + "/" + req.CkptName, - ReadOnly: false, - }, - }) - - } if len(req.DatasetInfos) == 1 { volumes = append(volumes, models.Volume{ diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index d7796c0ba..335befcfa 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -429,7 +429,7 @@ func CloudBrainInferenceJobCreate(ctx *context.Context, form auth.CreateCloudBra DatasetNames: datasetNames, DatasetInfos: datasetInfos, CodePath: storage.GetMinioPath(jobName, cloudbrain.CodeMountPath+"/"), - ModelPath: ckptUrl, + ModelPath: setting.Attachment.Minio.RealPath + setting.Attachment.Minio.Bucket + "/" + form.TrainUrl, BenchmarkPath: storage.GetMinioPath(jobName, cloudbrain.BenchMarkMountPath+"/"), Snn4ImageNetPath: storage.GetMinioPath(jobName, cloudbrain.Snn4imagenetMountPath+"/"), BrainScorePath: storage.GetMinioPath(jobName, cloudbrain.BrainScoreMountPath+"/"), @@ -2516,6 +2516,8 @@ func getInferenceJobCommand(form auth.CreateCloudBrainInferencForm) (string, err } } + param += " --modelname" + "=" + form.CkptName + command += "python /code/" + bootFile + param + " > " + cloudbrain.ResultPath + "/" + form.DisplayJobName + "-" + cloudbrain.LogFile return command, nil From b1df0c7eac68d7f6c86919fd1acbd25cf5a5b7b6 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 8 Jul 2022 17:12:51 +0800 Subject: [PATCH 27/75] fix issue --- templates/repo/cloudbrain/inference/show.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repo/cloudbrain/inference/show.tmpl b/templates/repo/cloudbrain/inference/show.tmpl index 8aebc6f10..bfad97dae 100644 --- a/templates/repo/cloudbrain/inference/show.tmpl +++ b/templates/repo/cloudbrain/inference/show.tmpl @@ -526,7 +526,7 @@ filename = filename || '' init = init || '' console.log("start") - $.get(`/api/v1/repos/${userName}/${repoPath}/cloudbrain/train-job/${jobID}/model_list?version_name=${version_name}&parentDir=${parents}`, (data) => { + $.get(`/api/v1/repos/${userName}/${repoPath}/cloudbrain/inference-job/${jobID}/model_list?version_name=${version_name}&parentDir=${parents}`, (data) => { $(`#dir_list${version_name}`).empty() renderDir(data, version_name) if (init === "init") { From 488df638440c472c5c0a065fd8e82d64e6b6354a Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 8 Jul 2022 17:24:33 +0800 Subject: [PATCH 28/75] fix issue --- templates/repo/cloudbrain/inference/show.tmpl | 205 +++++++++++++++++--------- 1 file changed, 137 insertions(+), 68 deletions(-) diff --git a/templates/repo/cloudbrain/inference/show.tmpl b/templates/repo/cloudbrain/inference/show.tmpl index bfad97dae..45d38c2eb 100644 --- a/templates/repo/cloudbrain/inference/show.tmpl +++ b/templates/repo/cloudbrain/inference/show.tmpl @@ -266,134 +266,203 @@
- - + - {{$.i18n.Tr "repo.modelarts.train_job.resource_type"}} + {{$.i18n.Tr "repo.modelarts.train_job.start_time"}}
- {{$.resource_type}} + + {{if not (eq .StartTime 0)}} + {{TimeSinceUnix1 .StartTime}} + {{else}} + {{TimeSinceUnix1 .CreatedUnix}} + {{end}} +
- {{$.i18n.Tr "repo.modelarts.train_job.standard"}} + {{$.i18n.Tr "repo.modelarts.train_job.dura_time"}} -
- {{$.i18n.Tr "cloudbrain.gpu_num"}}:{{$.GpuNum}},{{$.i18n.Tr "cloudbrain.cpu_num"}}:{{$.CpuNum}},{{$.i18n.Tr "cloudbrain.memory"}}(MB):{{$.MemMiB}},{{$.i18n.Tr "cloudbrain.shared_memory"}}(MB):{{$.ShareMemMiB}} +
+ {{.TrainJobDuration}}
- - - -
-
- - - - - - - - - - - - - - - -
- {{$.i18n.Tr "cloudbrain.mirror"}} - -
- {{.Image}} -
-
- {{$.i18n.Tr "repo.modelarts.code_version"}} + {{$.i18n.Tr "repo.modelarts.train_job.AI_driver"}}
- {{.BranchName}} + {{.EngineName}}
- {{$.i18n.Tr "repo.modelarts.train_job.start_file"}} - -
- {{.BootFile}} -
-
- {{$.i18n.Tr "repo.modelarts.train_job.train_dataset"}} + {{$.i18n.Tr "repo.model.manage.description"}} -
- {{.DatasetName}} +
+ {{if .Description}} + {{.Description}} + {{else}} + -- + {{end}}
- {{$.i18n.Tr "repo.modelarts.train_job.run_parameter"}} + 创建人 -
- {{.Parameters}} +
+ {{$.userName}}
- {{$.i18n.Tr "repo.modelarts.train_job.description"}} + {{$.i18n.Tr "repo.modelarts.train_job.compute_node"}} -
- {{.Description}} +
+ {{.WorkServerNumber}}
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ {{$.i18n.Tr "repo.modelarts.infer_job_model"}} + +
+ {{.ModelName}}   + {{$.i18n.Tr "repo.modelarts.version"}}:{{.ModelVersion}}   + +
+
+ {{$.i18n.Tr "repo.modelarts.infer_job_model_file"}} + +
+ {{.CkptName}} +
+
+ {{$.i18n.Tr "repo.modelarts.model_label"}} + +
+ + {{if .LabelName}} + {{range $.labelName}} + {{.}} + {{end}} + {{else}} + -- + {{end}} +
+
+ {{$.i18n.Tr "repo.modelarts.code_version"}} + +
+ {{.BranchName}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.start_file"}} + +
+ {{.BootFile}} +
+
+ {{$.i18n.Tr "repo.modelarts.infer_dataset"}} + +
+ {{.DatasetName}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.run_parameter"}} + +
+ {{if .Parameters}} + {{.Parameters}} + {{else}} + -- + {{end}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.standard"}} + +
+ {{.FlavorName}} +
+
+
@@ -526,7 +595,7 @@ filename = filename || '' init = init || '' console.log("start") - $.get(`/api/v1/repos/${userName}/${repoPath}/cloudbrain/inference-job/${jobID}/model_list?version_name=${version_name}&parentDir=${parents}`, (data) => { + $.get(`/api/v1/repos/${userName}/${repoPath}/cloudbrain/inference-job/${jobID}/result_list?version_name=${version_name}&parentDir=${parents}`, (data) => { $(`#dir_list${version_name}`).empty() renderDir(data, version_name) if (init === "init") { From 7f41f3d8a7193b7c76a5365ef54c2422cc2dbbd2 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Fri, 8 Jul 2022 17:35:53 +0800 Subject: [PATCH 29/75] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/cloudbrain/cloudbrain.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/modules/cloudbrain/cloudbrain.go b/modules/cloudbrain/cloudbrain.go index 2ce2cf885..08e39452c 100755 --- a/modules/cloudbrain/cloudbrain.go +++ b/modules/cloudbrain/cloudbrain.go @@ -256,7 +256,13 @@ func GenerateTask(req GenerateCloudBrainTaskReq) error { ReadOnly: false, }, }, - + { + HostPath: models.StHostPath{ + Path: req.ModelPath, + MountPath: ModelMountPath, + ReadOnly: false, + }, + }, { HostPath: models.StHostPath{ Path: req.BenchmarkPath, From 8f3f5bd392e500663f8503745ba9995b206a8b4c Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 8 Jul 2022 17:37:34 +0800 Subject: [PATCH 30/75] fix issue --- templates/repo/cloudbrain/inference/show.tmpl | 6 +- templates/repo/cloudbrain/trainjob/show.tmpl | 735 ++++++++++++++++++++++++++ 2 files changed, 738 insertions(+), 3 deletions(-) create mode 100644 templates/repo/cloudbrain/trainjob/show.tmpl diff --git a/templates/repo/cloudbrain/inference/show.tmpl b/templates/repo/cloudbrain/inference/show.tmpl index 45d38c2eb..6bf003db4 100644 --- a/templates/repo/cloudbrain/inference/show.tmpl +++ b/templates/repo/cloudbrain/inference/show.tmpl @@ -308,11 +308,11 @@ - {{$.i18n.Tr "repo.modelarts.train_job.AI_driver"}} + {{$.i18n.Tr "repo.modelarts.train_job.resource_type"}}
- {{.EngineName}} + {{$.resource_type}}
@@ -456,7 +456,7 @@
- {{.FlavorName}} + {{$.i18n.Tr "cloudbrain.gpu_num"}}:{{$.GpuNum}},{{$.i18n.Tr "cloudbrain.cpu_num"}}:{{$.CpuNum}},{{$.i18n.Tr "cloudbrain.memory"}}(MB):{{$.MemMiB}},{{$.i18n.Tr "cloudbrain.shared_memory"}}(MB):{{$.ShareMemMiB}}
diff --git a/templates/repo/cloudbrain/trainjob/show.tmpl b/templates/repo/cloudbrain/trainjob/show.tmpl new file mode 100644 index 000000000..05d678016 --- /dev/null +++ b/templates/repo/cloudbrain/trainjob/show.tmpl @@ -0,0 +1,735 @@ +{{template "base/head" .}} + +
+
+
+
+
+
+
+
+
+
+ {{template "repo/header" .}} +
+

+ +

+ {{range $k ,$v := .version_list_task}} +
+ +
+
+
+ + + +
+ {{TimeSinceUnix1 .CreatedUnix}} + + {{$.i18n.Tr "repo.modelarts.status"}}: + {{.Status}} + + {{$.i18n.Tr "repo.modelarts.train_job.dura_time"}}: + {{$.duration}} + +
+
+
+
+
+
+
+
+ +
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ {{$.i18n.Tr "repo.cloudbrain_task"}} + +
+ {{.DisplayJobName}} +
+
+ {{$.i18n.Tr "repo.modelarts.status"}} + +
+ {{.Status}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.start_time"}} + +
+ {{TimeSinceUnix1 .CreatedUnix}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.dura_time"}} + +
+ {{$.duration}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.resource_type"}} + +
+ {{$.resource_type}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.standard"}} + +
+ {{$.i18n.Tr "cloudbrain.gpu_num"}}:{{$.GpuNum}},{{$.i18n.Tr "cloudbrain.cpu_num"}}:{{$.CpuNum}},{{$.i18n.Tr "cloudbrain.memory"}}(MB):{{$.MemMiB}},{{$.i18n.Tr "cloudbrain.shared_memory"}}(MB):{{$.ShareMemMiB}} +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ {{$.i18n.Tr "cloudbrain.mirror"}} + +
+ {{.Image}} +
+
+ {{$.i18n.Tr "repo.modelarts.code_version"}} + +
+ {{.BranchName}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.start_file"}} + +
+ {{.BootFile}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.train_dataset"}} + +
+ {{.DatasetName}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.run_parameter"}} + +
+ {{.Parameters}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.description"}} + +
+ {{.Description}} +
+
+
+
+
+ +
+
+ +
+
+ +
+ + + + + +
+ +
+ +
+ +
+
+ +
+ + +

+                            
+ +
+ +
+ +
+ + + +
+ +
+
+ + {{$.i18n.Tr "repo.file_limit_100"}} +
+
+ +
+
+
+ {{end}} {{template "base/paginate" .}} +
+ +
+ +
+ + +
+{{template "base/footer" .}} + + \ No newline at end of file From e7f20926a87229fab7dfb08348230badd6ae8294 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 8 Jul 2022 17:56:30 +0800 Subject: [PATCH 31/75] fix issue --- templates/repo/cloudbrain/inference/show.tmpl | 32 ++------------------------- 1 file changed, 2 insertions(+), 30 deletions(-) diff --git a/templates/repo/cloudbrain/inference/show.tmpl b/templates/repo/cloudbrain/inference/show.tmpl index 6bf003db4..f79682589 100644 --- a/templates/repo/cloudbrain/inference/show.tmpl +++ b/templates/repo/cloudbrain/inference/show.tmpl @@ -233,8 +233,7 @@ data-tab="first">{{$.i18n.Tr "repo.modelarts.train_job.config"}} {{$.i18n.Tr "repo.cloudbrain.runinfo"}} - {{$.i18n.Tr "repo.modelarts.log"}} + {{$.i18n.Tr "repo.model_download"}}
@@ -487,21 +486,7 @@
-
-
- -
- - -

-                    
- -
- -
+
@@ -577,19 +562,6 @@ e.cancelBubble = true; //ie兼容 } } - - function loadLog(version_name) { - document.getElementById("mask").style.display = "block" - $.get(`/api/v1/repos/${userName}/${repoPath}/cloudbrain/${taskID}/log?version_name=${version_name}&lines=50&order=asc`, (data) => { - $('input[name=end_line]').val(data.EndLine) - $('input[name=start_line]').val(data.StartLine) - $(`#log_file${version_name}`).text(data.Content) - document.getElementById("mask").style.display = "none" - }).fail(function (err) { - console.log(err); - document.getElementById("mask").style.display = "none" - }); - } function loadModelFile(version_name, parents, filename, init) { parents = parents || '' filename = filename || '' From e4c9094a6dd6c2e2e5d504311830c731ef6d0941 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Mon, 11 Jul 2022 09:08:26 +0800 Subject: [PATCH 32/75] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/repo/cloudbrain.go | 41 +---------------------------------------- routers/repo/modelarts.go | 2 +- 2 files changed, 2 insertions(+), 41 deletions(-) diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index 335befcfa..68f2bc686 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -99,45 +99,6 @@ func cloudBrainNewDataPrepare(ctx *context.Context) error { var displayJobName = jobNamePrefixValid(cutString(ctx.User.Name, 5)) + t.Format("2006010215") + strconv.Itoa(int(t.Unix()))[5:] ctx.Data["display_job_name"] = displayJobName - result, err := cloudbrain.GetImages() - if err != nil { - ctx.Data["error"] = err.Error() - log.Error("cloudbrain.GetImages failed:", err.Error(), ctx.Data["MsgID"]) - } - - for i, payload := range result.Payload.ImageInfo { - if strings.HasPrefix(result.Payload.ImageInfo[i].Place, "192.168") { - result.Payload.ImageInfo[i].PlaceView = payload.Place[strings.Index(payload.Place, "/"):len(payload.Place)] - } else { - result.Payload.ImageInfo[i].PlaceView = payload.Place - } - } - - ctx.Data["images"] = result.Payload.ImageInfo - - resultPublic, err := cloudbrain.GetPublicImages() - if err != nil { - ctx.Data["error"] = err.Error() - log.Error("cloudbrain.GetPublicImages failed:", err.Error(), ctx.Data["MsgID"]) - } - - for i, payload := range resultPublic.Payload.ImageInfo { - if strings.HasPrefix(resultPublic.Payload.ImageInfo[i].Place, "192.168") { - resultPublic.Payload.ImageInfo[i].PlaceView = payload.Place[strings.Index(payload.Place, "/"):len(payload.Place)] - } else { - resultPublic.Payload.ImageInfo[i].PlaceView = payload.Place - } - } - - ctx.Data["public_images"] = resultPublic.Payload.ImageInfo - - attachs, err := models.GetAllUserAttachments(ctx.User.ID) - if err != nil { - log.Error("GetAllUserAttachments failed: %v", err, ctx.Data["MsgID"]) - return err - } - - ctx.Data["attachments"] = attachs ctx.Data["command"] = cloudbrain.Command ctx.Data["code_path"] = cloudbrain.CodeMountPath ctx.Data["dataset_path"] = cloudbrain.DataSetMountPath @@ -353,7 +314,7 @@ func CloudBrainInferenceJobCreate(ctx *context.Context, form auth.CreateCloudBra branchName := form.BranchName repo := ctx.Repo.Repository - ckptUrl := setting.Attachment.Minio.RealPath + setting.Attachment.Minio.Bucket + "/" + form.TrainUrl + form.CkptName + ckptUrl := setting.Attachment.Minio.RealPath + "/" + form.TrainUrl + form.CkptName log.Info("ckpt url:" + ckptUrl) tpl := tplCloudBrainInferenceJobNew command, err := getInferenceJobCommand(form) diff --git a/routers/repo/modelarts.go b/routers/repo/modelarts.go index 1354bcae1..780f0db51 100755 --- a/routers/repo/modelarts.go +++ b/routers/repo/modelarts.go @@ -1881,7 +1881,7 @@ func InferenceJobCreate(ctx *context.Context, form auth.CreateModelArtsInference modelName := form.ModelName modelVersion := form.ModelVersion ckptName := form.CkptName - ckptUrl := "/" + setting.Bucket + "/" + form.TrainUrl + form.CkptName + ckptUrl := "/" + form.TrainUrl + form.CkptName log.Info("ckpt url:" + ckptUrl) count, err := models.GetCloudbrainInferenceJobCountByUserID(ctx.User.ID) From 63c5681bb4b449a543733ae7e2cd89f98eb410ad Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Mon, 11 Jul 2022 09:50:55 +0800 Subject: [PATCH 33/75] fix issue --- templates/repo/cloudbrain/inference/show.tmpl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/templates/repo/cloudbrain/inference/show.tmpl b/templates/repo/cloudbrain/inference/show.tmpl index f79682589..a39fe9198 100644 --- a/templates/repo/cloudbrain/inference/show.tmpl +++ b/templates/repo/cloudbrain/inference/show.tmpl @@ -219,8 +219,8 @@ {{.i18n.Tr "repo.cloudbrain"}}
/
- - {{$.i18n.Tr "repo.modelarts.train_job"}} + + {{$.i18n.Tr "repo.modelarts.infer_job"}}
/
{{.displayJobName}}
@@ -633,7 +633,7 @@ html += "" + data.Dirs[i].FileName + "" } else { if (downlaodFlag) { - html += `` + html += `` } else { html += `` From 72174f54545299430a94b03416b3a6a8ef5b1071 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Mon, 11 Jul 2022 09:52:16 +0800 Subject: [PATCH 34/75] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/repo/cloudbrain.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index 68f2bc686..531c04658 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -314,7 +314,7 @@ func CloudBrainInferenceJobCreate(ctx *context.Context, form auth.CreateCloudBra branchName := form.BranchName repo := ctx.Repo.Repository - ckptUrl := setting.Attachment.Minio.RealPath + "/" + form.TrainUrl + form.CkptName + ckptUrl := setting.Attachment.Minio.RealPath + form.TrainUrl + form.CkptName log.Info("ckpt url:" + ckptUrl) tpl := tplCloudBrainInferenceJobNew command, err := getInferenceJobCommand(form) @@ -390,7 +390,7 @@ func CloudBrainInferenceJobCreate(ctx *context.Context, form auth.CreateCloudBra DatasetNames: datasetNames, DatasetInfos: datasetInfos, CodePath: storage.GetMinioPath(jobName, cloudbrain.CodeMountPath+"/"), - ModelPath: setting.Attachment.Minio.RealPath + setting.Attachment.Minio.Bucket + "/" + form.TrainUrl, + ModelPath: setting.Attachment.Minio.RealPath + form.TrainUrl, BenchmarkPath: storage.GetMinioPath(jobName, cloudbrain.BenchMarkMountPath+"/"), Snn4ImageNetPath: storage.GetMinioPath(jobName, cloudbrain.Snn4imagenetMountPath+"/"), BrainScorePath: storage.GetMinioPath(jobName, cloudbrain.BrainScoreMountPath+"/"), From 9061efccedd1d3b51174fdcf9973358214aced6e Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Mon, 11 Jul 2022 10:19:02 +0800 Subject: [PATCH 35/75] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/repo/cloudbrain.go | 54 +--------------------------------------------- 1 file changed, 1 insertion(+), 53 deletions(-) diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index 531c04658..0b3613bee 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -2384,59 +2384,7 @@ func InferenceCloudBrainJobNew(ctx *context.Context) { } func InferenceCloudBrainJobShow(ctx *context.Context) { - err := cloudBrainNewDataPrepare(ctx) - if err != nil { - ctx.ServerError("get new train-job info failed", err) - return - } - - var jobID = ctx.Params(":jobid") - - task, err := models.GetCloudbrainByJobID(jobID) - - if err != nil { - log.Error("GetInferenceTask(%s) failed:%v", jobID, err.Error()) - ctx.RenderWithErr(err.Error(), tplCloudBrainInferenceJobShow, nil) - return - } - - //将运行参数转化为epoch_size = 3, device_target = Ascend的格式 - var parameters models.Parameters - err = json.Unmarshal([]byte(task.Parameters), ¶meters) - if err != nil { - log.Error("Failed to Unmarshal Parameters: %s (%v)", task.Parameters, err) - ctx.RenderWithErr(err.Error(), tplCloudBrainInferenceJobShow, nil) - return - } - - if len(parameters.Parameter) > 0 { - paramTemp := "" - for _, Parameter := range parameters.Parameter { - param := Parameter.Label + " = " + Parameter.Value + "; " - paramTemp = paramTemp + param - } - task.Parameters = paramTemp[:len(paramTemp)-2] - } else { - task.Parameters = "" - } - - LabelName := strings.Fields(task.LabelName) - ctx.Data["labelName"] = LabelName - ctx.Data["jobID"] = jobID - ctx.Data["jobName"] = task.JobName - ctx.Data["displayJobName"] = task.DisplayJobName - ctx.Data["task"] = task - ctx.Data["canDownload"] = cloudbrain.CanModifyJob(ctx, task) - - tempUids := []int64{} - tempUids = append(tempUids, task.UserID) - JobCreater, err := models.GetUserNamesByIDs(tempUids) - if err != nil { - log.Error("GetUserNamesByIDs (WhitelistUserIDs): %v", err) - } - ctx.Data["userName"] = JobCreater[0] - - ctx.HTML(http.StatusOK, tplCloudBrainInferenceJobShow) + cloudBrainShow(ctx, tplCloudBrainInferenceJobShow, models.JobTypeTrain) } func DownloadInferenceResultFile(ctx *context.Context) { From 4a870b2e32114c1d8505cd856cf6e2f5623f7fdc Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Mon, 11 Jul 2022 10:34:23 +0800 Subject: [PATCH 36/75] fix issue --- templates/repo/modelarts/inferencejob/show.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repo/modelarts/inferencejob/show.tmpl b/templates/repo/modelarts/inferencejob/show.tmpl index 5c912d575..b5aadca95 100644 --- a/templates/repo/modelarts/inferencejob/show.tmpl +++ b/templates/repo/modelarts/inferencejob/show.tmpl @@ -420,7 +420,7 @@ td, th {
{{$.i18n.Tr "repo.modelarts.download_log"}} From a2c3e330277864e9ddfb35489fa30229bb4fc122 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Mon, 11 Jul 2022 12:37:55 +0800 Subject: [PATCH 37/75] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/cloudbrain.go | 21 ++++++++++++++++++++- modules/cloudbrain/resty.go | 41 +++++++++++++++++++++++++++++++---------- routers/repo/cloudbrain.go | 13 ++++--------- 3 files changed, 55 insertions(+), 20 deletions(-) diff --git a/models/cloudbrain.go b/models/cloudbrain.go index 600c8ffc4..b866e4c1a 100755 --- a/models/cloudbrain.go +++ b/models/cloudbrain.go @@ -306,6 +306,22 @@ type CreateJobResult struct { Payload map[string]interface{} `json:"payload"` } +type QueueDetailResult struct { + Code string `json:"code"` + Msg string `json:"msg"` + Payload map[string]QueueDetail `json:"payload"` +} + +type QueueDetail struct { + JobScheduleInfo JobScheduleInfo `json:"JobScheduleInfo"` +} + +type JobScheduleInfo struct { + Pending int `json:"Pending"` + Running int `json:"Running"` + MedianPendingJobDurationSec int `json:"MedianPendingJobDurationSec"` +} + type GetJobResult struct { Code string `json:"code"` Msg string `json:"msg"` @@ -1743,7 +1759,10 @@ func GetBenchmarkCountByUserID(userID int64) (int, error) { } func GetWaitingCloudbrainCount(cloudbrainType int, computeResource string, jobTypes ...JobType) (int64, error) { - sess := x.In("JobType", jobTypes).And("status=? and type=?", JobWaiting, cloudbrainType) + sess := x.Where("status=? and type=?", JobWaiting, cloudbrainType) + if len(jobTypes) >= 0 { + sess.In("JobType", jobTypes) + } if computeResource != "" { sess.And("compute_resource=?", computeResource) } diff --git a/modules/cloudbrain/resty.go b/modules/cloudbrain/resty.go index de8d3779c..7b714c4b5 100755 --- a/modules/cloudbrain/resty.go +++ b/modules/cloudbrain/resty.go @@ -30,6 +30,7 @@ const ( LogPageSize = 500 LogPageTokenExpired = "5m" pageSize = 15 + QueuesDetailUrl = "/rest-server/api/v2/queuesdetail" ) func getRestyClient() *resty.Client { @@ -73,6 +74,36 @@ func loginCloudbrain() error { return nil } +func GetQueuesDetail() (*map[string]int, error) { + checkSetting() + client := getRestyClient() + var jobResult models.QueueDetailResult + + var result = make(map[string]int, 0) + + res, err := client.R(). + SetHeader("Content-Type", "application/json"). + SetAuthToken(TOKEN). + SetResult(&jobResult). + Get(HOST + QueuesDetailUrl) + + if err != nil { + return nil, fmt.Errorf("resty get queues detail failed: %s", err) + } + + if jobResult.Code != Success { + return nil, fmt.Errorf("jobResult err: %s", res.String()) + } + + for k, v := range jobResult.Payload { + + result[k] = v.JobScheduleInfo.Pending + + } + return &result, nil + +} + func CreateJob(jobName string, createJobParams models.CreateJobParams) (*models.CreateJobResult, error) { checkSetting() client := getRestyClient() @@ -145,16 +176,6 @@ sendjob: return &getJobResult, nil } -func GetImages() (*models.GetImagesResult, error) { - - return GetImagesPageable(1, 100, Custom, "") - -} - -func GetPublicImages() (*models.GetImagesResult, error) { - return GetImagesPageable(1, 100, Public, "") -} - func GetImagesPageable(page int, size int, imageType string, name string) (*models.GetImagesResult, error) { checkSetting() client := getRestyClient() diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index 0b3613bee..1573df3c8 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -112,7 +112,10 @@ func cloudBrainNewDataPrepare(ctx *context.Context) error { ctx.Data["benchmark_categories"] = categories.Category ctx.Data["benchmark_types"] = GetBenchmarkTypes(ctx).BenchmarkType - + queuesDetail, _ := cloudbrain.GetQueuesDetail() + if queuesDetail != nil { + ctx.Data["QueuesDetail"] = queuesDetail + } if gpuInfos == nil { json.Unmarshal([]byte(setting.GpuTypes), &gpuInfos) } @@ -164,8 +167,6 @@ func CloudBrainNew(ctx *context.Context) { ctx.ServerError("get new cloudbrain info failed", err) return } - waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeCloudBrainOne, "", models.JobTypeDebug) - ctx.Data["WaitCount"] = waitCount ctx.HTML(200, tplCloudBrainNew) } @@ -1922,8 +1923,6 @@ func CloudBrainBenchmarkNew(ctx *context.Context) { ctx.ServerError("get new cloudbrain info failed", err) return } - waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeCloudBrainOne, "", models.JobTypeBrainScore, models.JobTypeSnn4imagenet, models.JobTypeBenchmark) - ctx.Data["WaitCount"] = waitCount ctx.HTML(200, tplCloudBrainBenchmarkNew) } @@ -2367,8 +2366,6 @@ func CloudBrainTrainJobNew(ctx *context.Context) { ctx.ServerError("get new train-job info failed", err) return } - waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeCloudBrainOne, "", models.JobTypeTrain) - ctx.Data["WaitCount"] = waitCount ctx.HTML(http.StatusOK, tplCloudBrainTrainJobNew) } @@ -2378,8 +2375,6 @@ func InferenceCloudBrainJobNew(ctx *context.Context) { ctx.ServerError("get new train-job info failed", err) return } - waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeCloudBrainOne, "", models.JobTypeInference) - ctx.Data["WaitCount"] = waitCount ctx.HTML(http.StatusOK, tplCloudBrainInferenceJobNew) } From b52803f1812ded5ebaf9aba68c1e47283ca5f79f Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Mon, 11 Jul 2022 15:51:46 +0800 Subject: [PATCH 38/75] fix issue --- templates/repo/cloudbrain/inference/show.tmpl | 119 +-------- templates/repo/cloudbrain/trainjob/show.tmpl | 119 +-------- templates/repo/grampus/trainjob/show.tmpl | 254 +------------------ templates/repo/modelarts/inferencejob/show.tmpl | 241 +----------------- templates/repo/modelarts/trainjob/show.tmpl | 257 +------------------- web_src/js/features/cloudbrainShow.js | 309 ++++++++++++++++++++++++ web_src/js/index.js | 140 +++++------ 7 files changed, 389 insertions(+), 1050 deletions(-) create mode 100644 web_src/js/features/cloudbrainShow.js diff --git a/templates/repo/cloudbrain/inference/show.tmpl b/templates/repo/cloudbrain/inference/show.tmpl index a39fe9198..b02c9694b 100644 --- a/templates/repo/cloudbrain/inference/show.tmpl +++ b/templates/repo/cloudbrain/inference/show.tmpl @@ -234,8 +234,8 @@ {{$.i18n.Tr "repo.cloudbrain.runinfo"}} - {{$.i18n.Tr "repo.model_download"}} + {{$.i18n.Tr "repo.model_download"}}
@@ -562,122 +562,7 @@ e.cancelBubble = true; //ie兼容 } } - function loadModelFile(version_name, parents, filename, init) { - parents = parents || '' - filename = filename || '' - init = init || '' - console.log("start") - $.get(`/api/v1/repos/${userName}/${repoPath}/cloudbrain/inference-job/${jobID}/result_list?version_name=${version_name}&parentDir=${parents}`, (data) => { - $(`#dir_list${version_name}`).empty() - renderDir(data, version_name) - if (init === "init") { - $(`input[name=model${version_name}]`).val("") - $(`input[name=modelback${version_name}]`).val(version_name) - $(`#file_breadcrumb${version_name}`).empty() - let htmlBread = "" - htmlBread += `
${version_name}
` - htmlBread += "
/
" - $(`#file_breadcrumb${version_name}`).append(htmlBread) - } else { - renderBrend(version_name, parents, filename, init) - } - }).fail(function (err) { - console.log(err, version_name); - }); - - } - function renderBrend(version_name, parents, filename, init) { - if (init == "folder") { - let htmlBrend = "" - let sectionName = $(`#file_breadcrumb${version_name} .active.section`).text() - let parents1 = $(`input[name=model${version_name}]`).val() - let filename1 = $(`input[name=modelback${version_name}]`).val() - if (parents1 === "") { - $(`#file_breadcrumb${version_name} .active.section`).replaceWith(`${sectionName}`) - } else { - $(`#file_breadcrumb${version_name} .active.section`).replaceWith(`${sectionName}`) - } - - htmlBrend += `
${filename}
` - htmlBrend += "
/
" - $(`#file_breadcrumb${version_name}`).append(htmlBrend) - $(`input[name=model${version_name}]`).val(parents) - $(`input[name=modelback${version_name}]`).val(filename) - } else { - $(`input[name=model${version_name}]`).val(parents) - $(`input[name=modelback${version_name}]`).val(filename) - $(`#file_breadcrumb${version_name} a.section:contains(${filename})`).nextAll().remove() - $(`#file_breadcrumb${version_name} a.section:contains(${filename})`).replaceWith(`
${filename}
`) - $(`#file_breadcrumb${version_name} div.section:contains(${filename})`).append("
/
") - } - - } - function renderDir(data, version_name) { - let html = "" - html += "
" - html += "
" - html += "
" - html += "
" - html += "" - html += '' - // html += "" - for (let i = 0; i < data.Dirs.length; i++) { - let dirs_size = renderSize(data.Dirs[i].Size) - html += "" - html += "" - html += "" - - html += "" - html += "" - - } - html += "" - html += "
" - html += "" - html += "" - html += "" - if (data.Dirs[i].IsDir) { - html += `` - html += "" + data.Dirs[i].FileName + "" - } else { - if (downlaodFlag) { - html += `` - } - else { - html += `` - } - html += "" + data.Dirs[i].FileName + "" - } - html += '' - html += "" - html += "" - if (data.Dirs[i].IsDir) { - html += "" - } else { - html += "" + `${dirs_size}` + "" - } - html += "" - html += "" + data.Dirs[i].ModTime + "" - html += "
" - html += "
" - html += "
" - html += "
" - html += "
" - $(`#dir_list${version_name}`).append(html) - } - function renderSize(value) { - if (null == value || value == '') { - return "0 Bytes"; - } - var unitArr = new Array("Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"); - var index = 0; - var srcsize = parseFloat(value); - index = Math.floor(Math.log(srcsize) / Math.log(1024)); - var size = srcsize / Math.pow(1024, index); - size = size.toFixed(0);//保留的小数位数 - return size + unitArr[index]; - } function refreshStatus(version_name) { $.get(`/api/v1/repos/${userName}/${repoPath}/cloudbrain/${taskID}?version_name=${versionname}`, (data) => { diff --git a/templates/repo/cloudbrain/trainjob/show.tmpl b/templates/repo/cloudbrain/trainjob/show.tmpl index 05d678016..3f66de0a3 100644 --- a/templates/repo/cloudbrain/trainjob/show.tmpl +++ b/templates/repo/cloudbrain/trainjob/show.tmpl @@ -264,8 +264,7 @@ onclick="javascript:parseInfo()">{{$.i18n.Tr "repo.cloudbrain.runinfo"}} {{$.i18n.Tr "repo.modelarts.log"}} - {{$.i18n.Tr "repo.model_download"}} + {{$.i18n.Tr "repo.model_download"}}
@@ -554,122 +553,6 @@ document.getElementById("mask").style.display = "none" }); } - function loadModelFile(version_name, parents, filename, init) { - parents = parents || '' - filename = filename || '' - init = init || '' - console.log("start") - $.get(`/api/v1/repos/${userName}/${repoPath}/cloudbrain/train-job/${jobID}/model_list?version_name=${version_name}&parentDir=${parents}`, (data) => { - $(`#dir_list${version_name}`).empty() - renderDir(data, version_name) - if (init === "init") { - $(`input[name=model${version_name}]`).val("") - $(`input[name=modelback${version_name}]`).val(version_name) - $(`#file_breadcrumb${version_name}`).empty() - let htmlBread = "" - htmlBread += `
${version_name}
` - htmlBread += "
/
" - $(`#file_breadcrumb${version_name}`).append(htmlBread) - } else { - renderBrend(version_name, parents, filename, init) - } - }).fail(function (err) { - console.log(err, version_name); - }); - - } - function renderBrend(version_name, parents, filename, init) { - if (init == "folder") { - let htmlBrend = "" - let sectionName = $(`#file_breadcrumb${version_name} .active.section`).text() - let parents1 = $(`input[name=model${version_name}]`).val() - let filename1 = $(`input[name=modelback${version_name}]`).val() - if (parents1 === "") { - $(`#file_breadcrumb${version_name} .active.section`).replaceWith(`${sectionName}`) - } else { - $(`#file_breadcrumb${version_name} .active.section`).replaceWith(`${sectionName}`) - } - - htmlBrend += `
${filename}
` - htmlBrend += "
/
" - $(`#file_breadcrumb${version_name}`).append(htmlBrend) - $(`input[name=model${version_name}]`).val(parents) - $(`input[name=modelback${version_name}]`).val(filename) - } else { - $(`input[name=model${version_name}]`).val(parents) - $(`input[name=modelback${version_name}]`).val(filename) - $(`#file_breadcrumb${version_name} a.section:contains(${filename})`).nextAll().remove() - $(`#file_breadcrumb${version_name} a.section:contains(${filename})`).replaceWith(`
${filename}
`) - $(`#file_breadcrumb${version_name} div.section:contains(${filename})`).append("
/
") - } - - } - function renderDir(data, version_name) { - let html = "" - html += "
" - html += "
" - html += "
" - html += "
" - html += "" - html += '' - // html += "" - for (let i = 0; i < data.Dirs.length; i++) { - let dirs_size = renderSize(data.Dirs[i].Size) - html += "" - html += "" - html += "" - - html += "" - html += "" - - } - html += "" - html += "
" - html += "" - html += "" - html += "" - if (data.Dirs[i].IsDir) { - html += `` - html += "" + data.Dirs[i].FileName + "" - } else { - if (downlaodFlag) { - html += `` - } - else { - html += `` - } - html += "" + data.Dirs[i].FileName + "" - } - html += '' - html += "" - html += "" - if (data.Dirs[i].IsDir) { - html += "" - } else { - html += "" + `${dirs_size}` + "" - } - - html += "" - html += "" + data.Dirs[i].ModTime + "" - html += "
" - html += "
" - html += "
" - html += "
" - html += "
" - $(`#dir_list${version_name}`).append(html) - } - function renderSize(value) { - if (null == value || value == '') { - return "0 Bytes"; - } - var unitArr = new Array("Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"); - var index = 0; - var srcsize = parseFloat(value); - index = Math.floor(Math.log(srcsize) / Math.log(1024)); - var size = srcsize / Math.pow(1024, index); - size = size.toFixed(0);//保留的小数位数 - return size + unitArr[index]; - } function refreshStatus(version_name) { $.get(`/api/v1/repos/${userName}/${repoPath}/cloudbrain/${taskID}?version_name=${versionname}`, (data) => { diff --git a/templates/repo/grampus/trainjob/show.tmpl b/templates/repo/grampus/trainjob/show.tmpl index 579e83693..e017fd4a0 100755 --- a/templates/repo/grampus/trainjob/show.tmpl +++ b/templates/repo/grampus/trainjob/show.tmpl @@ -273,8 +273,7 @@ data-tab="first{{$k}}">{{$.i18n.Tr "repo.modelarts.train_job.config"}} {{$.i18n.Tr "repo.modelarts.log"}} - {{$.i18n.Tr "repo.model_download"}} + {{$.i18n.Tr "repo.model_download"}}
@@ -658,18 +657,6 @@ $('#name').val(modelName) $('#version').val("0.0.1") } - function renderSize(value) { - if (null == value || value == '') { - return "0 Bytes"; - } - var unitArr = new Array("Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"); - var index = 0; - var srcsize = parseFloat(value); - index = Math.floor(Math.log(srcsize) / Math.log(1024)); - var size = srcsize / Math.pow(1024, index); - size = size.toFixed(0);//保留的小数位数 - return size + unitArr[index]; - } function refreshStatus(version_name) { $.get(`/api/v1/repos/${userName}/${repoPath}/grampus/train-job/${jobID}?version_name=${version_name}`, (data) => { // header status and duration @@ -740,243 +727,4 @@ console.log(err); }); } - function loadModelFile(version_name, parents, filename, init) { - parents = parents || '' - filename = filename || '' - init = init || '' - $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/model_list?version_name=${version_name}&parentDir=${parents}`, (data) => { - $(`#dir_list${version_name}`).empty() - renderDir(data, version_name) - if (init === "init") { - $(`input[name=model${version_name}]`).val("") - $(`input[name=modelback${version_name}]`).val(version_name) - $(`#file_breadcrumb${version_name}`).empty() - let htmlBread = "" - htmlBread += `
${version_name}
` - htmlBread += "
/
" - $(`#file_breadcrumb${version_name}`).append(htmlBread) - } else { - renderBrend(version_name, parents, filename, init) - } - }).fail(function (err) { - console.log(err, version_name); - }); - - } - function renderBrend(version_name, parents, filename, init) { - if (init == "folder") { - let htmlBrend = "" - let sectionName = $(`#file_breadcrumb${version_name} .active.section`).text() - let parents1 = $(`input[name=model${version_name}]`).val() - let filename1 = $(`input[name=modelback${version_name}]`).val() - if (parents1 === "") { - $(`#file_breadcrumb${version_name} .active.section`).replaceWith(`${sectionName}`) - } else { - $(`#file_breadcrumb${version_name} .active.section`).replaceWith(`${sectionName}`) - } - - htmlBrend += `
${filename}
` - htmlBrend += "
/
" - $(`#file_breadcrumb${version_name}`).append(htmlBrend) - $(`input[name=model${version_name}]`).val(parents) - $(`input[name=modelback${version_name}]`).val(filename) - } else { - $(`input[name=model${version_name}]`).val(parents) - $(`input[name=modelback${version_name}]`).val(filename) - $(`#file_breadcrumb${version_name} a.section:contains(${filename})`).nextAll().remove() - $(`#file_breadcrumb${version_name} a.section:contains(${filename})`).replaceWith(`
${filename}
`) - $(`#file_breadcrumb${version_name} div.section:contains(${filename})`).append("
/
") - } - - } - function renderDir(data, version_name) { - let html = "" - html += "
" - html += "
" - html += "
" - html += "
" - html += "" - html += '' - // html += "" - for (let i = 0; i < data.Dirs.length; i++) { - let dirs_size = renderSize(data.Dirs[i].Size) - html += "" - html += "" - html += "" - - html += "" - html += "" - - } - html += "" - html += "
" - html += "" - html += "" - html += "" - if (data.Dirs[i].IsDir) { - html += `` - html += "" + data.Dirs[i].FileName + "" - } else { - if (downlaodFlag) { - html += `` - } - else { - html += `` - } - html += "" + data.Dirs[i].FileName + "" - } - html += '' - html += "" - html += "" - if (data.Dirs[i].IsDir) { - html += "" - } else { - html += "" + `${dirs_size}` + "" - } - - html += "" - html += "" + data.Dirs[i].ModTime + "" - html += "
" - html += "
" - html += "
" - html += "
" - html += "
" - $(`#dir_list${version_name}`).append(html) - } - function debounce(fn, delay) { - let timer; - return (...args) => { - // 判断定时器是否存在,清除定时器 - if (timer) { - clearTimeout(timer); - } - - // 重新调用setTimeout - timer = setTimeout(() => { - fn.apply(this, args); - }, delay); - }; - } - const fn = debounce(logScroll, 500) - function logScroll(version_name) { - let container = document.querySelector(`#log${version_name}`) - let scrollTop = container.scrollTop - let scrollHeight = container.scrollHeight - let clientHeight = container.clientHeight - let scrollLeft = container.scrollLeft - if (((parseInt(scrollTop) + clientHeight == scrollHeight || parseInt(scrollTop) + clientHeight + 1 == scrollHeight || parseInt(scrollTop) + clientHeight - 1 == scrollHeight)) && parseInt(scrollTop) !== 0 && scrollLeft == 0) { - let end_line = $(`#log${version_name} input[name=end_line]`).val() - $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${end_line}&lines=50&order=desc`, (data) => { - if (data.Lines == 0) { - $(`.message${version_name} #header`).text('您已翻阅至日志底部') - $(`.message${version_name}`).css('display', 'block') - setTimeout(function () { - $(`.message${version_name}`).css('display', 'none') - }, 1000) - } else { - if (end_line === data.EndLine) { - return - } - else { - $(`#log${version_name} input[name=end_line]`).val(data.EndLine) - $(`#log${version_name}`).append('
' + data.Content)
-                    }
-
-                }
-            }).fail(function (err) {
-                console.log(err);
-            });
-        }
-        if ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10].includes(scrollTop) && scrollLeft == 0) {
-            let start_line = $(`#log${version_name} input[name=start_line]`).val()
-            $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${start_line}&lines=50&order=asc`, (data) => {
-                if (data.Lines == 0) {
-                    $(`.message${version_name} #header`).text('您已翻阅至日志顶部')
-                    $(`.message${version_name}`).css('display', 'block')
-                    setTimeout(function () {
-                        $(`.message${version_name}`).css('display', 'none')
-                    }, 1000)
-                } else {
-                    $(`#log${version_name} input[name=start_line]`).val(data.StartLine)   //如果变动就改变所对应的值
-                    $(`#log${version_name}`).prepend('
' + data.Content)
-                }
-            }).fail(function (err) {
-                console.log(err);
-            });
-        }
-    }
-    function scrollAnimation(dom, currentY, targetY, currentX) {
-        let needScrollTop = targetY - currentY;
-        let _currentY = currentY;
-        setTimeout(() => {
-            // 一次调用滑动帧数,每次调用会不一样
-            //取总距离的十分之一
-            const dist = Math.ceil(needScrollTop / 10);
-            _currentY += dist;
-            //移动一个十分之一
-            dom.scrollTo(currentX || 0, _currentY, 'smooth');
-            // 如果移动幅度小于十个像素,直接移动,否则递归调用,实现动画效果
-            if (needScrollTop > 10 || needScrollTop < -10) {
-                scrollAnimation(dom, _currentY, targetY)
-            } else {
-                dom.scrollTo(0, targetY, 'smooth')
-            }
-        }, 1)
-    }
-
-    $('.log_top').click(function () {
-        // let logContentDom = document.querySelector('.log')
-        // if(!logContentDom)
-        //     return
-        // let version_name = $('.log_top').data('version')
-        let version_name = $(this).data('version')
-        let logContentDom = document.querySelector(`#log${version_name}`)
-
-        $(`#log_file${version_name}`).siblings('pre').remove()
-        $.get(`/api/v1/repos/${userName}/${repoPath}/grampus/train-job/${jobID}/log?version_name=${version_name}&base_line=&lines=50&order=asc`, (data) => {
-
-            $(`#log${version_name} input[name=end_line]`).val(data.EndLine)   //如果变动就改变所对应的值
-            $(`#log${version_name} input[name=start_line]`).val(data.StartLine)
-            $(`#log${version_name}`).prepend('
' + data.Content)
-            $(`.message${version_name} #header`).text('您已翻阅至日志顶部')
-            $(`.message${version_name}`).css('display', 'block')
-            setTimeout(function () {
-                $(`.message${version_name}`).css('display', 'none')
-            }, 1000)
-            scrollAnimation(logContentDom, logContentDom.scrollTop, 0);
-        })
-
-    })
-    $('.log_bottom').click(function (e) {
-        let version_name = $(this).data('version')
-        let logContentDom = document.querySelector(`#log${version_name}`)
-        $(`#log_file${version_name}`).siblings('pre').remove()
-        $.get(`/api/v1/repos/${userName}/${repoPath}/grampus/train-job/${jobID}/log?version_name=${version_name}&base_line=&lines=50&order=desc`, (data) => {
-
-            $(`#log${version_name} input[name=end_line]`).val(data.EndLine)   //如果变动就改变所对应的值
-            $(`#log${version_name} input[name=start_line]`).val(data.StartLine)
-            $(`#log${version_name}`).append('
' + data.Content)
-            $.get(`/api/v1/repos/${userName}/${repoPath}/grampus/train-job/${jobID}/log?version_name=${version_name}&base_line=${data.EndLine}&lines=50&order=desc`, (data) => {
-                if (data.Lines == 0) {
-                    $(`.message${version_name} #header`).text('您已翻阅至日志底部')
-                    $(`.message${version_name}`).css('display', 'block')
-                    setTimeout(function () {
-                        $(`.message${version_name}`).css('display', 'none')
-                    }, 1000)
-                } else {
-                    if (end_line === data.EndLine) {
-                        return
-                    }
-                    else {
-                        $(`#log${version_name} input[name=end_line]`).val(data.EndLine)
-                        $(`#log${version_name}`).append('
' + data.Content)
-                    }
-
-                }
-            }).fail(function (err) {
-                console.log(err);
-            });
-            scrollAnimation(logContentDom, logContentDom.scrollTop + 1, logContentDom.scrollHeight - logContentDom.clientHeight);
-        })
-    })
 
\ No newline at end of file
diff --git a/templates/repo/modelarts/inferencejob/show.tmpl b/templates/repo/modelarts/inferencejob/show.tmpl
index b5aadca95..116c464e3 100644
--- a/templates/repo/modelarts/inferencejob/show.tmpl
+++ b/templates/repo/modelarts/inferencejob/show.tmpl
@@ -183,7 +183,7 @@ td, th {
 
                     {{$.i18n.Tr "repo.modelarts.train_job.config"}}
                     {{$.i18n.Tr "repo.modelarts.log"}}
-                    {{$.i18n.Tr "repo.model_download"}}
+                    {{$.i18n.Tr "repo.model_download"}}
                 
@@ -440,7 +440,7 @@ td, th { -
+

@@ -516,241 +516,4 @@ function loadLog(version_name){
         console.log(err);
     });
 }
-function logScroll(version_name) {
-
-    let container = document.querySelector(`#log${version_name}`)
-    let scrollTop = container.scrollTop
-    let scrollHeight = container.scrollHeight
-    let clientHeight = container.clientHeight
-    let scrollLeft = container.scrollLeft
-    if((parseInt(scrollTop)  + clientHeight == scrollHeight || parseInt(scrollTop)  + clientHeight +1 == scrollHeight || parseInt(scrollTop)  + clientHeight - 1 == scrollHeight) && (scrollLeft===0)){
-        let end_line = $(`#log${version_name} input[name=end_line]`).val()
-        $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/inference-job/${jobID}/log?version_name=${version_name}&base_line=${end_line}&lines=50&order=desc`, (data) => {
-            if (data.Lines == 0){
-                $(`.message${version_name} #header`).text('您已翻阅至日志底部')
-                $(`.message${version_name}`).css('display', 'block')
-                setTimeout(function(){
-                    $(`.message${version_name}`).css('display', 'none')
-                }, 1000)
-            }else{
-                if(end_line===data.EndLine){
-                    return
-                }
-                else{
-                    $(`#log${version_name} input[name=end_line]`).val(data.EndLine)
-                    $(`#log${version_name}`).append('
' + data.Content)
-                }
-
-            }
-        }).fail(function(err) {
-            console.log(err);
-        });
-    }
-    if(scrollTop == 0 && scrollLeft==0){
-        let start_line = $(`#log${version_name} input[name=start_line]`).val()
-        $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/inference-job/${jobID}/log?version_name=${version_name}&base_line=${start_line}&lines=50&order=asc`, (data) => {
-            if (data.Lines == 0){
-                $(`.message${version_name} #header`).text('您已翻阅至日志顶部')
-                $(`.message${version_name}`).css('display', 'block')
-                setTimeout(function(){
-                    $(`.message${version_name}`).css('display', 'none')
-                }, 1000)
-            }else{
-                $(`#log${version_name} input[name=start_line]`).val(data.StartLine)   //如果变动就改变所对应的值
-                $(`#log${version_name}`).prepend('
' + data.Content)
-            }
-        }).fail(function(err) {
-            console.log(err);
-        });
-    }
-}
-function renderSize(value){
-    if(null==value||value==''){
-        return "0 Bytes";
-    }
-    var unitArr = new Array("Bytes","KB","MB","GB","TB","PB","EB","ZB","YB");
-    var index=0;
-    var srcsize = parseFloat(value);
-    index=Math.floor(Math.log(srcsize)/Math.log(1024));
-    var size =srcsize/Math.pow(1024,index);
-    size=size.toFixed(0);//保留的小数位数
-    return size+unitArr[index];
-}
-function loadModelFile(version_name,parents,filename,init){
-    parents = parents || ''
-    filename = filename || ''
-    init = init || ''
-    $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/inference-job/${jobID}/result_list?version_name=${version_name}&parentDir=${parents}`, (data) => {
-            $(`#dir_list${version_name}`).empty()
-            renderDir(data,version_name)
-            if(init==="init"){
-                $(`input[name=model${version_name}]`).val("")
-                $(`input[name=modelback${version_name}]`).val(version_name)
-                $(`#file_breadcrumb${version_name}`).empty()
-                let htmlBread = ""
-                htmlBread += `
result
` - htmlBread += "
/
" - $(`#file_breadcrumb${version_name}`).append(htmlBread) - }else{ - renderBrend(version_name,parents,filename,init) - } - }).fail(function(err) { - console.log(err,version_name); - }); - -} -function renderBrend(version_name,parents,filename,init){ - if(init=="folder"){ - let htmlBrend = "" - let sectionName=$(`#file_breadcrumb${version_name} .active.section`).text() - let parents1 = $(`input[name=model${version_name}]`).val() - let filename1 = $(`input[name=modelback${version_name}]`).val() - if(parents1===""){ - $(`#file_breadcrumb${version_name} .active.section`).replaceWith(`${sectionName}`) - }else{ - $(`#file_breadcrumb${version_name} .active.section`).replaceWith(`${sectionName}`) - } - - htmlBrend += `
${filename}
` - htmlBrend += "
/
" - $(`#file_breadcrumb${version_name}`).append(htmlBrend) - $(`input[name=model${version_name}]`).val(parents) - $(`input[name=modelback${version_name}]`).val(filename) - }else{ - $(`input[name=model${version_name}]`).val(parents) - $(`input[name=modelback${version_name}]`).val(filename) - $(`#file_breadcrumb${version_name} a.section:contains(${filename})`).nextAll().remove() - $(`#file_breadcrumb${version_name} a.section:contains(${filename})`).replaceWith(`
${filename}
`) - $(`#file_breadcrumb${version_name} div.section:contains(${filename})`).append("
/
") - } - -} -function renderDir(data,version_name){ - let html="" - html += "
" - html += "
" - html += "
" - html += "
" - html += "" - html += '' - // html += "" - for(let i=0;i` - html += "" + data.Dirs[i].FileName + "" - }else{ - if(downlaodFlag){ - html += `` - } - else{ - html += `` - } - html += "" + data.Dirs[i].FileName + "" - } - html += '' - html += "" - html += "" - html += "" - - html += "" - html += "" - - } - html += "" - html += "
" - if(data.Dirs[i].IsDir){ - html += "" - }else{ - html += ""+ `${dirs_size}` + "" - } - - html += "" - html += "" + data.Dirs[i].ModTime + "" - html += "
" - html += "
" - html += "
" - html += "
" - html += "
" - $(`#dir_list${version_name}`).append(html) -} -function scrollAnimation(dom, currentY, targetY, currentX) { - let needScrollTop = targetY - currentY; - let _currentY = currentY; - setTimeout(() => { - // 一次调用滑动帧数,每次调用会不一样 - //取总距离的十分之一 - const dist = Math.ceil(needScrollTop / 10); - _currentY += dist; - //移动一个十分之一 - dom.scrollTo(currentX || 0, _currentY, 'smooth'); - // 如果移动幅度小于十个像素,直接移动,否则递归调用,实现动画效果 - if (needScrollTop > 10 || needScrollTop < -10) { - scrollAnimation(dom, _currentY, targetY) - } else { - dom.scrollTo(0, targetY, 'smooth') - } - }, 1) - } - - $('.log_top').click(function () { - // let logContentDom = document.querySelector('.log') - // if(!logContentDom) - // return - // let version_name = $('.log_top').data('version') - let version_name = $(this).data('version') - let logContentDom = document.querySelector(`#log${version_name}`) - - $(`#log_file${version_name}`).siblings('pre').remove() - $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=&lines=50&order=asc`, (data) => { - - $(`#log${version_name} input[name=end_line]`).val(data.EndLine) //如果变动就改变所对应的值 - $(`#log${version_name} input[name=start_line]`).val(data.StartLine) - $(`#log${version_name}`).prepend('
' + data.Content)
-            $(`.message${version_name} #header`).text('您已翻阅至日志顶部')
-            $(`.message${version_name}`).css('display', 'block')
-            setTimeout(function () {
-                $(`.message${version_name}`).css('display', 'none')
-            }, 1000)
-            scrollAnimation(logContentDom, logContentDom.scrollTop, 0);
-        })
-
-    })
-    $('.log_bottom').click(function (e) {
-        let version_name = $(this).data('version')
-        let logContentDom = document.querySelector(`#log${version_name}`)
-        $(`#log_file${version_name}`).siblings('pre').remove()
-        $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=&lines=50&order=desc`, (data) => {
-
-            $(`#log${version_name} input[name=end_line]`).val(data.EndLine)   //如果变动就改变所对应的值
-            $(`#log${version_name} input[name=start_line]`).val(data.StartLine)
-            $(`#log${version_name}`).append('
' + data.Content)
-            $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${data.EndLine}&lines=50&order=desc`, (data) => {
-                if (data.Lines == 0) {
-                    $(`.message${version_name} #header`).text('您已翻阅至日志底部')
-                    $(`.message${version_name}`).css('display', 'block')
-                    setTimeout(function () {
-                        $(`.message${version_name}`).css('display', 'none')
-                    }, 1000)
-                } else {
-                    if (end_line === data.EndLine) {
-                        return
-                    }
-                    else {
-                        $(`#log${version_name} input[name=end_line]`).val(data.EndLine)
-                        $(`#log${version_name}`).append('
' + data.Content)
-                    }
-
-                }
-            }).fail(function (err) {
-                console.log(err);
-            });
-            scrollAnimation(logContentDom, logContentDom.scrollTop + 1, logContentDom.scrollHeight - logContentDom.clientHeight);
-        })
-    })
 
diff --git a/templates/repo/modelarts/trainjob/show.tmpl b/templates/repo/modelarts/trainjob/show.tmpl
index 615fc3030..cd8fc88de 100755
--- a/templates/repo/modelarts/trainjob/show.tmpl
+++ b/templates/repo/modelarts/trainjob/show.tmpl
@@ -313,8 +313,7 @@
                         {{$.i18n.Tr "repo.modelarts.log"}}
                         资源占用情况
-                        {{$.i18n.Tr "repo.model_download"}}
+                        {{$.i18n.Tr "repo.model_download"}}
                     
@@ -509,7 +508,7 @@ -
@@ -727,18 +726,6 @@ $('#name').val(modelName) $('#version').val("0.0.1") } - function renderSize(value) { - if (null == value || value == '') { - return "0 Bytes"; - } - var unitArr = new Array("Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"); - var index = 0; - var srcsize = parseFloat(value); - index = Math.floor(Math.log(srcsize) / Math.log(1024)); - var size = srcsize / Math.pow(1024, index); - size = size.toFixed(0);//保留的小数位数 - return size + unitArr[index]; - } function refreshStatus(version_name) { $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}?version_name=${version_name}`, (data) => { // header status and duration @@ -811,243 +798,5 @@ console.log(err); }); } - function loadModelFile(version_name, parents, filename, init) { - parents = parents || '' - filename = filename || '' - init = init || '' - $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/model_list?version_name=${version_name}&parentDir=${parents}`, (data) => { - $(`#dir_list${version_name}`).empty() - renderDir(data, version_name) - if (init === "init") { - $(`input[name=model${version_name}]`).val("") - $(`input[name=modelback${version_name}]`).val(version_name) - $(`#file_breadcrumb${version_name}`).empty() - let htmlBread = "" - htmlBread += `
${version_name}
` - htmlBread += "
/
" - $(`#file_breadcrumb${version_name}`).append(htmlBread) - } else { - renderBrend(version_name, parents, filename, init) - } - }).fail(function (err) { - console.log(err, version_name); - }); - - } - function renderBrend(version_name, parents, filename, init) { - if (init == "folder") { - let htmlBrend = "" - let sectionName = $(`#file_breadcrumb${version_name} .active.section`).text() - let parents1 = $(`input[name=model${version_name}]`).val() - let filename1 = $(`input[name=modelback${version_name}]`).val() - if (parents1 === "") { - $(`#file_breadcrumb${version_name} .active.section`).replaceWith(`${sectionName}`) - } else { - $(`#file_breadcrumb${version_name} .active.section`).replaceWith(`${sectionName}`) - } - - htmlBrend += `
${filename}
` - htmlBrend += "
/
" - $(`#file_breadcrumb${version_name}`).append(htmlBrend) - $(`input[name=model${version_name}]`).val(parents) - $(`input[name=modelback${version_name}]`).val(filename) - } else { - $(`input[name=model${version_name}]`).val(parents) - $(`input[name=modelback${version_name}]`).val(filename) - $(`#file_breadcrumb${version_name} a.section:contains(${filename})`).nextAll().remove() - $(`#file_breadcrumb${version_name} a.section:contains(${filename})`).replaceWith(`
${filename}
`) - $(`#file_breadcrumb${version_name} div.section:contains(${filename})`).append("
/
") - } - - } - function renderDir(data, version_name) { - let html = "" - html += "
" - html += "
" - html += "
" - html += "
" - html += "" - html += '' - // html += "" - for (let i = 0; i < data.Dirs.length; i++) { - let dirs_size = renderSize(data.Dirs[i].Size) - html += "" - html += "" - html += "" - - html += "" - html += "" - - } - html += "" - html += "
" - html += "" - html += "" - html += "" - if (data.Dirs[i].IsDir) { - html += `` - html += "" + data.Dirs[i].FileName + "" - } else { - if (downlaodFlag) { - html += `` - } - else { - html += `` - } - html += "" + data.Dirs[i].FileName + "" - } - html += '' - html += "" - html += "" - if (data.Dirs[i].IsDir) { - html += "" - } else { - html += "" + `${dirs_size}` + "" - } - - html += "" - html += "" + data.Dirs[i].ModTime + "" - html += "
" - html += "
" - html += "
" - html += "
" - html += "
" - $(`#dir_list${version_name}`).append(html) - } - function debounce(fn, delay) { - let timer; - return (...args) => { - // 判断定时器是否存在,清除定时器 - if (timer) { - clearTimeout(timer); - } - - // 重新调用setTimeout - timer = setTimeout(() => { - fn.apply(this, args); - }, delay); - }; - } - const fn = debounce(logScroll, 500) - function logScroll(version_name) { - let container = document.querySelector(`#log${version_name}`) - let scrollTop = container.scrollTop - let scrollHeight = container.scrollHeight - let clientHeight = container.clientHeight - let scrollLeft = container.scrollLeft - if (((parseInt(scrollTop) + clientHeight == scrollHeight || parseInt(scrollTop) + clientHeight + 1 == scrollHeight || parseInt(scrollTop) + clientHeight - 1 == scrollHeight)) && parseInt(scrollTop) !== 0 && scrollLeft == 0) { - let end_line = $(`#log${version_name} input[name=end_line]`).val() - $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${end_line}&lines=50&order=desc`, (data) => { - if (data.Lines == 0) { - $(`.message${version_name} #header`).text('您已翻阅至日志底部') - $(`.message${version_name}`).css('display', 'block') - setTimeout(function () { - $(`.message${version_name}`).css('display', 'none') - }, 1000) - } else { - if (end_line === data.EndLine) { - return - } - else { - $(`#log${version_name} input[name=end_line]`).val(data.EndLine) - $(`#log${version_name}`).append('
' + data.Content)
-                    }
-
-                }
-            }).fail(function (err) {
-                console.log(err);
-            });
-        }
-        if ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10].includes(scrollTop) && scrollLeft == 0) {
-            let start_line = $(`#log${version_name} input[name=start_line]`).val()
-            $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${start_line}&lines=50&order=asc`, (data) => {
-                if (data.Lines == 0) {
-                    $(`.message${version_name} #header`).text('您已翻阅至日志顶部')
-                    $(`.message${version_name}`).css('display', 'block')
-                    setTimeout(function () {
-                        $(`.message${version_name}`).css('display', 'none')
-                    }, 1000)
-                } else {
-                    $(`#log${version_name} input[name=start_line]`).val(data.StartLine)   //如果变动就改变所对应的值
-                    $(`#log${version_name}`).prepend('
' + data.Content)
-                }
-            }).fail(function (err) {
-                console.log(err);
-            });
-        }
-    }
-    function scrollAnimation(dom, currentY, targetY, currentX) {
-        let needScrollTop = targetY - currentY;
-        let _currentY = currentY;
-        setTimeout(() => {
-            // 一次调用滑动帧数,每次调用会不一样
-            //取总距离的十分之一
-            const dist = Math.ceil(needScrollTop / 10);
-            _currentY += dist;
-            //移动一个十分之一
-            dom.scrollTo(currentX || 0, _currentY, 'smooth');
-            // 如果移动幅度小于十个像素,直接移动,否则递归调用,实现动画效果
-            if (needScrollTop > 10 || needScrollTop < -10) {
-                scrollAnimation(dom, _currentY, targetY)
-            } else {
-                dom.scrollTo(0, targetY, 'smooth')
-            }
-        }, 1)
-    }
-
-    $('.log_top').click(function () {
-        // let logContentDom = document.querySelector('.log')
-        // if(!logContentDom)
-        //     return
-        // let version_name = $('.log_top').data('version')
-        let version_name = $(this).data('version')
-        let logContentDom = document.querySelector(`#log${version_name}`)
-
-        $(`#log_file${version_name}`).siblings('pre').remove()
-        $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=&lines=50&order=asc`, (data) => {
-
-            $(`#log${version_name} input[name=end_line]`).val(data.EndLine)   //如果变动就改变所对应的值
-            $(`#log${version_name} input[name=start_line]`).val(data.StartLine)
-            $(`#log${version_name}`).prepend('
' + data.Content)
-            $(`.message${version_name} #header`).text('您已翻阅至日志顶部')
-            $(`.message${version_name}`).css('display', 'block')
-            setTimeout(function () {
-                $(`.message${version_name}`).css('display', 'none')
-            }, 1000)
-            scrollAnimation(logContentDom, logContentDom.scrollTop, 0);
-        })
-
-    })
-    $('.log_bottom').click(function (e) {
-        let version_name = $(this).data('version')
-        let logContentDom = document.querySelector(`#log${version_name}`)
-        $(`#log_file${version_name}`).siblings('pre').remove()
-        $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=&lines=50&order=desc`, (data) => {
-
-            $(`#log${version_name} input[name=end_line]`).val(data.EndLine)   //如果变动就改变所对应的值
-            $(`#log${version_name} input[name=start_line]`).val(data.StartLine)
-            $(`#log${version_name}`).append('
' + data.Content)
-            $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${data.EndLine}&lines=50&order=desc`, (data) => {
-                if (data.Lines == 0) {
-                    $(`.message${version_name} #header`).text('您已翻阅至日志底部')
-                    $(`.message${version_name}`).css('display', 'block')
-                    setTimeout(function () {
-                        $(`.message${version_name}`).css('display', 'none')
-                    }, 1000)
-                } else {
-                    if (end_line === data.EndLine) {
-                        return
-                    }
-                    else {
-                        $(`#log${version_name} input[name=end_line]`).val(data.EndLine)
-                        $(`#log${version_name}`).append('
' + data.Content)
-                    }
-
-                }
-            }).fail(function (err) {
-                console.log(err);
-            });
-            scrollAnimation(logContentDom, logContentDom.scrollTop + 1, logContentDom.scrollHeight - logContentDom.clientHeight);
-        })
-    })
+    
 
\ No newline at end of file
diff --git a/web_src/js/features/cloudbrainShow.js b/web_src/js/features/cloudbrainShow.js
new file mode 100644
index 000000000..864ea345f
--- /dev/null
+++ b/web_src/js/features/cloudbrainShow.js
@@ -0,0 +1,309 @@
+export default async function initCloudrainSow() {
+  function debounce(fn, delay) {
+    let timer;
+    return (...args) => {
+      // 判断定时器是否存在,清除定时器
+      if (timer) {
+        clearTimeout(timer);
+      }
+
+      // 重新调用setTimeout
+      timer = setTimeout(() => {
+        fn.apply(this, args);
+      }, delay);
+    };
+  }
+
+  function logScroll(version_name) {
+    let container = document.querySelector(`#log${version_name}`);
+    let scrollTop = container.scrollTop;
+    let scrollHeight = container.scrollHeight;
+    let clientHeight = container.clientHeight;
+    let scrollLeft = container.scrollLeft;
+    if (
+      (parseInt(scrollTop) + clientHeight == scrollHeight ||
+        parseInt(scrollTop) + clientHeight + 1 == scrollHeight ||
+        parseInt(scrollTop) + clientHeight - 1 == scrollHeight) &&
+      scrollLeft === 0
+    ) {
+      let end_line = $(`#log${version_name} input[name=end_line]`).val();
+      $.get(
+        `/api/v1/repos/${userName}/${repoPath}/modelarts/inference-job/${jobID}/log?version_name=${version_name}&base_line=${end_line}&lines=50&order=desc`,
+        (data) => {
+          if (data.Lines == 0) {
+            $(`.message${version_name} #header`).text("您已翻阅至日志底部");
+            $(`.message${version_name}`).css("display", "block");
+            setTimeout(function () {
+              $(`.message${version_name}`).css("display", "none");
+            }, 1000);
+          } else {
+            if (end_line === data.EndLine) {
+              return;
+            } else {
+              $(`#log${version_name} input[name=end_line]`).val(data.EndLine);
+              $(`#log${version_name}`).append("
" + data.Content);
+            }
+          }
+        }
+      ).fail(function (err) {
+        console.log(err);
+      });
+    }
+    if (scrollTop == 0 && scrollLeft == 0) {
+      let start_line = $(`#log${version_name} input[name=start_line]`).val();
+      $.get(
+        `/api/v1/repos/${userName}/${repoPath}/modelarts/inference-job/${jobID}/log?version_name=${version_name}&base_line=${start_line}&lines=50&order=asc`,
+        (data) => {
+          if (data.Lines == 0) {
+            $(`.message${version_name} #header`).text("您已翻阅至日志顶部");
+            $(`.message${version_name}`).css("display", "block");
+            setTimeout(function () {
+              $(`.message${version_name}`).css("display", "none");
+            }, 1000);
+          } else {
+            $(`#log${version_name} input[name=start_line]`).val(data.StartLine); //如果变动就改变所对应的值
+            $(`#log${version_name}`).prepend("
" + data.Content);
+          }
+        }
+      ).fail(function (err) {
+        console.log(err);
+      });
+    }
+  }
+  const fn = debounce(logScroll, 500);
+  $(".log-scroll").scroll(function () {
+    let version_name = $(this).data("version");
+    fn(version_name);
+  });
+  function scrollAnimation(dom, currentY, targetY, currentX) {
+    let needScrollTop = targetY - currentY;
+    let _currentY = currentY;
+    setTimeout(() => {
+      // 一次调用滑动帧数,每次调用会不一样
+      //取总距离的十分之一
+      const dist = Math.ceil(needScrollTop / 10);
+      _currentY += dist;
+      //移动一个十分之一
+      dom.scrollTo(currentX || 0, _currentY, "smooth");
+      // 如果移动幅度小于十个像素,直接移动,否则递归调用,实现动画效果
+      if (needScrollTop > 10 || needScrollTop < -10) {
+        scrollAnimation(dom, _currentY, targetY);
+      } else {
+        dom.scrollTo(0, targetY, "smooth");
+      }
+    }, 1);
+  }
+
+  $(".log_top").click(function () {
+    // let logContentDom = document.querySelector('.log')
+    // if(!logContentDom)
+    //     return
+    // let version_name = $('.log_top').data('version')
+    let version_name = $(this).data("version");
+    let logContentDom = document.querySelector(`#log${version_name}`);
+
+    $(`#log_file${version_name}`).siblings("pre").remove();
+    $.get(
+      `/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=&lines=50&order=asc`,
+      (data) => {
+        $(`#log${version_name} input[name=end_line]`).val(data.EndLine); //如果变动就改变所对应的值
+        $(`#log${version_name} input[name=start_line]`).val(data.StartLine);
+        $(`#log${version_name}`).prepend("
" + data.Content);
+        $(`.message${version_name} #header`).text("您已翻阅至日志顶部");
+        $(`.message${version_name}`).css("display", "block");
+        setTimeout(function () {
+          $(`.message${version_name}`).css("display", "none");
+        }, 1000);
+        scrollAnimation(logContentDom, logContentDom.scrollTop, 0);
+      }
+    );
+  });
+  $(".log_bottom").click(function (e) {
+    let version_name = $(this).data("version");
+    let logContentDom = document.querySelector(`#log${version_name}`);
+    $(`#log_file${version_name}`).siblings("pre").remove();
+    $.get(
+      `/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=&lines=50&order=desc`,
+      (data) => {
+        $(`#log${version_name} input[name=end_line]`).val(data.EndLine); //如果变动就改变所对应的值
+        $(`#log${version_name} input[name=start_line]`).val(data.StartLine);
+        $(`#log${version_name}`).append("
" + data.Content);
+        $.get(
+          `/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${data.EndLine}&lines=50&order=desc`,
+          (data) => {
+            if (data.Lines == 0) {
+              $(`.message${version_name} #header`).text("您已翻阅至日志底部");
+              $(`.message${version_name}`).css("display", "block");
+              setTimeout(function () {
+                $(`.message${version_name}`).css("display", "none");
+              }, 1000);
+            } else {
+              if (end_line === data.EndLine) {
+                return;
+              } else {
+                $(`#log${version_name} input[name=end_line]`).val(data.EndLine);
+                $(`#log${version_name}`).append("
" + data.Content);
+              }
+            }
+          }
+        ).fail(function (err) {
+          console.log(err);
+        });
+        scrollAnimation(
+          logContentDom,
+          logContentDom.scrollTop + 1,
+          logContentDom.scrollHeight - logContentDom.clientHeight
+        );
+      }
+    );
+  });
+
+  //
+  $(".content-pad").on("click", ".load-model-file", function () {
+    console.log("11111111111");
+    let version_name = $(this).data("version");
+    let parents = $(this).data("parents") || "";
+    let filename = $(this).data("filename") || "";
+    let init = $(this).data("init") || "";
+    let path = $(this).data("path");
+    let url = `/api/v1/repos${path}?version_name=${version_name}&parentDir=${parents}`;
+    console.log(url);
+    $.get(url, (data) => {
+      $(`#dir_list${version_name}`).empty();
+      renderDir(path, data, version_name);
+      if (init === "init") {
+        $(`input[name=model${version_name}]`).val("");
+        $(`input[name=modelback${version_name}]`).val(version_name);
+        $(`#file_breadcrumb${version_name}`).empty();
+        let htmlBread = "";
+        htmlBread += `
${version_name}
`; + htmlBread += "
/
"; + $(`#file_breadcrumb${version_name}`).append(htmlBread); + } else { + renderBrend(path, version_name, parents, filename, init); + } + }).fail(function (err) { + console.log(err, version_name); + }); + }); + function renderSize(value) { + if (null == value || value == "") { + return "0 Bytes"; + } + var unitArr = new Array( + "Bytes", + "KB", + "MB", + "GB", + "TB", + "PB", + "EB", + "ZB", + "YB" + ); + var index = 0; + var srcsize = parseFloat(value); + index = Math.floor(Math.log(srcsize) / Math.log(1024)); + var size = srcsize / Math.pow(1024, index); + size = size.toFixed(0); //保留的小数位数 + return size + unitArr[index]; + } + function renderBrend(path, version_name, parents, filename, init) { + if (init == "folder") { + let htmlBrend = ""; + let sectionName = $( + `#file_breadcrumb${version_name} .active.section` + ).text(); + let parents1 = $(`input[name=model${version_name}]`).val(); + let filename1 = $(`input[name=modelback${version_name}]`).val(); + if (parents1 === "") { + $(`#file_breadcrumb${version_name} .active.section`).replaceWith( + `${sectionName}` + ); + } else { + $(`#file_breadcrumb${version_name} .active.section`).replaceWith( + `${sectionName}` + ); + } + + htmlBrend += `
${filename}
`; + htmlBrend += "
/
"; + $(`#file_breadcrumb${version_name}`).append(htmlBrend); + $(`input[name=model${version_name}]`).val(parents); + $(`input[name=modelback${version_name}]`).val(filename); + } else { + $(`input[name=model${version_name}]`).val(parents); + $(`input[name=modelback${version_name}]`).val(filename); + $(`#file_breadcrumb${version_name} a.section:contains(${filename})`) + .nextAll() + .remove(); + $( + `#file_breadcrumb${version_name} a.section:contains(${filename})` + ).replaceWith(`
${filename}
`); + $( + `#file_breadcrumb${version_name} div.section:contains(${filename})` + ).append("
/
"); + } + } + + function renderDir(path, data, version_name) { + let html = ""; + html += "
"; + html += "
"; + html += "
"; + html += "
"; + html += ""; + html += ""; + // html += "" + for (let i = 0; i < data.Dirs.length; i++) { + let dirs_size = renderSize(data.Dirs[i].Size); + html += ""; + html += ""; + html += ""; + + html += ""; + html += ""; + } + html += ""; + html += "
"; + html += ""; + html += ""; + html += ""; + if (data.Dirs[i].IsDir) { + html += ``; + html += + "" + + data.Dirs[i].FileName + + ""; + } else { + if (downlaodFlag) { + html += ``; + } else { + html += ``; + } + html += + "" + + data.Dirs[i].FileName + + ""; + } + html += ""; + html += ""; + html += ""; + if (data.Dirs[i].IsDir) { + html += ""; + } else { + html += + "" + `${dirs_size}` + ""; + } + + html += ""; + html += + "" + data.Dirs[i].ModTime + ""; + html += "
"; + html += "
"; + html += "
"; + html += "
"; + html += "
"; + $(`#dir_list${version_name}`).append(html); + } +} diff --git a/web_src/js/index.js b/web_src/js/index.js index 754d6ca76..53dba8a88 100755 --- a/web_src/js/index.js +++ b/web_src/js/index.js @@ -43,6 +43,7 @@ import Contributors from "./components/Contributors.vue"; import Model from "./components/Model.vue"; import WxAutorize from "./components/WxAutorize.vue"; import initCloudrain from "./features/cloudrbanin.js"; +import initCloudrainSow from "./features/cloudbrainShow.js"; import initImage from "./features/images.js"; import selectDataset from "./components/dataset/selectDataset.vue"; // import $ from 'jquery.js' @@ -2917,6 +2918,7 @@ $(document).ready(async () => { initTribute(); initDropDown(); initCloudrain(); + initCloudrainSow(); initImage(); initContextMenu(); @@ -3711,9 +3713,9 @@ function initVueDataset() { if (!el) { return; } - let link = $('#square-link').data('link') - let repolink = $('.dataset-repolink').data('repolink') - let datasetType = $('.dataset-repolink').data('dataset-type') + let link = $("#square-link").data("link"); + let repolink = $(".dataset-repolink").data("repolink"); + let datasetType = $(".dataset-repolink").data("dataset-type"); const clearBtn = document.getElementsByClassName("clear_dataset_value"); const params = new URLSearchParams(location.search); for (let i = 0; i < clearBtn.length; i++) { @@ -3873,10 +3875,10 @@ function initVueDataset() { mounted() { this.getTypeList(); - if (!!document.getElementById('dataset-repolink-init')) { + if (!!document.getElementById("dataset-repolink-init")) { // this.datasetType = location.href.indexOf('cloudbrain') !== -1 ? 0 : 1 - this.datasetType = $('#dataset-repolink-init').data("dataset-type") - this.getCurrentRepoDataset(this.repolink, this.datasetType) + this.datasetType = $("#dataset-repolink-init").data("dataset-type"); + this.getCurrentRepoDataset(this.repolink, this.datasetType); } const params = new URLSearchParams(location.search); @@ -3897,13 +3899,13 @@ function initVueDataset() { this.ruleForm1 = ruleForm; // this.getEditInit() - this.starItems = starItems - this.starActives = starActives - this.taskLists = taskLists - this.licenseLists = licenseLists - this.descfile = dataset_file_desc - this.repolink = repolink - this.datasetType = datasetType + this.starItems = starItems; + this.starActives = starActives; + this.taskLists = taskLists; + this.licenseLists = licenseLists; + this.descfile = dataset_file_desc; + this.repolink = repolink; + this.datasetType = datasetType; }, methods: { copyUrl(url) { @@ -3924,18 +3926,18 @@ function initVueDataset() { handleCurrentChange(val) { this.page = val; switch (this.activeName) { - case 'first': - this.getCurrentRepoDataset(this.repolink, this.datasetType) - break - case 'second': - this.getMyDataset(this.repolink, this.datasetType) - break - case 'third': - this.getPublicDataset(this.repolink, this.datasetType) - break - case 'fourth': - this.getStarDataset(this.repolink, this.datasetType) - break + case "first": + this.getCurrentRepoDataset(this.repolink, this.datasetType); + break; + case "second": + this.getMyDataset(this.repolink, this.datasetType); + break; + case "third": + this.getPublicDataset(this.repolink, this.datasetType); + break; + case "fourth": + this.getStarDataset(this.repolink, this.datasetType); + break; } }, handleCheckedChange(val) { @@ -4276,18 +4278,18 @@ function initVueDataset() { }, refreshStatusDataset() { switch (this.activeName) { - case 'first': - this.getCurrentRepoDataset(this.repolink, this.datasetType) - break - case 'second': - this.getMyDataset(this.repolink, this.datasetType) - break - case 'third': - this.getPublicDataset(this.repolink, this.datasetType) - break - case 'fourth': - this.getStarDataset(this.repolink, this.datasetType) - break + case "first": + this.getCurrentRepoDataset(this.repolink, this.datasetType); + break; + case "second": + this.getMyDataset(this.repolink, this.datasetType); + break; + case "third": + this.getPublicDataset(this.repolink, this.datasetType); + break; + case "fourth": + this.getStarDataset(this.repolink, this.datasetType); + break; } }, getCurrentRepoDataset(repoLink, type) { @@ -4398,44 +4400,44 @@ function initVueDataset() { }, searchDataset() { switch (this.activeName) { - case 'first': - this.page = 1 - this.getCurrentRepoDataset(this.repolink, this.datasetType) - break - case 'second': - this.page = 1 - this.getMyDataset(this.repolink, this.datasetType) - break - case 'third': - this.page = 1 - this.getPublicDataset(this.repolink, this.datasetType) - break - case 'fourth': - this.page = 1 - this.getStarDataset(this.repolink, this.datasetType) - break + case "first": + this.page = 1; + this.getCurrentRepoDataset(this.repolink, this.datasetType); + break; + case "second": + this.page = 1; + this.getMyDataset(this.repolink, this.datasetType); + break; + case "third": + this.page = 1; + this.getPublicDataset(this.repolink, this.datasetType); + break; + case "fourth": + this.page = 1; + this.getStarDataset(this.repolink, this.datasetType); + break; } }, }, watch: { searchDataItem() { switch (this.activeName) { - case 'first': - this.page = 1 - this.getCurrentRepoDataset(this.repolink, this.datasetType) - break - case 'second': - this.page = 1 - this.getMyDataset(this.repolink, this.datasetType) - break - case 'third': - this.page = 1 - this.getPublicDataset(this.repolink, this.datasetType) - break - case 'fourth': - this.page = 1 - this.getStarDataset(this.repolink, this.datasetType) - break + case "first": + this.page = 1; + this.getCurrentRepoDataset(this.repolink, this.datasetType); + break; + case "second": + this.page = 1; + this.getMyDataset(this.repolink, this.datasetType); + break; + case "third": + this.page = 1; + this.getPublicDataset(this.repolink, this.datasetType); + break; + case "fourth": + this.page = 1; + this.getStarDataset(this.repolink, this.datasetType); + break; } }, }, From 000cde79e54abc26a4aa5cb23e57f59746c870d3 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Mon, 11 Jul 2022 15:59:53 +0800 Subject: [PATCH 39/75] fix issue --- templates/repo/cloudbrain/inference/show.tmpl | 2 +- templates/repo/cloudbrain/trainjob/show.tmpl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/repo/cloudbrain/inference/show.tmpl b/templates/repo/cloudbrain/inference/show.tmpl index b02c9694b..380a59d16 100644 --- a/templates/repo/cloudbrain/inference/show.tmpl +++ b/templates/repo/cloudbrain/inference/show.tmpl @@ -492,7 +492,7 @@ diff --git a/templates/repo/cloudbrain/trainjob/show.tmpl b/templates/repo/cloudbrain/trainjob/show.tmpl index 3f66de0a3..ede7f322d 100644 --- a/templates/repo/cloudbrain/trainjob/show.tmpl +++ b/templates/repo/cloudbrain/trainjob/show.tmpl @@ -466,7 +466,7 @@ From 574a02c16123452d8aec81bbcf028ea20f41a855 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Mon, 11 Jul 2022 16:22:35 +0800 Subject: [PATCH 40/75] fix issue --- web_src/js/features/cloudbrainShow.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_src/js/features/cloudbrainShow.js b/web_src/js/features/cloudbrainShow.js index 864ea345f..3e556280f 100644 --- a/web_src/js/features/cloudbrainShow.js +++ b/web_src/js/features/cloudbrainShow.js @@ -161,7 +161,7 @@ export default async function initCloudrainSow() { // $(".content-pad").on("click", ".load-model-file", function () { console.log("11111111111"); - let version_name = $(this).data("version"); + let version_name = $(this).data("version") || "result"; let parents = $(this).data("parents") || ""; let filename = $(this).data("filename") || ""; let init = $(this).data("init") || ""; From 7f1cffd7f1a9e3c118eebc3bc33cc028abf07168 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Mon, 11 Jul 2022 16:54:18 +0800 Subject: [PATCH 41/75] fix issue --- templates/custom/wait_count_train.tmpl | 20 ++++++++++++++++---- web_src/js/features/cloudbrainShow.js | 8 ++++++-- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/templates/custom/wait_count_train.tmpl b/templates/custom/wait_count_train.tmpl index 085fa173f..661eb268d 100644 --- a/templates/custom/wait_count_train.tmpl +++ b/templates/custom/wait_count_train.tmpl @@ -1,4 +1,16 @@ -
- - {{.i18n.Tr "repo.wait_count_start"}}{{.WaitCount}}{{.i18n.Tr "repo.wait_count_end"}} -
\ No newline at end of file +
+ + {{.QueuesDetail}} + {{.i18n.Tr "repo.wait_count_start"}} + {{if .QueuesDetail}} + {{.QueuesDetail.a100}} + {{else}} + {{.WaitCount}} + {{ end }} + {{.i18n.Tr "repo.wait_count_end"}} +
diff --git a/web_src/js/features/cloudbrainShow.js b/web_src/js/features/cloudbrainShow.js index 3e556280f..b0f6f0ad7 100644 --- a/web_src/js/features/cloudbrainShow.js +++ b/web_src/js/features/cloudbrainShow.js @@ -161,7 +161,7 @@ export default async function initCloudrainSow() { // $(".content-pad").on("click", ".load-model-file", function () { console.log("11111111111"); - let version_name = $(this).data("version") || "result"; + let version_name = $(this).data("version"); let parents = $(this).data("parents") || ""; let filename = $(this).data("filename") || ""; let init = $(this).data("init") || ""; @@ -176,7 +176,11 @@ export default async function initCloudrainSow() { $(`input[name=modelback${version_name}]`).val(version_name); $(`#file_breadcrumb${version_name}`).empty(); let htmlBread = ""; - htmlBread += `
${version_name}
`; + if (version_name) { + htmlBread += `
${version_name}
`; + } else { + htmlBread += `
result
`; + } htmlBread += "
/
"; $(`#file_breadcrumb${version_name}`).append(htmlBread); } else { From da640b58d5c022cfe2720232b3ee69eeaff3c41a Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Tue, 12 Jul 2022 15:07:32 +0800 Subject: [PATCH 42/75] fix issue --- templates/custom/wait_count.tmpl | 28 +++++++++++++++++++-- templates/custom/wait_count_train.tmpl | 16 ++++++++++-- templates/repo/cloudbrain/inference/new.tmpl | 3 ++- templates/repo/cloudbrain/inference/show.tmpl | 2 +- templates/repo/cloudbrain/new.tmpl | 35 ++++++++++++++++++++++----- templates/repo/cloudbrain/trainjob/new.tmpl | 4 +-- web_src/js/features/cloudrbanin.js | 35 +++++++++++++++++++++++++++ 7 files changed, 109 insertions(+), 14 deletions(-) diff --git a/templates/custom/wait_count.tmpl b/templates/custom/wait_count.tmpl index a70dfc5f5..77c49712d 100644 --- a/templates/custom/wait_count.tmpl +++ b/templates/custom/wait_count.tmpl @@ -1,4 +1,28 @@
- - {{.i18n.Tr "repo.wait_count_start"}}{{.WaitCount}}{{.i18n.Tr "repo.wait_count_end"}} + {{$queue := ""}} + {{$gpuQueue := 0}} + {{range $k,$v :=.gpu_types}} + {{if eq $k 0}} + {{ $queue := $v.Queue }} + {{ end }} + {{ end }} + + {{ range $k,$v :=.QueuesDetail }} + {{if eq $k $queue}} + {{$gpuQueue :=$v}} + {{ end }} + {{ end }} + + {{.i18n.Tr "repo.wait_count_start"}} + {{if .QueuesDetail}} + {{ $gpuQueue }} + {{else}} + {{.WaitCount}} + {{ end }} + {{.i18n.Tr "repo.wait_count_end"}}
diff --git a/templates/custom/wait_count_train.tmpl b/templates/custom/wait_count_train.tmpl index 661eb268d..ef6c4ed61 100644 --- a/templates/custom/wait_count_train.tmpl +++ b/templates/custom/wait_count_train.tmpl @@ -1,13 +1,25 @@
+ {{$queue := ""}} + {{$gpuQueue := 0}} + {{range $k,$v :=.gpu_types}} + {{if eq $k 0}} + {{ $queue := $v.Queue }} + {{ end }} + {{ end }} + + {{ range $k,$v :=.QueuesDetail }} + {{if eq $k $queue}} + {{$gpuQueue :=$v}} + {{ end }} + {{ end }} - {{.QueuesDetail}} {{.i18n.Tr "repo.wait_count_start"}} {{if .QueuesDetail}} - {{.QueuesDetail.a100}} + {{ $gpuQueue }} {{else}} {{.WaitCount}} {{ end }} diff --git a/templates/repo/cloudbrain/inference/new.tmpl b/templates/repo/cloudbrain/inference/new.tmpl index 3fd614f59..20a52db34 100644 --- a/templates/repo/cloudbrain/inference/new.tmpl +++ b/templates/repo/cloudbrain/inference/new.tmpl @@ -49,6 +49,7 @@ {{template "repo/header" .}}
{{template "base/alert" .}} +

{{.i18n.Tr "repo.modelarts.train_job.new_infer"}}

@@ -185,7 +186,7 @@
- diff --git a/templates/repo/cloudbrain/new.tmpl b/templates/repo/cloudbrain/new.tmpl index 805432b59..b25853e9c 100755 --- a/templates/repo/cloudbrain/new.tmpl +++ b/templates/repo/cloudbrain/new.tmpl @@ -121,7 +121,7 @@ {{template "repo/header" .}}
- + {{template "base/alert" .}}

@@ -209,7 +209,7 @@
- {{range .train_gpu_types}} diff --git a/web_src/js/features/cloudrbanin.js b/web_src/js/features/cloudrbanin.js index 4ab6663d5..8df46b168 100644 --- a/web_src/js/features/cloudrbanin.js +++ b/web_src/js/features/cloudrbanin.js @@ -433,6 +433,41 @@ export default async function initCloudrain() { const redirect_to = this.dataset.linkpath; debugAgain(ID, repoPath, redirect_to); }); + + function setWaitNums() { + console.log($(".cloudbrain-type")); + if ($(".cloudbrain-type").length === 0 && $(".gpu-type").length === 0) { + return; + } + let waitNums = $(".cloudbrain-type").data("queue").split("map")[1]; + let test = new Map(); + let waitNumsArray = waitNums.split(" "); + waitNumsArray.forEach((element, index) => { + if (index === 0) { + test.set(element.slice(1, -2), parseInt(element.slice(-1))); + } else if (index === waitNumsArray.length - 1) { + test.set(element.slice(0, -3), parseInt(element.slice(-2, -1))); + } else { + test.set(element.slice(0, -2), parseInt(element.slice(-1))); + } + }); + console.log(test); + $(".ui.search.dropdown.gpu-type").dropdown({ + onChange: function (value, text, $selectedItem) { + console.log("=-------------", value); + console.log("=-------------", test.get(value)); + let gpuTypeNums = test.get(value); + let gpuTypeNumString = + $(".cloudbrain-type").data("queue-start") + + " " + + gpuTypeNums + + " " + + $(".cloudbrain-type").data("queue-end"); + $("#gpu-nums").text(gpuTypeNumString); + }, + }); + } + setWaitNums(); } function userSearchControll() { From 7d35a284984e5fffd18cdbebe620d266eb79eda9 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Tue, 12 Jul 2022 15:21:18 +0800 Subject: [PATCH 43/75] fix issue --- templates/repo/cloudbrain/benchmark/new.tmpl | 1 - templates/repo/cloudbrain/inference/new.tmpl | 7 +------ templates/repo/cloudbrain/new.tmpl | 3 --- templates/repo/cloudbrain/trainjob/new.tmpl | 3 --- templates/repo/modelarts/inferencejob/new.tmpl | 1 - templates/repo/modelarts/notebook/new.tmpl | 1 - templates/repo/modelarts/trainjob/new.tmpl | 1 - web_src/js/features/cloudrbanin.js | 3 --- 8 files changed, 1 insertion(+), 19 deletions(-) diff --git a/templates/repo/cloudbrain/benchmark/new.tmpl b/templates/repo/cloudbrain/benchmark/new.tmpl index ddca11103..0509ce5bc 100755 --- a/templates/repo/cloudbrain/benchmark/new.tmpl +++ b/templates/repo/cloudbrain/benchmark/new.tmpl @@ -273,7 +273,6 @@ $(document).ready(() => { $('.ui.search.dropdown.job_type').dropdown({ onChange: function (value, text, $selectedItem) { - console.log(value, text) if (value === "BRAINSCORE") { $('#brainscore_child_type').css('display', 'block') $('#benchmark_model_example').attr('href', 'https://git.openi.org.cn/BDIP/similarity2brain_ann') diff --git a/templates/repo/cloudbrain/inference/new.tmpl b/templates/repo/cloudbrain/inference/new.tmpl index 20a52db34..cf22b7a80 100644 --- a/templates/repo/cloudbrain/inference/new.tmpl +++ b/templates/repo/cloudbrain/inference/new.tmpl @@ -267,7 +267,7 @@ - {{.i18n.Tr "repo.cloudbrain.cancel"}} + {{.i18n.Tr "repo.cloudbrain.cancel"}}
@@ -277,14 +277,10 @@ {{template "base/footer" .}} + From 5c367724b68746fb3d0467dd6f3fa4820192324f Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Wed, 13 Jul 2022 16:47:41 +0800 Subject: [PATCH 56/75] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/repo/modelarts.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/routers/repo/modelarts.go b/routers/repo/modelarts.go index 797afef64..931bc2879 100755 --- a/routers/repo/modelarts.go +++ b/routers/repo/modelarts.go @@ -2049,6 +2049,13 @@ func InferenceJobIndex(ctx *context.Context) { page = 1 } + listType := ctx.Query("listType") + ctx.Data["ListType"] = listType + + if listType == models.AllResource { + listType = "" + } + var jobTypes []string jobTypes = append(jobTypes, string(models.JobTypeInference)) tasks, count, err := models.Cloudbrains(&models.CloudbrainsOptions{ @@ -2056,9 +2063,10 @@ func InferenceJobIndex(ctx *context.Context) { Page: page, PageSize: setting.UI.IssuePagingNum, }, - RepoID: repo.ID, - Type: ctx.QueryInt("type"), - JobTypes: jobTypes, + RepoID: repo.ID, + ComputeResource: listType, + JobTypes: jobTypes, + Type: models.TypeCloudBrainAll, }) if err != nil { ctx.ServerError("Cloudbrain", err) From 8e301ed7c99151ac500df43d320929bdc53d7928 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Wed, 13 Jul 2022 17:01:31 +0800 Subject: [PATCH 57/75] fix issue --- templates/repo/modelarts/inferencejob/index.tmpl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/repo/modelarts/inferencejob/index.tmpl b/templates/repo/modelarts/inferencejob/index.tmpl index 1dde32469..cfafd85c5 100644 --- a/templates/repo/modelarts/inferencejob/index.tmpl +++ b/templates/repo/modelarts/inferencejob/index.tmpl @@ -156,13 +156,13 @@ {{if eq .Cloudbrain.Type 0 }}
-
+ {{$.CsrfTokenHtml}} {{if .CanDel}} - + data-repopath="{{$.RepoLink}}/cloudbrain/{{.JobID}}/stop" + data-jobid="{{.JobID}}"> {{$.i18n.Tr "repo.stop"}} {{else}} From d25980177429007c0f666de58c5e08138530a618 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Wed, 13 Jul 2022 17:15:14 +0800 Subject: [PATCH 58/75] fix issue --- templates/repo/modelarts/inferencejob/index.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repo/modelarts/inferencejob/index.tmpl b/templates/repo/modelarts/inferencejob/index.tmpl index cfafd85c5..dac873e3d 100644 --- a/templates/repo/modelarts/inferencejob/index.tmpl +++ b/templates/repo/modelarts/inferencejob/index.tmpl @@ -161,7 +161,7 @@ {{if .CanDel}} {{$.i18n.Tr "repo.stop"}} From 66cac72799f624e7d2194830baa811e3314b4e40 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Wed, 13 Jul 2022 17:16:48 +0800 Subject: [PATCH 59/75] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/repo/modelarts.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/routers/repo/modelarts.go b/routers/repo/modelarts.go index 931bc2879..18be1445d 100755 --- a/routers/repo/modelarts.go +++ b/routers/repo/modelarts.go @@ -2076,6 +2076,9 @@ func InferenceJobIndex(ctx *context.Context) { for i, task := range tasks { tasks[i].CanDel = cloudbrain.CanDeleteJob(ctx, &task.Cloudbrain) tasks[i].CanModify = cloudbrain.CanModifyJob(ctx, &task.Cloudbrain) + if tasks[i].ComputeResource == "" { + tasks[i].ComputeResource = models.NPUResource + } } repoId := ctx.Repo.Repository.ID From 1ad87eff5d2f7cc29b881eb531fa095a31ac7ded Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Wed, 13 Jul 2022 17:25:22 +0800 Subject: [PATCH 60/75] fix issue --- templates/repo/cloudbrain/inference/new.tmpl | 51 ------------------------- templates/repo/modelarts/inferencejob/new.tmpl | 52 -------------------------- 2 files changed, 103 deletions(-) diff --git a/templates/repo/cloudbrain/inference/new.tmpl b/templates/repo/cloudbrain/inference/new.tmpl index daf3d5640..e42c7240a 100644 --- a/templates/repo/cloudbrain/inference/new.tmpl +++ b/templates/repo/cloudbrain/inference/new.tmpl @@ -310,26 +310,6 @@ } }) } - // $(function(){ - // $('#select_model').dropdown({ - // onChange: function(value, text, $selectedItem) { - // $("#select_model_version").addClass("loading") - // $('#model_name_version').empty() - // let html = '' - // nameMap[value].forEach(element => { - // let {TrainTaskInfo} = element - // TrainTaskInfo = JSON.parse(TrainTaskInfo) - // html += `
${element.Version}
` - // }); - // $('#model_name_version').append(html) - // $("#select_model_version").removeClass("loading") - // const initVersionText = $('#model_name_version div.item:first-child').text() - // const initVersionValue = $('#model_name_version div.item:first-child').data('value') - // $("#select_model_version").dropdown('set text',initVersionText) - // $("#select_model_version").dropdown('set value',initVersionValue,initVersionText,$('#model_name_version div.item:first-child')) - // } - // }) - // }) // 根据选中的模型版本获取相应的模型权重文件 function modelCkpt(){ $('#select_model_version').dropdown({ @@ -362,37 +342,6 @@ } }) } - // $(function(){ - // $('#select_model_version').dropdown({ - // onChange: function(value, text, $selectedItem) { - // const dataID = $selectedItem[0].getAttribute("data-id") - // const label = $selectedItem[0].getAttribute("data-label") - // $("#select_model_checkpoint").addClass("loading") - // $("#model_checkpoint").empty() - // let html = '' - // loadCheckpointList(dataID).then((res)=>{ - // res.forEach(element => { - // const ckptSuffix = element.FileName.split(".") - // const loadCheckpointFile = ['ckpt','pb','h5','json','pkl','pth','t7'] - // if(!element.IsDir && loadCheckpointFile.includes(ckptSuffix[ckptSuffix.length-1])){ - // html += `
${element.FileName}
` - // } - - // }) - // $('#model_checkpoint').append(html) - // $("#select_model_checkpoint").removeClass("loading") - // const initVersionText = $('#model_checkpoint div.item:first-child').text() - // const initVersionValue = $('#model_checkpoint div.item:first-child').data('value') - // $("#select_model_checkpoint").dropdown('set text',initVersionText) - // $("#select_model_checkpoint").dropdown('set value',initVersionValue,initVersionText,$('#model_name_version div.item:first-child')) - // }) - - - // $("input#ai_model_version").val(text) - // $("input#ai_model_label").val(label) - // } - // }) - // }) function loadCheckpointList(value){ return new Promise((resolve,reject)=>{ $.get(`${RepoLink}/modelmanage/query_modelfile_for_predict`,{ID:value}, (data) => { diff --git a/templates/repo/modelarts/inferencejob/new.tmpl b/templates/repo/modelarts/inferencejob/new.tmpl index f9e82afd9..116f53a45 100644 --- a/templates/repo/modelarts/inferencejob/new.tmpl +++ b/templates/repo/modelarts/inferencejob/new.tmpl @@ -327,27 +327,6 @@ } }) } - // $(function(){ - // $('#select_model').dropdown({ - // onChange: function(value, text, $selectedItem) { - // console.log("-----------------") - // $("#select_model_version").addClass("loading") - // $('#model_name_version').empty() - // let html = '' - // nameMap[value].forEach(element => { - // let {TrainTaskInfo} = element - // TrainTaskInfo = JSON.parse(TrainTaskInfo) - // html += `
${element.Version}
` - // }); - // $('#model_name_version').append(html) - // $("#select_model_version").removeClass("loading") - // const initVersionText = $('#model_name_version div.item:first-child').text() - // const initVersionValue = $('#model_name_version div.item:first-child').data('value') - // $("#select_model_version").dropdown('set text',initVersionText) - // $("#select_model_version").dropdown('set value',initVersionValue,initVersionText,$('#model_name_version div.item:first-child')) - // } - // }) - // }) // 根据选中的模型版本获取相应的模型权重文件 function modelCkpt(){ $('#select_model_version').dropdown({ @@ -380,37 +359,6 @@ } }) } - // $(function(){ - // $('#select_model_version').dropdown({ - // onChange: function(value, text, $selectedItem) { - // const dataID = $selectedItem[0].getAttribute("data-id") - // const label = $selectedItem[0].getAttribute("data-label") - // $("#select_model_checkpoint").addClass("loading") - // $("#model_checkpoint").empty() - // let html = '' - // loadCheckpointList(dataID).then((res)=>{ - // res.forEach(element => { - // const ckptSuffix = element.FileName.split(".") - // const loadCheckpointFile = ['ckpt','pb','h5','json','pkl','pth','t7'] - // if(!element.IsDir && loadCheckpointFile.includes(ckptSuffix[ckptSuffix.length-1])){ - // html += `
${element.FileName}
` - // } - - // }) - // $('#model_checkpoint').append(html) - // $("#select_model_checkpoint").removeClass("loading") - // const initVersionText = $('#model_checkpoint div.item:first-child').text() - // const initVersionValue = $('#model_checkpoint div.item:first-child').data('value') - // $("#select_model_checkpoint").dropdown('set text',initVersionText) - // $("#select_model_checkpoint").dropdown('set value',initVersionValue,initVersionText,$('#model_name_version div.item:first-child')) - // }) - - - // $("input#ai_model_version").val(text) - // $("input#ai_model_label").val(label) - // } - // }) - // }) function loadCheckpointList(value){ return new Promise((resolve,reject)=>{ $.get(`${RepoLink}/modelmanage/query_modelfile_for_predict`,{ID:value}, (data) => { From 1682aa228a0529be3c6890f2f18ff34a182109a8 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Wed, 13 Jul 2022 18:04:16 +0800 Subject: [PATCH 61/75] fix issue --- templates/repo/cloudbrain/inference/show.tmpl | 2 +- templates/user/dashboard/cloudbrains.tmpl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/repo/cloudbrain/inference/show.tmpl b/templates/repo/cloudbrain/inference/show.tmpl index f3f993c01..7653376dd 100644 --- a/templates/repo/cloudbrain/inference/show.tmpl +++ b/templates/repo/cloudbrain/inference/show.tmpl @@ -370,7 +370,7 @@
- {{$.userName}} + {{.User.Name}}
diff --git a/templates/user/dashboard/cloudbrains.tmpl b/templates/user/dashboard/cloudbrains.tmpl index a3925b418..d461e601d 100755 --- a/templates/user/dashboard/cloudbrains.tmpl +++ b/templates/user/dashboard/cloudbrains.tmpl @@ -113,7 +113,7 @@
Date: Wed, 13 Jul 2022 18:24:21 +0800 Subject: [PATCH 62/75] fix issue --- templates/user/dashboard/cloudbrains.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/user/dashboard/cloudbrains.tmpl b/templates/user/dashboard/cloudbrains.tmpl index d461e601d..bf49e2c29 100755 --- a/templates/user/dashboard/cloudbrains.tmpl +++ b/templates/user/dashboard/cloudbrains.tmpl @@ -87,7 +87,7 @@ {{else if eq .JobType "INFERENCE"}} {{.DisplayJobName}} From 02ec809738c55ad6c976d67062dddcacb03111d9 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Wed, 13 Jul 2022 18:30:34 +0800 Subject: [PATCH 63/75] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/access.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/access.go b/models/access.go index 4b72a752b..0d84d0918 100644 --- a/models/access.go +++ b/models/access.go @@ -11,7 +11,7 @@ import ( "code.gitea.io/gitea/modules/log" ) -// AccessMode specifies the users access mode +// AccessMode specifies the users access mode aaa type AccessMode int const ( From 5b602c6a895fe08b71cb20d8f352fa258d490ea1 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Wed, 13 Jul 2022 18:32:18 +0800 Subject: [PATCH 64/75] =?UTF-8?q?=E5=8F=96=E6=B6=88=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/access.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/models/access.go b/models/access.go index 0d84d0918..4b72a752b 100644 --- a/models/access.go +++ b/models/access.go @@ -11,7 +11,7 @@ import ( "code.gitea.io/gitea/modules/log" ) -// AccessMode specifies the users access mode aaa +// AccessMode specifies the users access mode type AccessMode int const ( From 9869b725df154220e3dfa4ccfaf00301f397dfc1 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Wed, 13 Jul 2022 19:43:14 +0800 Subject: [PATCH 65/75] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/api/v1/repo/cloudbrain.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/routers/api/v1/repo/cloudbrain.go b/routers/api/v1/repo/cloudbrain.go index 4a219a061..01b910887 100755 --- a/routers/api/v1/repo/cloudbrain.go +++ b/routers/api/v1/repo/cloudbrain.go @@ -149,13 +149,22 @@ func GetCloudBrainInferenceJob(ctx *context.APIContext) { func DelCloudBrainJob(ctx *context.APIContext) { jobID := ctx.Params(":jobid") + var versionName = ctx.Query("version_name") errStr := cloudbrain.DelCloudBrainJob(jobID) if errStr != "" { - ctx.JSON(http.StatusOK, models.BaseErrorMessage(ctx.Tr(errStr))) + ctx.JSON(http.StatusOK, map[string]interface{}{ + "Message": ctx.Tr(errStr), + "VersionName": versionName, + "code": 1, + }) } else { - ctx.JSON(http.StatusOK, models.BaseOKMessage) + ctx.JSON(http.StatusOK, map[string]interface{}{ + "Message": "", + "VersionName": versionName, + "code": 0, + }) } } From 02f920fbe61918949a4085779c857b4995cb4cea Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Wed, 13 Jul 2022 19:45:54 +0800 Subject: [PATCH 66/75] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/api/v1/repo/cloudbrain.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routers/api/v1/repo/cloudbrain.go b/routers/api/v1/repo/cloudbrain.go index 01b910887..77d621275 100755 --- a/routers/api/v1/repo/cloudbrain.go +++ b/routers/api/v1/repo/cloudbrain.go @@ -155,13 +155,13 @@ func DelCloudBrainJob(ctx *context.APIContext) { if errStr != "" { ctx.JSON(http.StatusOK, map[string]interface{}{ - "Message": ctx.Tr(errStr), + "message": ctx.Tr(errStr), "VersionName": versionName, "code": 1, }) } else { ctx.JSON(http.StatusOK, map[string]interface{}{ - "Message": "", + "message": "", "VersionName": versionName, "code": 0, }) From e382866b1d9f265f393e48c8e90f19ec4bf6d719 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Wed, 13 Jul 2022 19:49:54 +0800 Subject: [PATCH 67/75] fix issue --- index.html | 688 ++++++++++++++++++++++++++++++ templates/user/dashboard/cloudbrains.tmpl | 2 +- 2 files changed, 689 insertions(+), 1 deletion(-) create mode 100644 index.html diff --git a/index.html b/index.html new file mode 100644 index 000000000..643c31b06 --- /dev/null +++ b/index.html @@ -0,0 +1,688 @@ + + + + + + + OpenI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+
+
+

+ Explore Better AI +
+ OpenI AI Development Cooperation Platform +
+

+

The one-stop collaborative development environment for AI field provides AI development pipeline integrating code development, data management, model debugging, reasoning and evaluation

+ + + Use Now + +
+
+
+

* Only show the dynamics of open source projects

+
+
+
+
+ +
+
+
+
+
+ +
+
+ + +
+
+
+

Recommended Organizations

+

These excellent organizations are using the OpenI AI Collaboration Platform for collaborative development of projects. To show your organization here, Click here to submit.

+ More Organizations +
+
+
+
+ +
+
+ +
+
+ +
+

Community Activities

+

The community has prepared a wealth of activities, waiting for you to participate!

+
+
+
+
+ +
+
+
+
+
+ +
+
+ + +
+
+
+
+

Recommended Projects

+

Excellent AI projects recommendation. To show your project here, Click here to submit.Click here to explore more projects.

+
+ +
+
+ +
+
+
+ +
+ +
+
+
+

智算网络

+

人工智能算力网络推进联盟已接入10家智算中心,算力总规模1542P

+
+ +
+ + +
+ +
+ + +
+
+
+
+
+ +

+
+
+
+
+
+
+
+ + + +
+
+
+ + + +
+
+
+ + + +
+
+
+
+
+
+
+
+ + +
+ +
+

Collaborative Development Environment

+

Provide a collaborative development environment for AI development, which is the biggest highlight that distinguishes the OpenI AI Collaboration Platform from other traditional Git platforms.

+
+
+
+
+ +
+
+

Unified Management of Development Elements

+
+ The platform provides four elements of AI development: unified management of model code, data set, model and execution environment. +
+
+
+
+
+ +
+
+

Data Collaboration and Sharing

+
+ By uploading data sets in the project, many project members cooperate to complete data preprocessing. You can also establish a better model with community developers by setting the data as a public dataset. +
+
+
+
+
+ +
+
+

Model Management and Sharing

+
+ Associate the model with the code version, you can adjust the model in different ways based on the historical version of the code and save the results. The trained model can be open and shared, so that more people can use the model to test and give feedback. +
+
+
+
+
+ +
+
+

Once Configuration, Multiple Reuse

+
+ Provide execution environment sharing, Once Configuration, Multiple Reuse. Lower the threshold of model development, and avoid spending repetitive time configuring complex environments. +
+
+
+
+
+ + +
+
+
+
+ +
+
+

PengCheng Cloudbrain Open Source Collaboration

+

+ The platform has been connected with Pengcheng Cloudbrain and can use the rich computing resources of Pengcheng Cloudbrain to complete AI development tasks.
+ Pengcheng Cloudbrain's existing AI computing power is 100p FLOPS@FP16 (billions of half precision floating-point calculations per second), the main hardware infrastructure is composed of GPU server equipped with NVIDIA Tesla V100 and Atlas 900 AI cluster equipped with Kunpeng and Ascend processors.
+ Developers can freely choose the corresponding computing resources according to their needs, and can test the adaptability, performance, stability of the model in different hardware environments.
+ If your model requires more computing resources, you can also apply for it separately.
+

+ + + Use Now + + + Apply Separately +
+
+
+
+
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/user/dashboard/cloudbrains.tmpl b/templates/user/dashboard/cloudbrains.tmpl index bf49e2c29..1e81354c9 100755 --- a/templates/user/dashboard/cloudbrains.tmpl +++ b/templates/user/dashboard/cloudbrains.tmpl @@ -186,7 +186,7 @@ {{else}} {{$.i18n.Tr "repo.stop"}} From d532431a025f3b06ad698cad4df347ee6b4b4d36 Mon Sep 17 00:00:00 2001 From: ychao_1983 Date: Wed, 13 Jul 2022 19:51:42 +0800 Subject: [PATCH 68/75] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routers/api/v1/repo/cloudbrain.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/routers/api/v1/repo/cloudbrain.go b/routers/api/v1/repo/cloudbrain.go index 77d621275..c82ff2e3e 100755 --- a/routers/api/v1/repo/cloudbrain.go +++ b/routers/api/v1/repo/cloudbrain.go @@ -149,20 +149,19 @@ func GetCloudBrainInferenceJob(ctx *context.APIContext) { func DelCloudBrainJob(ctx *context.APIContext) { jobID := ctx.Params(":jobid") - var versionName = ctx.Query("version_name") errStr := cloudbrain.DelCloudBrainJob(jobID) if errStr != "" { ctx.JSON(http.StatusOK, map[string]interface{}{ "message": ctx.Tr(errStr), - "VersionName": versionName, + "VersionName": "1", "code": 1, }) } else { ctx.JSON(http.StatusOK, map[string]interface{}{ "message": "", - "VersionName": versionName, + "VersionName": "1", "code": 0, }) } From 4e8264dd6e2208cc0bd5d1b216d01066558d7d0d Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 15 Jul 2022 09:21:49 +0800 Subject: [PATCH 69/75] fix issue --- templates/user/dashboard/cloudbrains.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/user/dashboard/cloudbrains.tmpl b/templates/user/dashboard/cloudbrains.tmpl index 1e81354c9..09900485e 100755 --- a/templates/user/dashboard/cloudbrains.tmpl +++ b/templates/user/dashboard/cloudbrains.tmpl @@ -208,7 +208,7 @@ {{$.CsrfTokenHtml}} {{$.i18n.Tr "repo.delete"}} From d1f541d56a2a6c2f424f3bab5290b2f6c3aba3d3 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 15 Jul 2022 09:29:23 +0800 Subject: [PATCH 70/75] fix issue --- web_src/js/features/cloudrbanin.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web_src/js/features/cloudrbanin.js b/web_src/js/features/cloudrbanin.js index 15cb47e97..b7cfb4fe6 100644 --- a/web_src/js/features/cloudrbanin.js +++ b/web_src/js/features/cloudrbanin.js @@ -250,7 +250,9 @@ export default async function initCloudrain() { $(".ui.basic.ai_delete").click(function () { const repoPath = this.dataset.repopath; const versionName = this.dataset.version; + console.log("----this", this, this.dataset.version); if (repoPath && versionName) { + console.log("----this", this); assertDelete(this, versionName, repoPath); } else { assertDelete(this); From ef250bc59ebd2026e053065cf3bbac0b8cf06b59 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 15 Jul 2022 12:01:27 +0800 Subject: [PATCH 71/75] fix issue --- templates/user/dashboard/cloudbrains.tmpl | 10 ++++++++-- web_src/js/features/cloudrbanin.js | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/templates/user/dashboard/cloudbrains.tmpl b/templates/user/dashboard/cloudbrains.tmpl index 09900485e..2962803bc 100755 --- a/templates/user/dashboard/cloudbrains.tmpl +++ b/templates/user/dashboard/cloudbrains.tmpl @@ -203,12 +203,18 @@ {{end}}
{{$.CsrfTokenHtml}} {{$.i18n.Tr "repo.delete"}} diff --git a/web_src/js/features/cloudrbanin.js b/web_src/js/features/cloudrbanin.js index b7cfb4fe6..89c660495 100644 --- a/web_src/js/features/cloudrbanin.js +++ b/web_src/js/features/cloudrbanin.js @@ -216,6 +216,7 @@ export default async function initCloudrain() { }, onApprove: function () { if (!versionName) { + console.log("-----"); document.getElementById(delId).submit(); } else { deleteVersion(versionName, repoPath); From 157196668137ae958fb322c5e69238cb47b0e0c0 Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 15 Jul 2022 12:08:02 +0800 Subject: [PATCH 72/75] fix issue --- templates/user/dashboard/cloudbrains.tmpl | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/templates/user/dashboard/cloudbrains.tmpl b/templates/user/dashboard/cloudbrains.tmpl index 2962803bc..798eaa53b 100755 --- a/templates/user/dashboard/cloudbrains.tmpl +++ b/templates/user/dashboard/cloudbrains.tmpl @@ -203,13 +203,7 @@ {{end}} {{$.CsrfTokenHtml}} Date: Fri, 15 Jul 2022 12:17:01 +0800 Subject: [PATCH 73/75] fix issue --- templates/user/dashboard/cloudbrains.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/user/dashboard/cloudbrains.tmpl b/templates/user/dashboard/cloudbrains.tmpl index 798eaa53b..4c134fb30 100755 --- a/templates/user/dashboard/cloudbrains.tmpl +++ b/templates/user/dashboard/cloudbrains.tmpl @@ -186,7 +186,7 @@ {{else}} {{$.i18n.Tr "repo.stop"}} From ff3660bc1de990e140e2b3c77ef9498a4fc61ece Mon Sep 17 00:00:00 2001 From: zhoupzh Date: Fri, 15 Jul 2022 12:31:05 +0800 Subject: [PATCH 74/75] fix issue --- templates/admin/cloudbrain/list.tmpl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/admin/cloudbrain/list.tmpl b/templates/admin/cloudbrain/list.tmpl index 347b5658d..e66f40e84 100755 --- a/templates/admin/cloudbrain/list.tmpl +++ b/templates/admin/cloudbrain/list.tmpl @@ -204,7 +204,7 @@ {{else}} {{$.i18n.Tr "repo.stop"}} @@ -212,7 +212,7 @@
{{$.CsrfTokenHtml}} Date: Fri, 15 Jul 2022 12:33:50 +0800 Subject: [PATCH 75/75] fix issue --- web_src/js/features/cloudrbanin.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/web_src/js/features/cloudrbanin.js b/web_src/js/features/cloudrbanin.js index 89c660495..15cb47e97 100644 --- a/web_src/js/features/cloudrbanin.js +++ b/web_src/js/features/cloudrbanin.js @@ -216,7 +216,6 @@ export default async function initCloudrain() { }, onApprove: function () { if (!versionName) { - console.log("-----"); document.getElementById(delId).submit(); } else { deleteVersion(versionName, repoPath); @@ -251,9 +250,7 @@ export default async function initCloudrain() { $(".ui.basic.ai_delete").click(function () { const repoPath = this.dataset.repopath; const versionName = this.dataset.version; - console.log("----this", this, this.dataset.version); if (repoPath && versionName) { - console.log("----this", this); assertDelete(this, versionName, repoPath); } else { assertDelete(this);