diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 4e9708a58..8eb275411 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -21,6 +21,7 @@ import ( "code.gitea.io/gitea/modules/modelarts" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/storage" + "code.gitea.io/gitea/modules/timeutil" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/services/cloudbrain/resource" "code.gitea.io/gitea/services/reward/point/account" @@ -88,6 +89,65 @@ func GetAiSafetyTask(ctx *context.Context) { } func StopAiSafetyTask(ctx *context.Context) { + var ID = ctx.Params(":jobid") + task, err := models.GetCloudbrainByJobIDWithDeleted(ID) + result := make(map[string]interface{}) + result["code"] = -1 + if err != nil { + log.Error("GetCloudbrainByJobID failed:" + err.Error()) + result["msg"] = "No such task." + ctx.JSON(200, result) + return + } + if isTaskNotFinished(task.Status) { + if task.Type == models.TypeCloudBrainTwo { + //queryTaskStatusFromCloudbrainTwo(job) + } else if task.Type == models.TypeCloudBrainOne { + if task.Status == string(models.JobStopped) || task.Status == string(models.JobFailed) || task.Status == string(models.JobSucceeded) { + log.Error("the job(%s) has been stopped", task.JobName, ctx.Data["msgID"]) + result["msg"] = "cloudbrain.Already_stopped" + ctx.JSON(200, result) + return + } + err := cloudbrain.StopJob(task.JobID) + if err != nil { + log.Error("StopJob(%s) failed:%v", task.JobName, err, ctx.Data["msgID"]) + result["msg"] = "cloudbrain.Stopped_failed" + ctx.JSON(200, result) + return + } + task.Status = string(models.JobStopped) + if task.EndTime == 0 { + task.EndTime = timeutil.TimeStampNow() + } + task.ComputeAndSetDuration() + err = models.UpdateJob(task) + if err != nil { + log.Error("UpdateJob(%s) failed:%v", task.JobName, err, ctx.Data["msgID"]) + result["msg"] = "cloudbrain.Stopped_success_update_status_fail" + ctx.JSON(200, result) + return + } + } + } else { + if task.Status == string(models.ModelSafetyTesting) { + //修改为Failed + task.Status = string(models.JobStopped) + if task.EndTime == 0 { + task.EndTime = timeutil.TimeStampNow() + } + task.ComputeAndSetDuration() + err = models.UpdateJob(task) + if err != nil { + log.Error("UpdateJob(%s) failed:%v", task.JobName, err, ctx.Data["msgID"]) + result["msg"] = "cloudbrain.Stopped_success_update_status_fail" + ctx.JSON(200, result) + return + } + } else { + log.Info("The job is finished. status=" + task.Status) + } + } } @@ -108,6 +168,9 @@ func DelAiSafetyTask(ctx *context.Context) { ctx.JSON(200, result) return } + if task.Type == models.TypeCloudBrainOne { + DeleteCloudbrainJobStorage(task.JobName, models.TypeCloudBrainOne) + } err = models.DeleteJob(task) if err != nil { result["msg"] = err.Error() @@ -511,24 +574,24 @@ func AiSafetyCreateForPost(ctx *context.Context) { func createForNPU(ctx *context.Context, jobName string) { VersionOutputPath := modelarts.GetOutputPathByCount(modelarts.TotalVersionCount) - BootFile := ctx.Query("BootFile") - displayJobName := ctx.Query("DisplayJobName") - description := ctx.Query("Description") - engineID := ctx.QueryInt("EngineID") - poolID := ctx.Query("PoolID") - //image := strings.TrimSpace(ctx.Query("Image")) - srcDataset := ctx.Query("srcDataset") //uuid - combatDataset := ctx.Query("combatDataset") //uuid + BootFile := ctx.Query("boot_file") + displayJobName := ctx.Query("display_job_name") + description := ctx.Query("description") + + srcDataset := ctx.Query("src_dataset") //uuid + combatDataset := ctx.Query("combat_dataset") //uuid evaluationIndex := ctx.Query("evaluationIndex") - Params := ctx.Query("RunParaList") - specId := ctx.QueryInt64("SpecId") + Params := ctx.Query("run_para_list") + specId := ctx.QueryInt64("spec_id") + engineID := ctx.QueryInt("EngineID") + poolID := ctx.Query("PoolID") repo := ctx.Repo.Repository - trainUrl := ctx.Query("TrainUrl") + trainUrl := ctx.Query("train_url") modelName := ctx.Query("ModelName") modelVersion := ctx.Query("ModelVersion") - ckptName := ctx.Query("CkptName") + ckptName := ctx.Query("ckpt_name") ckptUrl := "/" + trainUrl + ckptName log.Info("ckpt url:" + ckptUrl) @@ -828,43 +891,21 @@ func getGpuModelSafetyCommand(BootFile string, params string, CkptName string, D func modelSafetyNewDataPrepare(ctx *context.Context) error { ctx.Data["PageIsCloudBrain"] = true - t := time.Now() - var displayJobName = jobNamePrefixValid(cutString(ctx.User.Name, 5)) + t.Format("2006010215") + strconv.Itoa(int(t.Unix()))[5:] - ctx.Data["display_job_name"] = displayJobName - ctx.Data["command"] = cloudbrain.GetCloudbrainDebugCommand() - ctx.Data["code_path"] = cloudbrain.CodeMountPath - ctx.Data["dataset_path"] = cloudbrain.DataSetMountPath - ctx.Data["model_path"] = cloudbrain.ModelMountPath - ctx.Data["benchmark_path"] = cloudbrain.BenchMarkMountPath - ctx.Data["is_benchmark_enabled"] = setting.IsBenchmarkEnabled - - if categories == nil { - json.Unmarshal([]byte(setting.BenchmarkCategory), &categories) - } - ctx.Data["benchmark_categories"] = categories.Category - - ctx.Data["benchmark_types"] = GetBenchmarkTypes(ctx).BenchmarkType - queuesDetail, _ := cloudbrain.GetQueuesDetail() - if queuesDetail != nil { - ctx.Data["QueuesDetail"] = queuesDetail - } + ctx.Data["boot_file"] = ctx.Query("boot_file") + ctx.Data["display_job_name"] = ctx.Query("display_job_name") + ctx.Data["description"] = ctx.Query("description") + ctx.Data["image"] = strings.TrimSpace(ctx.Query("image")) + ctx.Data["src_dataset"] = ctx.Query("src_dataset") //uuid + ctx.Data["combat_dataset"] = ctx.Query("combat_dataset") //uuid + ctx.Data["evaluationIndex"] = ctx.Query("evaluationIndex") + ctx.Data["run_para_list"] = ctx.Query("run_para_list") + ctx.Data["spec_id"] = ctx.QueryInt64("spec_id") + ctx.Data["train_url"] = ctx.Query("train_url") + ctx.Data["ckpt_name"] = ctx.Query("ckpt_name") prepareCloudbrainOneSpecs(ctx) - ctx.Data["params"] = "" - ctx.Data["branchName"] = ctx.Repo.BranchName - - ctx.Data["snn4imagenet_path"] = cloudbrain.Snn4imagenetMountPath - ctx.Data["is_snn4imagenet_enabled"] = setting.IsSnn4imagenetEnabled - - ctx.Data["brainscore_path"] = cloudbrain.BrainScoreMountPath - ctx.Data["is_brainscore_enabled"] = setting.IsBrainScoreEnabled - - ctx.Data["datasetType"] = models.TypeCloudBrainOne - - ctx.Data["benchmarkMode"] = ctx.Query("benchmarkMode") - return nil }