From 098dbe62b747e2f8e9a32de5a6eceed9a15bb150 Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 13 Sep 2022 09:35:19 +0800 Subject: [PATCH 001/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E8=B0=83=E8=AF=95?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- models/aisafety.go | 4 ++ models/cloudbrain.go | 1 + modules/aisafety/resty.go | 134 +++++++++++++++++++++++++++++++++++++++++++++ routers/repo/aisafety.go | 44 +++++++++++++++ routers/repo/cloudbrain.go | 3 +- routers/routes/routes.go | 1 + 6 files changed, 186 insertions(+), 1 deletion(-) create mode 100644 models/aisafety.go create mode 100644 modules/aisafety/resty.go create mode 100644 routers/repo/aisafety.go diff --git a/models/aisafety.go b/models/aisafety.go new file mode 100644 index 000000000..ddafcf70a --- /dev/null +++ b/models/aisafety.go @@ -0,0 +1,4 @@ +package models + +type AisafetyReq struct { +} diff --git a/models/cloudbrain.go b/models/cloudbrain.go index dc56efef7..5a3d9e584 100755 --- a/models/cloudbrain.go +++ b/models/cloudbrain.go @@ -54,6 +54,7 @@ const ( JobTypeDebug JobType = "DEBUG" JobTypeBenchmark JobType = "BENCHMARK" + JobTypeModelSafety JobType = "MODELSAFETY" JobTypeSnn4imagenet JobType = "SNN4IMAGENET" JobTypeBrainScore JobType = "BRAINSCORE" JobTypeTrain JobType = "TRAIN" diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go new file mode 100644 index 000000000..e0351faa8 --- /dev/null +++ b/modules/aisafety/resty.go @@ -0,0 +1,134 @@ +package aisafety + +import ( + "crypto/md5" + "encoding/hex" + "encoding/json" + "fmt" + "sort" + "strings" + + "code.gitea.io/gitea/modules/log" + + "github.com/go-resty/resty/v2" +) + +var ( + restyClient *resty.Client + HOST string + TOKEN string +) + +const ( + JobHasBeenStopped = "S410" + errInvalidToken = "S401" + Public = "public" + Custom = "custom" + LogPageSize = 500 + LogPageTokenExpired = "5m" + pageSize = 15 + Success = "S000" +) + +func getRestyClient() *resty.Client { + if restyClient == nil { + restyClient = resty.New() + } + return restyClient +} + +func checkSetting() { + if len(HOST) != 0 && len(TOKEN) != 0 && restyClient != nil { + return + } + _ = loginCloudbrain() +} + +func loginCloudbrain() error { + + return nil +} + +func createSign(params map[string]interface{}, signKey string) string { + var sceneList []string + for k := range params { + sceneList = append(sceneList, k) + } + sort.Strings(sceneList) + re := "" + for _, key := range sceneList { + if params[key] != nil { + re += key + "=" + fmt.Sprint(params[key]) + "&" + } + } + re += "key=" + signKey + h := md5.New() + h.Write([]byte(re)) + return strings.ToUpper(hex.EncodeToString(h.Sum(nil))) +} + +func CreateSafetyTask(jobName string, body interface{}) (string, error) { + checkSetting() + client := getRestyClient() + var jobResult string + + reqPara, _ := json.Marshal(body) + log.Warn("job req:", string(reqPara[:])) + + res, err := client.R(). + SetHeader("Content-Type", "application/json"). + //SetAuthToken(TOKEN). + SetBody(body). + SetResult(&jobResult). + Post(HOST + "/v1/external/eval-standard/create") + + if err != nil { + return "", fmt.Errorf("resty create job: %s", err) + } else { + log.Info("restult=" + jobResult) + } + + responseStr := string(res.Body()) + log.Info("responseStr=" + responseStr) + + return jobResult, nil + +} + +func GetAlgorithmList() error { + checkSetting() + client := getRestyClient() + + res, err := client.R(). + SetHeader("Content-Type", "application/json"). + SetAuthToken(TOKEN). + Get(HOST + "/v1/external/eval-standard/algorithmList") + + if err != nil { + return fmt.Errorf("resty GetJob: %v", err) + } + + responseStr := string(res.Body()) + log.Info("GetAlgorithmList responseStr=" + responseStr) + + return nil +} + +func GetTaskStatus(jobID string) error { + checkSetting() + client := getRestyClient() + + res, err := client.R(). + SetHeader("Content-Type", "application/json"). + SetAuthToken(TOKEN). + Get(HOST + "/v1/external/eval-standard/query") + + if err != nil { + return fmt.Errorf("resty GetJob: %v", err) + } + + responseStr := string(res.Body()) + log.Info("GetTaskStatus responseStr=" + responseStr) + + return nil +} diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go new file mode 100644 index 000000000..29e518b3c --- /dev/null +++ b/routers/repo/aisafety.go @@ -0,0 +1,44 @@ +package repo + +import ( + "encoding/json" + "io/ioutil" + "net/http" + + "code.gitea.io/gitea/models" + "code.gitea.io/gitea/modules/aisafety" + "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/log" +) + +func CloudBrainAiSafetyCreate(ctx *context.Context) { + jobType := ctx.Query("jobType") + if jobType == string(models.JobTypeBenchmark) { + jsonMap, err := getJsonContent("http://192.168.207.34:8065/Test_zap1234/openi_aisafety/src/branch/master/result/0301.json") + if err == nil { + aisafety.GetAlgorithmList() + aisafety.CreateSafetyTask("test", jsonMap) + //aisafety.GetTaskStatus() + } + } +} + +func getJsonContent(url string) (map[string]interface{}, error) { + + resp, err := http.Get(url) + if err != nil || resp.StatusCode != 200 { + log.Info("Get organizations url error=" + err.Error()) + return nil, err + } + bytes, err := ioutil.ReadAll(resp.Body) + resp.Body.Close() + if err != nil { + log.Info("Get organizations url error=" + err.Error()) + return nil, err + } + jsonMap := make(map[string]interface{}) + + err = json.Unmarshal(bytes, &jsonMap) + + return jsonMap, nil +} diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index 7020f0a61..24a5ac685 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -2,7 +2,6 @@ package repo import ( "bufio" - "code.gitea.io/gitea/services/cloudbrain/resource" "encoding/json" "errors" "fmt" @@ -16,6 +15,8 @@ import ( "time" "unicode/utf8" + "code.gitea.io/gitea/services/cloudbrain/resource" + "code.gitea.io/gitea/modules/notification" "code.gitea.io/gitea/modules/grampus" diff --git a/routers/routes/routes.go b/routers/routes/routes.go index d8b1bff22..5d41c093e 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -1126,6 +1126,7 @@ func RegisterRoutes(m *macaron.Macaron) { }) m.Get("/create", reqWechatBind, reqRepoCloudBrainWriter, repo.CloudBrainBenchmarkNew) m.Post("/create", reqWechatBind, reqRepoCloudBrainWriter, bindIgnErr(auth.CreateCloudBrainForm{}), repo.CloudBrainBenchmarkCreate) + m.Get("/create_safetytask", repo.CloudBrainAiSafetyCreate) m.Get("/get_child_types", repo.GetChildTypes) }) From 2c63d4d1cbe0fc6ae22fd314a75bbcb57a4caed6 Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 13 Sep 2022 10:50:26 +0800 Subject: [PATCH 002/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AF=84=E6=B5=8B?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 18 ++-- templates/repo/cloudbrain/benchmark/new.tmpl | 127 ++++++++++++++++++++++++++- 2 files changed, 135 insertions(+), 10 deletions(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 29e518b3c..cda85480a 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -5,22 +5,22 @@ import ( "io/ioutil" "net/http" - "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/aisafety" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/log" ) func CloudBrainAiSafetyCreate(ctx *context.Context) { - jobType := ctx.Query("jobType") - if jobType == string(models.JobTypeBenchmark) { - jsonMap, err := getJsonContent("http://192.168.207.34:8065/Test_zap1234/openi_aisafety/src/branch/master/result/0301.json") - if err == nil { - aisafety.GetAlgorithmList() - aisafety.CreateSafetyTask("test", jsonMap) - //aisafety.GetTaskStatus() - } + log.Info("start to create CloudBrainAiSafetyCreate") + //jobType := ctx.Query("jobType") + //if jobType == string(models.JobTypeBenchmark) { + jsonMap, err := getJsonContent("http://192.168.207.34:8065/Test_zap1234/openi_aisafety/src/branch/master/result/0301.json") + if err == nil { + aisafety.GetAlgorithmList() + aisafety.CreateSafetyTask("test", jsonMap) + //aisafety.GetTaskStatus() } + //} } func getJsonContent(url string) (map[string]interface{}, error) { diff --git a/templates/repo/cloudbrain/benchmark/new.tmpl b/templates/repo/cloudbrain/benchmark/new.tmpl index 58f471ede..2dc4d1811 100755 --- a/templates/repo/cloudbrain/benchmark/new.tmpl +++ b/templates/repo/cloudbrain/benchmark/new.tmpl @@ -50,6 +50,8 @@ href="{{.Link}}?benchmarkMode=alogrithm">{{.i18n.Tr "repo.cloudbrain.benchmark.algorithm"}} {{.i18n.Tr "repo.cloudbrain.benchmark.model"}} + 模型安全评测
@@ -143,7 +145,7 @@
- {{else}} + {{else if eq .benchmarkMode "alogrithm"}}
{{.CsrfTokenHtml}} @@ -155,6 +157,8 @@ href="{{.Link}}?benchmarkMode=alogrithm">{{.i18n.Tr "repo.cloudbrain.benchmark.algorithm"}} {{.i18n.Tr "repo.cloudbrain.benchmark.model"}} + 模型安全评测 @@ -261,6 +265,127 @@
+ {{else if eq .benchmarkMode "aisafety"}} +
+ {{.CsrfTokenHtml}} + + + + +
+
+ + {{template "custom/task_wait_count" .}} +
+
+ + + {{.i18n.Tr "repo.cloudbrain_jobname_err"}} +
+
+ + +
+ + +
  +
+ + + +
+
+ + + +
+
+
+
+ + + +
+ + +
+ +
+ + + {{.i18n.Tr "repo.cloudbrain.benchmark.evaluate_train"}} +
+ +
+ + + {{.i18n.Tr "cloudbrain.view_sample"}} +
+ + +
+ + + {{.i18n.Tr "repo.cloudbrain.cancel"}} +
+
+
+ {{end}} From 1673d23873bb8e430b57e36e1da2ea031dba1818 Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 13 Sep 2022 10:57:10 +0800 Subject: [PATCH 003/180] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E7=9A=84=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- templates/repo/cloudbrain/benchmark/new.tmpl | 55 +--------------------------- 1 file changed, 2 insertions(+), 53 deletions(-) diff --git a/templates/repo/cloudbrain/benchmark/new.tmpl b/templates/repo/cloudbrain/benchmark/new.tmpl index 2dc4d1811..71a10cadf 100755 --- a/templates/repo/cloudbrain/benchmark/new.tmpl +++ b/templates/repo/cloudbrain/benchmark/new.tmpl @@ -304,53 +304,10 @@ onkeyup="this.value=this.value.substring(0, 255)">{{.description}} - -
  -
- - - -
-
- - - -
-
+
- -
- {{.i18n.Tr "repo.cloudbrain.benchmark.evaluate_train"}} -
- -
- + Date: Tue, 13 Sep 2022 14:32:58 +0800 Subject: [PATCH 004/180] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E7=9A=84=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index e0351faa8..23897b245 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -16,14 +16,11 @@ import ( var ( restyClient *resty.Client HOST string - TOKEN string + KEY string ) const ( - JobHasBeenStopped = "S410" - errInvalidToken = "S401" - Public = "public" - Custom = "custom" + APPID = "1" LogPageSize = 500 LogPageTokenExpired = "5m" pageSize = 15 @@ -38,7 +35,7 @@ func getRestyClient() *resty.Client { } func checkSetting() { - if len(HOST) != 0 && len(TOKEN) != 0 && restyClient != nil { + if len(HOST) != 0 && len(KEY) != 0 && restyClient != nil { return } _ = loginCloudbrain() @@ -62,6 +59,7 @@ func createSign(params map[string]interface{}, signKey string) string { } } re += "key=" + signKey + log.Info("sign key:" + re) h := md5.New() h.Write([]byte(re)) return strings.ToUpper(hex.EncodeToString(h.Sum(nil))) @@ -75,8 +73,12 @@ func CreateSafetyTask(jobName string, body interface{}) (string, error) { reqPara, _ := json.Marshal(body) log.Warn("job req:", string(reqPara[:])) + params := make(map[string]interface{}) + params["appId"] = APPID + res, err := client.R(). SetHeader("Content-Type", "application/json"). + SetHeader("sign", createSign(params, KEY)). //SetAuthToken(TOKEN). SetBody(body). SetResult(&jobResult). @@ -99,9 +101,12 @@ func GetAlgorithmList() error { checkSetting() client := getRestyClient() + params := make(map[string]interface{}) + params["appId"] = APPID + res, err := client.R(). SetHeader("Content-Type", "application/json"). - SetAuthToken(TOKEN). + SetHeader("sign", createSign(params, KEY)). Get(HOST + "/v1/external/eval-standard/algorithmList") if err != nil { @@ -118,9 +123,12 @@ func GetTaskStatus(jobID string) error { checkSetting() client := getRestyClient() + params := make(map[string]interface{}) + params["appId"] = APPID + res, err := client.R(). SetHeader("Content-Type", "application/json"). - SetAuthToken(TOKEN). + SetHeader("sign", createSign(params, KEY)). Get(HOST + "/v1/external/eval-standard/query") if err != nil { From 4f8650a2b88dab33d8f22e5347c21c56cb1d999c Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 13 Sep 2022 16:46:06 +0800 Subject: [PATCH 005/180] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E7=9A=84=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 5 +- routers/repo/aisafety.go | 147 +++++++++++++++++++++++++++++++++++++++++++++- routers/routes/routes.go | 3 +- 3 files changed, 151 insertions(+), 4 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index 23897b245..f3b94ac1c 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -35,14 +35,15 @@ func getRestyClient() *resty.Client { } func checkSetting() { - if len(HOST) != 0 && len(KEY) != 0 && restyClient != nil { + if len(HOST) != 0 && len(KEY) != 0 { return } _ = loginCloudbrain() } func loginCloudbrain() error { - + HOST = "http://221.122.70.196:8081/atp-api" + KEY = "222222222222222" return nil } diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index cda85480a..5a44e5650 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -4,13 +4,21 @@ import ( "encoding/json" "io/ioutil" "net/http" + "os" + "strings" + "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/aisafety" + "code.gitea.io/gitea/modules/cloudbrain" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/storage" + "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/services/cloudbrain/resource" ) -func CloudBrainAiSafetyCreate(ctx *context.Context) { +func CloudBrainAiSafetyCreateTest(ctx *context.Context) { log.Info("start to create CloudBrainAiSafetyCreate") //jobType := ctx.Query("jobType") //if jobType == string(models.JobTypeBenchmark) { @@ -23,6 +31,143 @@ func CloudBrainAiSafetyCreate(ctx *context.Context) { //} } +func CloudBrainAiSafetyCreate(ctx *context.Context) { + ctx.Data["PageIsCloudBrain"] = true + displayJobName := ctx.Query("DisplayJobName") + jobName := util.ConvertDisplayJobNameToJobName(displayJobName) + image := strings.TrimSpace(ctx.Query("Image")) + command := "python /code/inferench.py > " + cloudbrain.ModelMountPath + "/" + displayJobName + "-" + cloudbrain.LogFile + codePath := setting.JobPath + jobName + cloudbrain.CodeMountPath + description := ctx.Query("Description") + specId := ctx.QueryInt64("SpecId") + ctx.Data["description"] = description + + repo := ctx.Repo.Repository + + tasks, err := models.GetCloudbrainsByDisplayJobName(repo.ID, string(models.JobTypeBenchmark), 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", tplCloudBrainBenchmarkNew, nil) + return + } + } else { + if !models.IsErrJobNotExist(err) { + log.Error("system error, %v", err, ctx.Data["MsgID"]) + cloudBrainNewDataPrepare(ctx) + ctx.RenderWithErr("system error", tplCloudBrainBenchmarkNew, nil) + return + } + } + + if !jobNamePattern.MatchString(jobName) { + cloudBrainNewDataPrepare(ctx) + ctx.RenderWithErr(ctx.Tr("repo.cloudbrain_jobname_err"), tplCloudBrainBenchmarkNew, nil) + return + } + + spec, err := resource.GetAndCheckSpec(ctx.User.ID, specId, models.FindSpecsOptions{ + JobType: models.JobTypeBenchmark, + ComputeResource: models.GPU, + Cluster: models.OpenICluster, + AiCenterCode: models.AICenterOfCloudBrainOne}) + if err != nil || spec == nil { + cloudBrainNewDataPrepare(ctx) + ctx.RenderWithErr("Resource specification not available", tplCloudBrainBenchmarkNew, nil) + return + } + + count, err := models.GetBenchmarkCountByUserID(ctx.User.ID) + if err != nil { + log.Error("GetCloudbrainCountByUserID failed:%v", err, ctx.Data["MsgID"]) + cloudBrainNewDataPrepare(ctx) + ctx.RenderWithErr("system error", tplCloudBrainBenchmarkNew, nil) + 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"), tplCloudBrainBenchmarkNew, nil) + return + } + } + + os.RemoveAll(codePath) + + if err := downloadCode(repo, codePath, cloudbrain.DefaultBranchName); err != nil { + log.Error("downloadCode failed, %v", err, ctx.Data["MsgID"]) + cloudBrainNewDataPrepare(ctx) + ctx.RenderWithErr("system error", tplCloudBrainBenchmarkNew, nil) + return + } + + if _, err := os.Stat(codePath + "/inference.py"); err != nil { + if os.IsNotExist(err) { + // file does not exist + log.Error("inference.py does not exist, %v", err, ctx.Data["MsgID"]) + cloudBrainNewDataPrepare(ctx) + ctx.RenderWithErr("inference.py does not exist", tplCloudBrainBenchmarkNew, nil) + } else { + log.Error("Stat failed, %v", err, ctx.Data["MsgID"]) + cloudBrainNewDataPrepare(ctx) + ctx.RenderWithErr("system error", tplCloudBrainBenchmarkNew, nil) + } + return + } + + if err := uploadCodeToMinio(codePath+"/", jobName, cloudbrain.CodeMountPath+"/"); err != nil { + log.Error("uploadCodeToMinio failed, %v", err, ctx.Data["MsgID"]) + cloudBrainNewDataPrepare(ctx) + ctx.RenderWithErr("system error", tplCloudBrainBenchmarkNew, nil) + return + } + + uuid := "dee79f68-19f1-42dd-b004-bc9ce08415ca" + 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"), tplCloudBrainBenchmarkNew, nil) + return + } + log.Info("Command=" + command) + log.Info("ModelPath=" + storage.GetMinioPath(jobName, cloudbrain.ModelMountPath+"/")) + 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: storage.GetMinioPath(jobName, cloudbrain.ModelMountPath+"/"), + BenchmarkPath: storage.GetMinioPath(jobName, cloudbrain.BenchMarkMountPath+"/"), + Snn4ImageNetPath: storage.GetMinioPath(jobName, cloudbrain.Snn4imagenetMountPath+"/"), + BrainScorePath: storage.GetMinioPath(jobName, cloudbrain.BrainScoreMountPath+"/"), + JobType: string(models.JobTypeModelSafety), + Description: description, + BranchName: cloudbrain.DefaultBranchName, + BootFile: "", + Params: "", + CommitID: "", + ResultPath: storage.GetMinioPath(jobName, cloudbrain.ResultPath+"/"), + Spec: spec, + } + + err = cloudbrain.GenerateTask(req) + if err != nil { + cloudBrainNewDataPrepare(ctx) + ctx.RenderWithErr(err.Error(), tplCloudBrainBenchmarkNew, nil) + return + } + + ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/cloudbrain/benchmark") + +} + func getJsonContent(url string) (map[string]interface{}, error) { resp, err := http.Get(url) diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 5d41c093e..b555a6756 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -1126,7 +1126,8 @@ func RegisterRoutes(m *macaron.Macaron) { }) m.Get("/create", reqWechatBind, reqRepoCloudBrainWriter, repo.CloudBrainBenchmarkNew) m.Post("/create", reqWechatBind, reqRepoCloudBrainWriter, bindIgnErr(auth.CreateCloudBrainForm{}), repo.CloudBrainBenchmarkCreate) - m.Get("/create_safetytask", repo.CloudBrainAiSafetyCreate) + m.Post("/create_safetytask", reqWechatBind, reqRepoCloudBrainWriter, repo.CloudBrainAiSafetyCreate) + m.Get("/create_safetytask_test", repo.CloudBrainAiSafetyCreateTest) m.Get("/get_child_types", repo.GetChildTypes) }) From 5d75efb804f06cc1b6e4e3def6852920ee9934d0 Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 13 Sep 2022 16:53:26 +0800 Subject: [PATCH 006/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index f3b94ac1c..d3043ec6e 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -84,11 +84,12 @@ func CreateSafetyTask(jobName string, body interface{}) (string, error) { SetBody(body). SetResult(&jobResult). Post(HOST + "/v1/external/eval-standard/create") + log.Info("url=" + HOST + "/v1/external/eval-standard/create") if err != nil { return "", fmt.Errorf("resty create job: %s", err) } else { - log.Info("restult=" + jobResult) + log.Info("result string=" + jobResult + " res code=" + fmt.Sprint(res.StatusCode())) } responseStr := string(res.Body()) @@ -101,21 +102,22 @@ func CreateSafetyTask(jobName string, body interface{}) (string, error) { func GetAlgorithmList() error { checkSetting() client := getRestyClient() - + var taskResult string params := make(map[string]interface{}) params["appId"] = APPID res, err := client.R(). SetHeader("Content-Type", "application/json"). SetHeader("sign", createSign(params, KEY)). + SetResult(&taskResult). Get(HOST + "/v1/external/eval-standard/algorithmList") - + log.Info("url=" + HOST + "/v1/external/eval-standard/algorithmList") if err != nil { return fmt.Errorf("resty GetJob: %v", err) } - + log.Info("taskResult=" + taskResult) responseStr := string(res.Body()) - log.Info("GetAlgorithmList responseStr=" + responseStr) + log.Info("GetAlgorithmList responseStr=" + responseStr + " res code=" + fmt.Sprint(res.StatusCode())) return nil } @@ -123,21 +125,22 @@ func GetAlgorithmList() error { func GetTaskStatus(jobID string) error { checkSetting() client := getRestyClient() - + var taskResult string params := make(map[string]interface{}) params["appId"] = APPID res, err := client.R(). SetHeader("Content-Type", "application/json"). SetHeader("sign", createSign(params, KEY)). + SetResult(&taskResult). Get(HOST + "/v1/external/eval-standard/query") - + log.Info("url=" + HOST + "/v1/external/eval-standard/query") if err != nil { return fmt.Errorf("resty GetJob: %v", err) } responseStr := string(res.Body()) - log.Info("GetTaskStatus responseStr=" + responseStr) + log.Info("GetTaskStatus responseStr=" + responseStr + " res code=" + fmt.Sprint(res.StatusCode())) return nil } From e37f03ad44d09a2279539ed00ac599245c5d291b Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 13 Sep 2022 16:53:52 +0800 Subject: [PATCH 007/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index d3043ec6e..dbbd21122 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -43,7 +43,7 @@ func checkSetting() { func loginCloudbrain() error { HOST = "http://221.122.70.196:8081/atp-api" - KEY = "222222222222222" + KEY = "1" return nil } From 953d5303c51eb7efe46b77f2e33bf3c9a3072acd Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 13 Sep 2022 17:01:39 +0800 Subject: [PATCH 008/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index dbbd21122..1402ae7a1 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -106,12 +106,17 @@ func GetAlgorithmList() error { params := make(map[string]interface{}) params["appId"] = APPID + sign := createSign(params, KEY) + res, err := client.R(). SetHeader("Content-Type", "application/json"). - SetHeader("sign", createSign(params, KEY)). + SetHeader("appId", APPID). + SetHeader("sign", sign). SetResult(&taskResult). Get(HOST + "/v1/external/eval-standard/algorithmList") - log.Info("url=" + HOST + "/v1/external/eval-standard/algorithmList") + + log.Info("url=" + HOST + "/v1/external/eval-standard/algorithmList" + " sign=" + sign + " appId=" + APPID) + if err != nil { return fmt.Errorf("resty GetJob: %v", err) } @@ -131,6 +136,7 @@ func GetTaskStatus(jobID string) error { res, err := client.R(). SetHeader("Content-Type", "application/json"). + SetHeader("appId", APPID). SetHeader("sign", createSign(params, KEY)). SetResult(&taskResult). Get(HOST + "/v1/external/eval-standard/query") From c093054c71b8a6687be673b65c8e762c78198578 Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 13 Sep 2022 17:29:21 +0800 Subject: [PATCH 009/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index 1402ae7a1..4ff9d8c64 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -75,7 +75,7 @@ func CreateSafetyTask(jobName string, body interface{}) (string, error) { log.Warn("job req:", string(reqPara[:])) params := make(map[string]interface{}) - params["appId"] = APPID + //params["appId"] = APPID res, err := client.R(). SetHeader("Content-Type", "application/json"). @@ -104,7 +104,7 @@ func GetAlgorithmList() error { client := getRestyClient() var taskResult string params := make(map[string]interface{}) - params["appId"] = APPID + //params["appId"] = APPID sign := createSign(params, KEY) @@ -132,7 +132,7 @@ func GetTaskStatus(jobID string) error { client := getRestyClient() var taskResult string params := make(map[string]interface{}) - params["appId"] = APPID + //params["appId"] = APPID res, err := client.R(). SetHeader("Content-Type", "application/json"). From 92644b3638210e1b9c5c7aae3d4ea0d8f8bda727 Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 13 Sep 2022 17:33:09 +0800 Subject: [PATCH 010/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index 4ff9d8c64..c4a150fca 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -118,6 +118,7 @@ func GetAlgorithmList() error { log.Info("url=" + HOST + "/v1/external/eval-standard/algorithmList" + " sign=" + sign + " appId=" + APPID) if err != nil { + log.Info("error =" + err.Error()) return fmt.Errorf("resty GetJob: %v", err) } log.Info("taskResult=" + taskResult) From a1279533426098354dbf598872a080d9fce348bf Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 13 Sep 2022 17:33:40 +0800 Subject: [PATCH 011/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index c4a150fca..276afa292 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -116,14 +116,14 @@ func GetAlgorithmList() error { Get(HOST + "/v1/external/eval-standard/algorithmList") log.Info("url=" + HOST + "/v1/external/eval-standard/algorithmList" + " sign=" + sign + " appId=" + APPID) + responseStr := string(res.Body()) + log.Info("GetAlgorithmList responseStr=" + responseStr + " res code=" + fmt.Sprint(res.StatusCode())) + log.Info("taskResult=" + taskResult) if err != nil { log.Info("error =" + err.Error()) return fmt.Errorf("resty GetJob: %v", err) } - log.Info("taskResult=" + taskResult) - responseStr := string(res.Body()) - log.Info("GetAlgorithmList responseStr=" + responseStr + " res code=" + fmt.Sprint(res.StatusCode())) return nil } From 61e78637aaddcb2f2cc2811c21da1067dec2a81e Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 13 Sep 2022 17:40:58 +0800 Subject: [PATCH 012/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index 276afa292..48da88512 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -69,7 +69,6 @@ func createSign(params map[string]interface{}, signKey string) string { func CreateSafetyTask(jobName string, body interface{}) (string, error) { checkSetting() client := getRestyClient() - var jobResult string reqPara, _ := json.Marshal(body) log.Warn("job req:", string(reqPara[:])) @@ -82,43 +81,44 @@ func CreateSafetyTask(jobName string, body interface{}) (string, error) { SetHeader("sign", createSign(params, KEY)). //SetAuthToken(TOKEN). SetBody(body). - SetResult(&jobResult). Post(HOST + "/v1/external/eval-standard/create") log.Info("url=" + HOST + "/v1/external/eval-standard/create") + responseStr := string(res.Body()) + log.Info("GetAlgorithmList responseStr=" + responseStr + " res code=" + fmt.Sprint(res.StatusCode())) + if err != nil { return "", fmt.Errorf("resty create job: %s", err) } else { - log.Info("result string=" + jobResult + " res code=" + fmt.Sprint(res.StatusCode())) + log.Info("result string=" + " res code=" + fmt.Sprint(res.StatusCode())) } - responseStr := string(res.Body()) - log.Info("responseStr=" + responseStr) - - return jobResult, nil + return "", nil } func GetAlgorithmList() error { checkSetting() client := getRestyClient() - var taskResult string params := make(map[string]interface{}) - //params["appId"] = APPID + jsonResult := make(map[string]interface{}) sign := createSign(params, KEY) res, err := client.R(). SetHeader("Content-Type", "application/json"). SetHeader("appId", APPID). SetHeader("sign", sign). - SetResult(&taskResult). Get(HOST + "/v1/external/eval-standard/algorithmList") log.Info("url=" + HOST + "/v1/external/eval-standard/algorithmList" + " sign=" + sign + " appId=" + APPID) + + jsonerr := json.Unmarshal(res.Body(), &jsonResult) + if jsonerr == nil { + log.Info("jsonResult code=" + fmt.Sprint(jsonResult["msg"])) + } responseStr := string(res.Body()) log.Info("GetAlgorithmList responseStr=" + responseStr + " res code=" + fmt.Sprint(res.StatusCode())) - log.Info("taskResult=" + taskResult) if err != nil { log.Info("error =" + err.Error()) From 47206134e742083aa112db7336bca5495acf4d45 Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 13 Sep 2022 17:48:47 +0800 Subject: [PATCH 013/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 2 +- routers/repo/aisafety.go | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index 48da88512..b9b0c1e86 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -71,7 +71,7 @@ func CreateSafetyTask(jobName string, body interface{}) (string, error) { client := getRestyClient() reqPara, _ := json.Marshal(body) - log.Warn("job req:", string(reqPara[:])) + log.Warn("job req:", string(reqPara)) params := make(map[string]interface{}) //params["appId"] = APPID diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 5a44e5650..902114b71 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -184,6 +184,10 @@ func getJsonContent(url string) (map[string]interface{}, error) { jsonMap := make(map[string]interface{}) err = json.Unmarshal(bytes, &jsonMap) - + if err != nil { + log.Info("json err=" + err.Error()) + } else { + log.Info("json str =" + string(bytes)) + } return jsonMap, nil } From b22f36ba7f26629eac93ff7c8fae565f33887fdb Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 13 Sep 2022 17:50:09 +0800 Subject: [PATCH 014/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 902114b71..cc48d757c 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -181,13 +181,13 @@ func getJsonContent(url string) (map[string]interface{}, error) { log.Info("Get organizations url error=" + err.Error()) return nil, err } + log.Info("json str =" + string(bytes)) + jsonMap := make(map[string]interface{}) err = json.Unmarshal(bytes, &jsonMap) if err != nil { log.Info("json err=" + err.Error()) - } else { - log.Info("json str =" + string(bytes)) } return jsonMap, nil } From c1de119baa1b2e635d50dc893329e8623ca014b6 Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 13 Sep 2022 17:57:45 +0800 Subject: [PATCH 015/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index cc48d757c..676cf5b85 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -22,7 +22,7 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { log.Info("start to create CloudBrainAiSafetyCreate") //jobType := ctx.Query("jobType") //if jobType == string(models.JobTypeBenchmark) { - jsonMap, err := getJsonContent("http://192.168.207.34:8065/Test_zap1234/openi_aisafety/src/branch/master/result/0301.json") + jsonMap, err := getJsonContent("http://192.168.207.34:8065/Test_zap1234/openi_aisafety/raw/branch/master/result/0301.json") if err == nil { aisafety.GetAlgorithmList() aisafety.CreateSafetyTask("test", jsonMap) From 18441e5c00ccee7c575844f9903177cffdf9afca Mon Sep 17 00:00:00 2001 From: zouap Date: Tue, 13 Sep 2022 17:59:09 +0800 Subject: [PATCH 016/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index b9b0c1e86..2508f806d 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -78,6 +78,7 @@ func CreateSafetyTask(jobName string, body interface{}) (string, error) { res, err := client.R(). SetHeader("Content-Type", "application/json"). + SetHeader("appId", APPID). SetHeader("sign", createSign(params, KEY)). //SetAuthToken(TOKEN). SetBody(body). From c763bd9aaba825a8be93fc1a151385f59cf98554 Mon Sep 17 00:00:00 2001 From: zouap Date: Wed, 14 Sep 2022 09:21:44 +0800 Subject: [PATCH 017/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 17 +++++++++-------- routers/repo/ai_model_manage.go | 12 +----------- routers/repo/aisafety.go | 9 +++++++-- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index 2508f806d..980582905 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -66,7 +66,7 @@ func createSign(params map[string]interface{}, signKey string) string { return strings.ToUpper(hex.EncodeToString(h.Sum(nil))) } -func CreateSafetyTask(jobName string, body interface{}) (string, error) { +func CreateSafetyTask(taskId string, body interface{}) (string, error) { checkSetting() client := getRestyClient() @@ -74,7 +74,7 @@ func CreateSafetyTask(jobName string, body interface{}) (string, error) { log.Warn("job req:", string(reqPara)) params := make(map[string]interface{}) - //params["appId"] = APPID + params["unionId"] = taskId res, err := client.R(). SetHeader("Content-Type", "application/json"). @@ -82,11 +82,11 @@ func CreateSafetyTask(jobName string, body interface{}) (string, error) { SetHeader("sign", createSign(params, KEY)). //SetAuthToken(TOKEN). SetBody(body). - Post(HOST + "/v1/external/eval-standard/create") - log.Info("url=" + HOST + "/v1/external/eval-standard/create") + Post(HOST + "/v1/external/eval-standard/create?unionId=" + taskId) + log.Info("url=" + HOST + "/v1/external/eval-standard/create?unionId=" + taskId) responseStr := string(res.Body()) - log.Info("GetAlgorithmList responseStr=" + responseStr + " res code=" + fmt.Sprint(res.StatusCode())) + log.Info("CreateSafetyTask responseStr=" + responseStr + " res code=" + fmt.Sprint(res.StatusCode())) if err != nil { return "", fmt.Errorf("resty create job: %s", err) @@ -134,15 +134,16 @@ func GetTaskStatus(jobID string) error { client := getRestyClient() var taskResult string params := make(map[string]interface{}) - //params["appId"] = APPID + params["serialNo"] = jobID res, err := client.R(). SetHeader("Content-Type", "application/json"). SetHeader("appId", APPID). SetHeader("sign", createSign(params, KEY)). SetResult(&taskResult). - Get(HOST + "/v1/external/eval-standard/query") - log.Info("url=" + HOST + "/v1/external/eval-standard/query") + Get(HOST + "/v1/external/eval-standard/query?serialNo=" + jobID) + + log.Info("url=" + HOST + "/v1/external/eval-standard/query?serialNo=" + jobID) if err != nil { return fmt.Errorf("resty GetJob: %v", err) } diff --git a/routers/repo/ai_model_manage.go b/routers/repo/ai_model_manage.go index d01539a75..8e2f42680 100644 --- a/routers/repo/ai_model_manage.go +++ b/routers/repo/ai_model_manage.go @@ -84,17 +84,7 @@ func saveModelByParameters(jobId string, versionName string, name string, versio } cloudType = models.TypeCloudBrainOne } - // else if cloudType == models.TypeC2Net { - // if aiTask.ComputeResource == models.NPUResource { - // modelPath, modelSize, err = downloadModelFromCloudBrainTwo(id, aiTask.JobName, "", aiTask.TrainUrl, modelSelectedFile) - // if err != nil { - // log.Info("download model from CloudBrainTwo faild." + err.Error()) - // return err - // } - // } else if aiTask.ComputeResource == models.GPUResource { - - // } - // } + accuracy := make(map[string]string) accuracy["F1"] = "" accuracy["Recall"] = "" diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 676cf5b85..8e2139a20 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -6,6 +6,7 @@ import ( "net/http" "os" "strings" + "time" "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/aisafety" @@ -16,17 +17,21 @@ import ( "code.gitea.io/gitea/modules/storage" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/services/cloudbrain/resource" + uuid "github.com/satori/go.uuid" ) func CloudBrainAiSafetyCreateTest(ctx *context.Context) { log.Info("start to create CloudBrainAiSafetyCreate") + uuid := uuid.NewV4() + id := uuid.String() //jobType := ctx.Query("jobType") //if jobType == string(models.JobTypeBenchmark) { jsonMap, err := getJsonContent("http://192.168.207.34:8065/Test_zap1234/openi_aisafety/raw/branch/master/result/0301.json") if err == nil { aisafety.GetAlgorithmList() - aisafety.CreateSafetyTask("test", jsonMap) - //aisafety.GetTaskStatus() + aisafety.CreateSafetyTask(id, jsonMap) + time.Sleep(time.Duration(2) * time.Second) + aisafety.GetTaskStatus(id) } //} } From 5e378372f1d4837ba8e099253ddda924fa35276b Mon Sep 17 00:00:00 2001 From: zouap Date: Wed, 14 Sep 2022 09:41:13 +0800 Subject: [PATCH 018/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index 980582905..8102b7048 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -66,7 +66,7 @@ func createSign(params map[string]interface{}, signKey string) string { return strings.ToUpper(hex.EncodeToString(h.Sum(nil))) } -func CreateSafetyTask(taskId string, body interface{}) (string, error) { +func CreateSafetyTask(taskId string, name string, body interface{}) (string, error) { checkSetting() client := getRestyClient() @@ -75,6 +75,7 @@ func CreateSafetyTask(taskId string, body interface{}) (string, error) { params := make(map[string]interface{}) params["unionId"] = taskId + params["evalName"] = name res, err := client.R(). SetHeader("Content-Type", "application/json"). @@ -82,8 +83,8 @@ func CreateSafetyTask(taskId string, body interface{}) (string, error) { SetHeader("sign", createSign(params, KEY)). //SetAuthToken(TOKEN). SetBody(body). - Post(HOST + "/v1/external/eval-standard/create?unionId=" + taskId) - log.Info("url=" + HOST + "/v1/external/eval-standard/create?unionId=" + taskId) + Post(HOST + "/v1/external/eval-standard/create?unionId=" + taskId + "&evalName=" + name) + log.Info("url=" + HOST + "/v1/external/eval-standard/create?unionId=" + taskId + "&evalName=" + name) responseStr := string(res.Body()) log.Info("CreateSafetyTask responseStr=" + responseStr + " res code=" + fmt.Sprint(res.StatusCode())) From 5a36a304c0690da58d05968c382c74e732062223 Mon Sep 17 00:00:00 2001 From: zouap Date: Wed, 14 Sep 2022 09:49:59 +0800 Subject: [PATCH 019/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 8e2139a20..89c9c189e 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -29,7 +29,7 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { jsonMap, err := getJsonContent("http://192.168.207.34:8065/Test_zap1234/openi_aisafety/raw/branch/master/result/0301.json") if err == nil { aisafety.GetAlgorithmList() - aisafety.CreateSafetyTask(id, jsonMap) + aisafety.CreateSafetyTask(id, "test", jsonMap) time.Sleep(time.Duration(2) * time.Second) aisafety.GetTaskStatus(id) } From 99672eedff4b69804a07aba513f0dd80824c14a2 Mon Sep 17 00:00:00 2001 From: zouap Date: Wed, 14 Sep 2022 10:55:44 +0800 Subject: [PATCH 020/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 77 +++++++++++++++++++++++++++++++++++++++++------ routers/repo/aisafety.go | 33 +++++++++++--------- 2 files changed, 87 insertions(+), 23 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index 8102b7048..aff2e28fc 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -5,6 +5,7 @@ import ( "encoding/hex" "encoding/json" "fmt" + "net/url" "sort" "strings" @@ -19,6 +20,18 @@ var ( KEY string ) +type TaskReq struct { + UnionId string //评测任务ID,唯一标识,由后端生成UUID + EvalName string //评测任务名称 + EvalContent string //评测任务描述 + TLPath string // + Indicators []string //评测指标,由GetAlgorithmList接口返回的指标列表中的title属性值 + CDPath string + CDName string //对抗数据集名称 + BDPath string + BDName string //原数据集名称 +} + const ( APPID = "1" LogPageSize = 500 @@ -66,25 +79,71 @@ func createSign(params map[string]interface{}, signKey string) string { return strings.ToUpper(hex.EncodeToString(h.Sum(nil))) } -func CreateSafetyTask(taskId string, name string, body interface{}) (string, error) { +func getParams(req TaskReq) (map[string]interface{}, string) { + params := make(map[string]interface{}) + reStr := "" + + params["unionId"] = req.UnionId + reStr += "unionId=" + req.UnionId + params["evalName"] = req.EvalName + reStr += "&evalName=" + req.EvalName + params["evalContent"] = req.EvalContent + reStr += "&evalContent=" + url.QueryEscape(req.EvalContent) + params["TLPath"] = req.TLPath + reStr += "&TLPath=" + url.QueryEscape(req.TLPath) + + params["CDName"] = req.CDName + reStr += "&CDName=" + url.QueryEscape(req.CDName) + + params["BDName"] = req.BDName + reStr += "&BDName=" + url.QueryEscape(req.BDName) + + if req.CDPath != "" { + params["CDPath"] = req.CDPath + reStr += "&CDPath=" + url.QueryEscape(req.CDPath) + } + if req.BDPath != "" { + params["BDPath"] = req.BDPath + reStr += "&BDPath=" + url.QueryEscape(req.BDPath) + } + indicators := "" + if len(req.Indicators) > 0 { + for _, tmp := range req.Indicators { + indicators += tmp + "," + } + } + if len(indicators) > 0 { + indicators = indicators[0 : len(indicators)-1] + } + + params["Indicators"] = indicators + reStr += "&Indicators=" + url.QueryEscape(indicators) + + return params, reStr +} + +func CreateSafetyTask(req TaskReq, json string) (string, error) { checkSetting() client := getRestyClient() - reqPara, _ := json.Marshal(body) - log.Warn("job req:", string(reqPara)) + //reqPara, _ := json.Marshal(body) + log.Warn("job req:", json) - params := make(map[string]interface{}) - params["unionId"] = taskId - params["evalName"] = name + params, urlQuerys := getParams(req) + + bodyMap := make(map[string]interface{}) + reJsonMap := make(map[string]interface{}) + reJsonMap["resJson"] = json + bodyMap["externalEvalParam"] = reJsonMap res, err := client.R(). SetHeader("Content-Type", "application/json"). SetHeader("appId", APPID). SetHeader("sign", createSign(params, KEY)). //SetAuthToken(TOKEN). - SetBody(body). - Post(HOST + "/v1/external/eval-standard/create?unionId=" + taskId + "&evalName=" + name) - log.Info("url=" + HOST + "/v1/external/eval-standard/create?unionId=" + taskId + "&evalName=" + name) + SetBody(bodyMap). + Post(HOST + "/v1/external/eval-standard/create?" + urlQuerys) + log.Info("url=" + HOST + "/v1/external/eval-standard/create?" + urlQuerys) responseStr := string(res.Body()) log.Info("CreateSafetyTask responseStr=" + responseStr + " res code=" + fmt.Sprint(res.StatusCode())) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 89c9c189e..b2a2e10d8 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -1,7 +1,6 @@ package repo import ( - "encoding/json" "io/ioutil" "net/http" "os" @@ -26,10 +25,21 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { id := uuid.String() //jobType := ctx.Query("jobType") //if jobType == string(models.JobTypeBenchmark) { - jsonMap, err := getJsonContent("http://192.168.207.34:8065/Test_zap1234/openi_aisafety/raw/branch/master/result/0301.json") + jsonStr, err := getJsonContent("http://192.168.207.34:8065/Test_zap1234/openi_aisafety/raw/branch/master/result/0301.json") if err == nil { + + req := aisafety.TaskReq{ + UnionId: id, + EvalName: "test", + EvalContent: "test", + TLPath: "test", + Indicators: []string{"ACC,CAV"}, + CDName: "cifar-1000", + BDName: "cifar-1000-fgsm", + } + aisafety.GetAlgorithmList() - aisafety.CreateSafetyTask(id, "test", jsonMap) + aisafety.CreateSafetyTask(req, jsonStr) time.Sleep(time.Duration(2) * time.Second) aisafety.GetTaskStatus(id) } @@ -173,26 +183,21 @@ func CloudBrainAiSafetyCreate(ctx *context.Context) { } -func getJsonContent(url string) (map[string]interface{}, error) { +func getJsonContent(url string) (string, error) { resp, err := http.Get(url) if err != nil || resp.StatusCode != 200 { log.Info("Get organizations url error=" + err.Error()) - return nil, err + return "", err } bytes, err := ioutil.ReadAll(resp.Body) resp.Body.Close() if err != nil { log.Info("Get organizations url error=" + err.Error()) - return nil, err + return "", err } - log.Info("json str =" + string(bytes)) + str := string(bytes) + log.Info("json str =" + str) - jsonMap := make(map[string]interface{}) - - err = json.Unmarshal(bytes, &jsonMap) - if err != nil { - log.Info("json err=" + err.Error()) - } - return jsonMap, nil + return str, nil } From ba9f4804ee54d6745a45279355690bd4e2656b1e Mon Sep 17 00:00:00 2001 From: zouap Date: Wed, 14 Sep 2022 11:05:05 +0800 Subject: [PATCH 021/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index b2a2e10d8..f8d1fd661 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -34,8 +34,8 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { EvalContent: "test", TLPath: "test", Indicators: []string{"ACC,CAV"}, - CDName: "cifar-1000", - BDName: "cifar-1000-fgsm", + CDName: "cifar-1000-fgsm", + BDName: "cifar-1000", } aisafety.GetAlgorithmList() From 7bb87bbc098a4791c22397950c018c99a10af965 Mon Sep 17 00:00:00 2001 From: zouap Date: Wed, 14 Sep 2022 11:05:51 +0800 Subject: [PATCH 022/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index f8d1fd661..776b451af 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -34,7 +34,7 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { EvalContent: "test", TLPath: "test", Indicators: []string{"ACC,CAV"}, - CDName: "cifar-1000-fgsm", + CDName: "cifar-1000-BA", BDName: "cifar-1000", } From 19cd214b4f1c21d750207e9166746b25296178af Mon Sep 17 00:00:00 2001 From: zouap Date: Wed, 14 Sep 2022 11:12:11 +0800 Subject: [PATCH 023/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index aff2e28fc..4ca133d89 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -204,12 +204,14 @@ func GetTaskStatus(jobID string) error { Get(HOST + "/v1/external/eval-standard/query?serialNo=" + jobID) log.Info("url=" + HOST + "/v1/external/eval-standard/query?serialNo=" + jobID) - if err != nil { - return fmt.Errorf("resty GetJob: %v", err) - } responseStr := string(res.Body()) log.Info("GetTaskStatus responseStr=" + responseStr + " res code=" + fmt.Sprint(res.StatusCode())) + if err != nil { + log.Info("error =" + err.Error()) + return fmt.Errorf("resty GetJob: %v", err) + } + return nil } From 0be733899fcc49a67b388cfcafa9b9884ff23d80 Mon Sep 17 00:00:00 2001 From: zouap Date: Wed, 14 Sep 2022 11:13:44 +0800 Subject: [PATCH 024/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 776b451af..12c188e22 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -34,8 +34,8 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { EvalContent: "test", TLPath: "test", Indicators: []string{"ACC,CAV"}, - CDName: "cifar-1000-BA", - BDName: "cifar-1000", + CDName: "cifar10_1000_BA", + BDName: "cifar10_1000", } aisafety.GetAlgorithmList() From 2111f00f22e41a4ba9081c8c56adac014346c2f6 Mon Sep 17 00:00:00 2001 From: zouap Date: Wed, 14 Sep 2022 14:02:53 +0800 Subject: [PATCH 025/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index 4ca133d89..8bb1ef078 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -122,20 +122,23 @@ func getParams(req TaskReq) (map[string]interface{}, string) { return params, reStr } -func CreateSafetyTask(req TaskReq, json string) (string, error) { +func CreateSafetyTask(req TaskReq, jsonstr string) (string, error) { checkSetting() client := getRestyClient() //reqPara, _ := json.Marshal(body) - log.Warn("job req:", json) + log.Warn("job req:", jsonstr) params, urlQuerys := getParams(req) bodyMap := make(map[string]interface{}) reJsonMap := make(map[string]interface{}) - reJsonMap["resJson"] = json + reJsonMap["resJson"] = jsonstr bodyMap["externalEvalParam"] = reJsonMap + reqPara, _ := json.Marshal(bodyMap) + log.Warn("job req json:", string(reqPara)) + res, err := client.R(). SetHeader("Content-Type", "application/json"). SetHeader("appId", APPID). From 1976831a192a6d7fcad68bab35c7af3c57feb647 Mon Sep 17 00:00:00 2001 From: zouap Date: Wed, 14 Sep 2022 14:09:08 +0800 Subject: [PATCH 026/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index 8bb1ef078..c7949ac50 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -132,9 +132,9 @@ func CreateSafetyTask(req TaskReq, jsonstr string) (string, error) { params, urlQuerys := getParams(req) bodyMap := make(map[string]interface{}) - reJsonMap := make(map[string]interface{}) - reJsonMap["resJson"] = jsonstr - bodyMap["externalEvalParam"] = reJsonMap + //reJsonMap := make(map[string]interface{}) + bodyMap["resJson"] = jsonstr + //bodyMap["externalEvalParam"] = reJsonMap reqPara, _ := json.Marshal(bodyMap) log.Warn("job req json:", string(reqPara)) From a4a176c8fd7bf6651417793db0a0dafad07dbe51 Mon Sep 17 00:00:00 2001 From: zouap Date: Wed, 14 Sep 2022 14:19:04 +0800 Subject: [PATCH 027/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 8 +++++++- routers/repo/aisafety.go | 13 ++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index c7949ac50..a0fcba11b 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -157,8 +157,14 @@ func CreateSafetyTask(req TaskReq, jsonstr string) (string, error) { log.Info("result string=" + " res code=" + fmt.Sprint(res.StatusCode())) } - return "", nil + reMap := make(map[string]interface{}) + err = json.Unmarshal(res.Body(), &reMap) + if err == nil && reMap["code"] == "0" { + dataMap := (reMap["data"]).(map[string]interface{}) + return fmt.Sprint(dataMap["serialNo"]), nil + } + return "", nil } func GetAlgorithmList() error { diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 12c188e22..6f6137ce0 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -27,7 +27,6 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { //if jobType == string(models.JobTypeBenchmark) { jsonStr, err := getJsonContent("http://192.168.207.34:8065/Test_zap1234/openi_aisafety/raw/branch/master/result/0301.json") if err == nil { - req := aisafety.TaskReq{ UnionId: id, EvalName: "test", @@ -37,11 +36,15 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { CDName: "cifar10_1000_BA", BDName: "cifar10_1000", } - aisafety.GetAlgorithmList() - aisafety.CreateSafetyTask(req, jsonStr) - time.Sleep(time.Duration(2) * time.Second) - aisafety.GetTaskStatus(id) + serialNo, err := aisafety.CreateSafetyTask(req, jsonStr) + if err == nil { + log.Info("serialNo=" + serialNo) + time.Sleep(time.Duration(2) * time.Second) + aisafety.GetTaskStatus(serialNo) + } else { + log.Info("CreateSafetyTask error," + err.Error()) + } } //} } From 442fe4799e28faaa089d3fb8811565aac32b9df0 Mon Sep 17 00:00:00 2001 From: zouap Date: Wed, 14 Sep 2022 14:51:48 +0800 Subject: [PATCH 028/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 27 ++++++++++++++++++++------- routers/repo/aisafety.go | 17 ++++++++++------- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index a0fcba11b..1e0f713f3 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -167,7 +167,7 @@ func CreateSafetyTask(req TaskReq, jsonstr string) (string, error) { return "", nil } -func GetAlgorithmList() error { +func GetAlgorithmList() (map[string]interface{}, error) { checkSetting() client := getRestyClient() params := make(map[string]interface{}) @@ -192,13 +192,20 @@ func GetAlgorithmList() error { if err != nil { log.Info("error =" + err.Error()) - return fmt.Errorf("resty GetJob: %v", err) + return nil, fmt.Errorf("resty GetJob: %v", err) + } else { + reMap := make(map[string]interface{}) + err = json.Unmarshal(res.Body(), &reMap) + if err == nil && reMap["code"] == "0" { + return reMap, nil + } else { + return nil, fmt.Errorf("get error,code not 0") + } } - return nil } -func GetTaskStatus(jobID string) error { +func GetTaskStatus(jobID string) (map[string]interface{}, error) { checkSetting() client := getRestyClient() var taskResult string @@ -219,8 +226,14 @@ func GetTaskStatus(jobID string) error { if err != nil { log.Info("error =" + err.Error()) - return fmt.Errorf("resty GetJob: %v", err) + return nil, fmt.Errorf("resty GetJob: %v", err) + } else { + reMap := make(map[string]interface{}) + err = json.Unmarshal(res.Body(), &reMap) + if err == nil && reMap["code"] == "0" { + return reMap, nil + } else { + return nil, fmt.Errorf("get error,code not 0") + } } - - return nil } diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 6f6137ce0..af4608a25 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -23,7 +23,7 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { log.Info("start to create CloudBrainAiSafetyCreate") uuid := uuid.NewV4() id := uuid.String() - //jobType := ctx.Query("jobType") + seriaNoParas := ctx.Query("serialNo") //if jobType == string(models.JobTypeBenchmark) { jsonStr, err := getJsonContent("http://192.168.207.34:8065/Test_zap1234/openi_aisafety/raw/branch/master/result/0301.json") if err == nil { @@ -37,13 +37,16 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { BDName: "cifar10_1000", } aisafety.GetAlgorithmList() - serialNo, err := aisafety.CreateSafetyTask(req, jsonStr) - if err == nil { - log.Info("serialNo=" + serialNo) - time.Sleep(time.Duration(2) * time.Second) - aisafety.GetTaskStatus(serialNo) + if seriaNoParas != "" { + aisafety.GetTaskStatus(seriaNoParas) } else { - log.Info("CreateSafetyTask error," + err.Error()) + serialNo, err := aisafety.CreateSafetyTask(req, jsonStr) + if err == nil { + log.Info("serialNo=" + serialNo) + time.Sleep(time.Duration(2) * time.Second) + } else { + log.Info("CreateSafetyTask error," + err.Error()) + } } } //} From 9fb31cee9ea8937747f5b4c792223312e19d48f2 Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 15 Sep 2022 15:08:40 +0800 Subject: [PATCH 029/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index af4608a25..ab5091ae8 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -25,16 +25,16 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { id := uuid.String() seriaNoParas := ctx.Query("serialNo") //if jobType == string(models.JobTypeBenchmark) { - jsonStr, err := getJsonContent("http://192.168.207.34:8065/Test_zap1234/openi_aisafety/raw/branch/master/result/0301.json") + jsonStr, err := getJsonContent("http://192.168.207.34:8065/Test_zap1234/openi_aisafety/raw/branch/master/result/0302.json") if err == nil { req := aisafety.TaskReq{ UnionId: id, - EvalName: "test", - EvalContent: "test", - TLPath: "test", + EvalName: "test1", + EvalContent: "test1", + TLPath: "test1", Indicators: []string{"ACC,CAV"}, - CDName: "cifar10_1000_BA", - BDName: "cifar10_1000", + CDName: "jzl_adv_data", + BDName: "jzl_cln_data", } aisafety.GetAlgorithmList() if seriaNoParas != "" { From a77241d8f97912697207df146de5968932a95ecf Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 15 Sep 2022 15:21:29 +0800 Subject: [PATCH 030/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 1 + 1 file changed, 1 insertion(+) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index ab5091ae8..911d9c339 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -44,6 +44,7 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { if err == nil { log.Info("serialNo=" + serialNo) time.Sleep(time.Duration(2) * time.Second) + aisafety.GetTaskStatus(serialNo) } else { log.Info("CreateSafetyTask error," + err.Error()) } From 8cc80f789a34a2aabeb16cd2eceda5018f168ea0 Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 22 Sep 2022 16:20:42 +0800 Subject: [PATCH 031/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 911d9c339..654de0a58 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -24,15 +24,16 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { uuid := uuid.NewV4() id := uuid.String() seriaNoParas := ctx.Query("serialNo") + fileName := ctx.Query("fileName") //if jobType == string(models.JobTypeBenchmark) { - jsonStr, err := getJsonContent("http://192.168.207.34:8065/Test_zap1234/openi_aisafety/raw/branch/master/result/0302.json") + jsonStr, err := getJsonContent("http://192.168.207.34:8065/Test_zap1234/openi_aisafety/raw/branch/master/result/" + fileName) if err == nil { req := aisafety.TaskReq{ UnionId: id, EvalName: "test1", EvalContent: "test1", TLPath: "test1", - Indicators: []string{"ACC,CAV"}, + Indicators: []string{"ACC,ASS"}, CDName: "jzl_adv_data", BDName: "jzl_cln_data", } From de49a68c38a22c56216d5745680c4ef31ef46b22 Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 22 Sep 2022 16:31:28 +0800 Subject: [PATCH 032/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 654de0a58..7136da67b 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -25,6 +25,7 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { id := uuid.String() seriaNoParas := ctx.Query("serialNo") fileName := ctx.Query("fileName") + //if jobType == string(models.JobTypeBenchmark) { jsonStr, err := getJsonContent("http://192.168.207.34:8065/Test_zap1234/openi_aisafety/raw/branch/master/result/" + fileName) if err == nil { @@ -34,8 +35,8 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { EvalContent: "test1", TLPath: "test1", Indicators: []string{"ACC,ASS"}, - CDName: "jzl_adv_data", - BDName: "jzl_cln_data", + CDName: "CIFAR10_1000_FGSM对抗样本", + BDName: "CIFAR10_1000基础数据集", } aisafety.GetAlgorithmList() if seriaNoParas != "" { From 3dbe3ac3d90ba55c461192ec0a8ae73d7159eb98 Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 22 Sep 2022 16:36:39 +0800 Subject: [PATCH 033/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index 1e0f713f3..f4a63d29b 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -127,7 +127,7 @@ func CreateSafetyTask(req TaskReq, jsonstr string) (string, error) { client := getRestyClient() //reqPara, _ := json.Marshal(body) - log.Warn("job req:", jsonstr) + //log.Warn("job req:", jsonstr) params, urlQuerys := getParams(req) @@ -136,8 +136,8 @@ func CreateSafetyTask(req TaskReq, jsonstr string) (string, error) { bodyMap["resJson"] = jsonstr //bodyMap["externalEvalParam"] = reJsonMap - reqPara, _ := json.Marshal(bodyMap) - log.Warn("job req json:", string(reqPara)) + //reqPara, _ := json.Marshal(bodyMap) + //log.Warn("job req json:", string(reqPara)) res, err := client.R(). SetHeader("Content-Type", "application/json"). From 1fd3cb4269484a1d113c692ab4d2920561fed915 Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 22 Sep 2022 16:41:12 +0800 Subject: [PATCH 034/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 43 ++++++++++++++++++++----------------------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 7136da67b..902290b5b 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -27,32 +27,29 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { fileName := ctx.Query("fileName") //if jobType == string(models.JobTypeBenchmark) { - jsonStr, err := getJsonContent("http://192.168.207.34:8065/Test_zap1234/openi_aisafety/raw/branch/master/result/" + fileName) - if err == nil { - req := aisafety.TaskReq{ - UnionId: id, - EvalName: "test1", - EvalContent: "test1", - TLPath: "test1", - Indicators: []string{"ACC,ASS"}, - CDName: "CIFAR10_1000_FGSM对抗样本", - BDName: "CIFAR10_1000基础数据集", - } - aisafety.GetAlgorithmList() - if seriaNoParas != "" { - aisafety.GetTaskStatus(seriaNoParas) + req := aisafety.TaskReq{ + UnionId: id, + EvalName: "test1", + EvalContent: "test1", + TLPath: "test1", + Indicators: []string{"ACC,ASS"}, + CDName: "CIFAR10_1000_FGSM对抗样本", + BDName: "CIFAR10_1000基础数据集", + } + aisafety.GetAlgorithmList() + if seriaNoParas != "" { + aisafety.GetTaskStatus(seriaNoParas) + } else { + jsonStr, err := getJsonContent("http://192.168.207.34:8065/Test_zap1234/openi_aisafety/raw/branch/master/result/" + fileName) + serialNo, err := aisafety.CreateSafetyTask(req, jsonStr) + if err == nil { + log.Info("serialNo=" + serialNo) + time.Sleep(time.Duration(2) * time.Second) + aisafety.GetTaskStatus(serialNo) } else { - serialNo, err := aisafety.CreateSafetyTask(req, jsonStr) - if err == nil { - log.Info("serialNo=" + serialNo) - time.Sleep(time.Duration(2) * time.Second) - aisafety.GetTaskStatus(serialNo) - } else { - log.Info("CreateSafetyTask error," + err.Error()) - } + log.Info("CreateSafetyTask error," + err.Error()) } } - //} } func CloudBrainAiSafetyCreate(ctx *context.Context) { From 23e548066d9ec698a286890102e34d513791847a Mon Sep 17 00:00:00 2001 From: zouap Date: Fri, 23 Sep 2022 10:31:18 +0800 Subject: [PATCH 035/180] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8C=87=E6=A0=87?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index f4a63d29b..e4c8c8ecc 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -109,7 +109,7 @@ func getParams(req TaskReq) (map[string]interface{}, string) { indicators := "" if len(req.Indicators) > 0 { for _, tmp := range req.Indicators { - indicators += tmp + "," + indicators += tmp + "|" } } if len(indicators) > 0 { From d3e1f83022417e0f813f0d19f511697dd2d40ceb Mon Sep 17 00:00:00 2001 From: zouap Date: Fri, 23 Sep 2022 10:35:26 +0800 Subject: [PATCH 036/180] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8C=87=E6=A0=87?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 902290b5b..f5f799689 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -203,7 +203,7 @@ func getJsonContent(url string) (string, error) { return "", err } str := string(bytes) - log.Info("json str =" + str) + //log.Info("json str =" + str) return str, nil } From 5145b3cbefc54b5c048f0deb9195ba466b1806de Mon Sep 17 00:00:00 2001 From: zouap Date: Fri, 23 Sep 2022 11:37:11 +0800 Subject: [PATCH 037/180] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8C=87=E6=A0=87?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index e4c8c8ecc..108851c6f 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -117,6 +117,7 @@ func getParams(req TaskReq) (map[string]interface{}, string) { } params["Indicators"] = indicators + log.Info("indicators=" + indicators) reStr += "&Indicators=" + url.QueryEscape(indicators) return params, reStr From fcbe4b7c09c79d3b48d9ebc9a5019ba6d26529f3 Mon Sep 17 00:00:00 2001 From: zouap Date: Fri, 23 Sep 2022 11:39:40 +0800 Subject: [PATCH 038/180] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8C=87=E6=A0=87?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index f5f799689..adbffc89a 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -32,7 +32,7 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { EvalName: "test1", EvalContent: "test1", TLPath: "test1", - Indicators: []string{"ACC,ASS"}, + Indicators: []string{"ACC", "ASS"}, CDName: "CIFAR10_1000_FGSM对抗样本", BDName: "CIFAR10_1000基础数据集", } From 6400af1d7bb3d8ea539ff8dda6822a43d3752353 Mon Sep 17 00:00:00 2001 From: zouap Date: Mon, 26 Sep 2022 15:32:52 +0800 Subject: [PATCH 039/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- models/cloudbrain.go | 5 ++ routers/repo/aisafety.go | 197 ++++++++++++++++++++++++++++++++++----------- routers/repo/cloudbrain.go | 2 + 3 files changed, 157 insertions(+), 47 deletions(-) diff --git a/models/cloudbrain.go b/models/cloudbrain.go index 5a3d9e584..48ecc3998 100755 --- a/models/cloudbrain.go +++ b/models/cloudbrain.go @@ -1953,6 +1953,11 @@ func GetBenchmarkCountByUserID(userID int64) (int, error) { return int(count), err } +func GetModelSafetyCountByUserID(userID int64) (int, error) { + count, err := x.In("status", JobWaiting, JobRunning).And("job_type = ? and user_id = ?", string(JobTypeModelSafety), userID).Count(new(Cloudbrain)) + return int(count), err +} + func GetWaitingCloudbrainCount(cloudbrainType int, computeResource string, jobTypes ...JobType) (int64, error) { sess := x.Where("status=? and type=?", JobWaiting, cloudbrainType) if len(jobTypes) > 0 { diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index adbffc89a..436ae41da 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -1,9 +1,12 @@ package repo import ( + "encoding/json" + "errors" "io/ioutil" "net/http" "os" + "strconv" "strings" "time" @@ -56,104 +59,134 @@ func CloudBrainAiSafetyCreate(ctx *context.Context) { ctx.Data["PageIsCloudBrain"] = true displayJobName := ctx.Query("DisplayJobName") jobName := util.ConvertDisplayJobNameToJobName(displayJobName) - image := strings.TrimSpace(ctx.Query("Image")) - command := "python /code/inferench.py > " + cloudbrain.ModelMountPath + "/" + displayJobName + "-" + cloudbrain.LogFile - codePath := setting.JobPath + jobName + cloudbrain.CodeMountPath + + taskType := ctx.QueryInt("type") description := ctx.Query("Description") - specId := ctx.QueryInt64("SpecId") ctx.Data["description"] = description repo := ctx.Repo.Repository - tasks, err := models.GetCloudbrainsByDisplayJobName(repo.ID, string(models.JobTypeBenchmark), displayJobName) + tasks, err := models.GetCloudbrainsByDisplayJobName(repo.ID, string(models.JobTypeModelSafety), 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", tplCloudBrainBenchmarkNew, nil) + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr("the job name did already exist", tplCloudBrainModelSafetyNew, nil) return } } else { if !models.IsErrJobNotExist(err) { log.Error("system error, %v", err, ctx.Data["MsgID"]) - cloudBrainNewDataPrepare(ctx) - ctx.RenderWithErr("system error", tplCloudBrainBenchmarkNew, nil) + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr("system error", tplCloudBrainModelSafetyNew, nil) return } } if !jobNamePattern.MatchString(jobName) { - cloudBrainNewDataPrepare(ctx) - ctx.RenderWithErr(ctx.Tr("repo.cloudbrain_jobname_err"), tplCloudBrainBenchmarkNew, nil) + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr(ctx.Tr("repo.cloudbrain_jobname_err"), tplCloudBrainModelSafetyNew, nil) return } - spec, err := resource.GetAndCheckSpec(ctx.User.ID, specId, models.FindSpecsOptions{ - JobType: models.JobTypeBenchmark, - ComputeResource: models.GPU, - Cluster: models.OpenICluster, - AiCenterCode: models.AICenterOfCloudBrainOne}) - if err != nil || spec == nil { - cloudBrainNewDataPrepare(ctx) - ctx.RenderWithErr("Resource specification not available", tplCloudBrainBenchmarkNew, nil) - return - } - - count, err := models.GetBenchmarkCountByUserID(ctx.User.ID) + count, err := models.GetModelSafetyCountByUserID(ctx.User.ID) if err != nil { log.Error("GetCloudbrainCountByUserID failed:%v", err, ctx.Data["MsgID"]) - cloudBrainNewDataPrepare(ctx) - ctx.RenderWithErr("system error", tplCloudBrainBenchmarkNew, nil) + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr("system error", tplCloudBrainModelSafetyNew, nil) 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"), tplCloudBrainBenchmarkNew, nil) + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr(ctx.Tr("repo.cloudbrain.morethanonejob"), tplCloudBrainModelSafetyNew, nil) return } } + if taskType == models.TypeCloudBrainTwo { + createForNPU(ctx) + } else if taskType == models.TypeCloudBrainOne { + createForGPU(ctx, jobName) + } + + ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/cloudbrain/benchmark") +} + +func createForGPU(ctx *context.Context, jobName string) { + BootFile := ctx.Query("BootFile") + displayJobName := ctx.Query("DisplayJobName") + description := ctx.Query("Description") + image := strings.TrimSpace(ctx.Query("Image")) + srcDataset := ctx.Query("srcDataset") //uuid + combatDataset := ctx.Query("combatDataset") //uuid + evaluationIndex := ctx.Query("evaluationIndex") + Params := ctx.Query("RunParaList") + specId := ctx.QueryInt64("SpecId") + TrainUrl := ctx.Query("TrainUrl") + CkptName := ctx.Query("CkptName") + ckptUrl := setting.Attachment.Minio.RealPath + TrainUrl + CkptName + log.Info("ckpt url:" + ckptUrl) + spec, err := resource.GetAndCheckSpec(ctx.User.ID, specId, models.FindSpecsOptions{ + JobType: models.JobTypeBenchmark, + ComputeResource: models.GPU, + Cluster: models.OpenICluster, + AiCenterCode: models.AICenterOfCloudBrainOne}) + if err != nil || spec == nil { + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr("Resource specification not available", tplCloudBrainModelSafetyNew, nil) + return + } + + repo := ctx.Repo.Repository + codePath := setting.JobPath + jobName + cloudbrain.CodeMountPath os.RemoveAll(codePath) if err := downloadCode(repo, codePath, cloudbrain.DefaultBranchName); err != nil { log.Error("downloadCode failed, %v", err, ctx.Data["MsgID"]) - cloudBrainNewDataPrepare(ctx) - ctx.RenderWithErr("system error", tplCloudBrainBenchmarkNew, nil) + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr("system error", tplCloudBrainModelSafetyNew, nil) return } - if _, err := os.Stat(codePath + "/inference.py"); err != nil { + if _, err := os.Stat(codePath + "/" + BootFile); err != nil { if os.IsNotExist(err) { // file does not exist - log.Error("inference.py does not exist, %v", err, ctx.Data["MsgID"]) - cloudBrainNewDataPrepare(ctx) - ctx.RenderWithErr("inference.py does not exist", tplCloudBrainBenchmarkNew, nil) + log.Error(BootFile+" does not exist, %v", err, ctx.Data["MsgID"]) + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr(BootFile+" does not exist", tplCloudBrainModelSafetyNew, nil) } else { log.Error("Stat failed, %v", err, ctx.Data["MsgID"]) - cloudBrainNewDataPrepare(ctx) - ctx.RenderWithErr("system error", tplCloudBrainBenchmarkNew, nil) + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr("system error", tplCloudBrainModelSafetyNew, nil) } return } - - if err := uploadCodeToMinio(codePath+"/", jobName, cloudbrain.CodeMountPath+"/"); err != nil { + err = uploadCodeToMinio(codePath+"/", jobName, cloudbrain.CodeMountPath+"/") + if err != nil { log.Error("uploadCodeToMinio failed, %v", err, ctx.Data["MsgID"]) - cloudBrainNewDataPrepare(ctx) - ctx.RenderWithErr("system error", tplCloudBrainBenchmarkNew, nil) + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr("system error", tplCloudBrainModelSafetyNew, nil) return } - uuid := "dee79f68-19f1-42dd-b004-bc9ce08415ca" + uuid := srcDataset + ";" + combatDataset datasetInfos, datasetNames, err := models.GetDatasetInfo(uuid) if err != nil { log.Error("GetDatasetInfo failed: %v", err, ctx.Data["MsgID"]) - cloudBrainNewDataPrepare(ctx) + modelSafetyNewDataPrepare(ctx) ctx.RenderWithErr(ctx.Tr("cloudbrain.error.dataset_select"), tplCloudBrainBenchmarkNew, nil) return } + command, err := getGpuModelSafetyCommand(BootFile, Params, CkptName, displayJobName) + if err != nil { + log.Error("Get Command failed: %v", err, ctx.Data["MsgID"]) + modelSafetyNewDataPrepare(ctx) + //ctx.RenderWithErr(ctx.Tr("cloudbrain.error.dataset_select"), tplCloudBrainBenchmarkNew, nil) TODO + return + } log.Info("Command=" + command) - log.Info("ModelPath=" + storage.GetMinioPath(jobName, cloudbrain.ModelMountPath+"/")) + req := cloudbrain.GenerateCloudBrainTaskReq{ Ctx: ctx, DisplayJobName: displayJobName, @@ -164,15 +197,15 @@ func CloudBrainAiSafetyCreate(ctx *context.Context) { DatasetNames: datasetNames, DatasetInfos: datasetInfos, CodePath: storage.GetMinioPath(jobName, cloudbrain.CodeMountPath+"/"), - ModelPath: storage.GetMinioPath(jobName, cloudbrain.ModelMountPath+"/"), + ModelPath: setting.Attachment.Minio.RealPath + TrainUrl, BenchmarkPath: storage.GetMinioPath(jobName, cloudbrain.BenchMarkMountPath+"/"), Snn4ImageNetPath: storage.GetMinioPath(jobName, cloudbrain.Snn4imagenetMountPath+"/"), BrainScorePath: storage.GetMinioPath(jobName, cloudbrain.BrainScoreMountPath+"/"), JobType: string(models.JobTypeModelSafety), Description: description, BranchName: cloudbrain.DefaultBranchName, - BootFile: "", - Params: "", + BootFile: BootFile, + Params: Params, CommitID: "", ResultPath: storage.GetMinioPath(jobName, cloudbrain.ResultPath+"/"), Spec: spec, @@ -180,13 +213,83 @@ func CloudBrainAiSafetyCreate(ctx *context.Context) { err = cloudbrain.GenerateTask(req) if err != nil { - cloudBrainNewDataPrepare(ctx) + modelSafetyNewDataPrepare(ctx) ctx.RenderWithErr(err.Error(), tplCloudBrainBenchmarkNew, nil) return } + ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/cloudbrain/modelsafety_test") +} - ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/cloudbrain/benchmark") +func getGpuModelSafetyCommand(BootFile string, params string, CkptName string, DisplayJobName string) (string, error) { + var command string + bootFile := strings.TrimSpace(BootFile) + + 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 + } + } + + param += " --modelname" + "=" + CkptName + + command += "python /code/" + bootFile + param + " > " + cloudbrain.ResultPath + "/" + DisplayJobName + "-" + cloudbrain.LogFile + + return command, nil +} + +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 + } + + 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 } func getJsonContent(url string) (string, error) { diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index 24a5ac685..ae29abf46 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -46,6 +46,8 @@ const ( tplCloudBrainBenchmarkNew base.TplName = "repo/cloudbrain/benchmark/new" tplCloudBrainBenchmarkShow base.TplName = "repo/cloudbrain/benchmark/show" + tplCloudBrainModelSafetyNew base.TplName = "repo/cloudbrain/modelsafety/new" + tplCloudBrainImageSubmit base.TplName = "repo/cloudbrain/image/submit" tplCloudBrainImageEdit base.TplName = "repo/cloudbrain/image/edit" From 929599bb731ea1ab545f2bd98a83cfc1e6827e1a Mon Sep 17 00:00:00 2001 From: zouap Date: Mon, 26 Sep 2022 16:04:52 +0800 Subject: [PATCH 040/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 436ae41da..29ed58197 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -104,7 +104,7 @@ func CloudBrainAiSafetyCreate(ctx *context.Context) { } } if taskType == models.TypeCloudBrainTwo { - createForNPU(ctx) + createForNPU(ctx, jobName) } else if taskType == models.TypeCloudBrainOne { createForGPU(ctx, jobName) } @@ -113,6 +113,10 @@ func CloudBrainAiSafetyCreate(ctx *context.Context) { } +func createForNPU(ctx *context.Context, jobName string) { + +} + func createForGPU(ctx *context.Context, jobName string) { BootFile := ctx.Query("BootFile") displayJobName := ctx.Query("DisplayJobName") @@ -209,6 +213,7 @@ func createForGPU(ctx *context.Context, jobName string) { CommitID: "", ResultPath: storage.GetMinioPath(jobName, cloudbrain.ResultPath+"/"), Spec: spec, + LabelName: evaluationIndex, } err = cloudbrain.GenerateTask(req) From 8a71dcde6f099d43d5bb49bfdf38d701f94af894 Mon Sep 17 00:00:00 2001 From: zouap Date: Mon, 26 Sep 2022 17:53:19 +0800 Subject: [PATCH 041/180] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- models/cloudbrain.go | 9 +++++++++ routers/repo/aisafety.go | 29 ++++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/models/cloudbrain.go b/models/cloudbrain.go index 48ecc3998..997955baa 100755 --- a/models/cloudbrain.go +++ b/models/cloudbrain.go @@ -52,6 +52,8 @@ const ( JobFailed CloudbrainStatus = "FAILED" JobRunning CloudbrainStatus = "RUNNING" + ModelSafetyTesting CloudbrainStatus = "TESTING" + JobTypeDebug JobType = "DEBUG" JobTypeBenchmark JobType = "BENCHMARK" JobTypeModelSafety JobType = "MODELSAFETY" @@ -1935,6 +1937,13 @@ func GetStoppedJobWithNoStartTimeEndTime() ([]*Cloudbrain, error) { return cloudbrains, x.SQL("select * from cloudbrain where status in (?,?,?,?,?,?,?) and (start_time is null or end_time is null) limit 100", ModelArtsTrainJobCompleted, ModelArtsTrainJobFailed, ModelArtsTrainJobKilled, ModelArtsStopped, JobStopped, JobFailed, JobSucceeded).Find(&cloudbrains) } +func GetRunningModelSafetyTestTask() ([]*Cloudbrain, error) { + cloudbrains := make([]*Cloudbrain, 0) + sess := x.Where("job_type = ? and status=?", string(JobTypeModelSafety), JobRunning) + err := sess.Find(&cloudbrains) + return cloudbrains, err +} + func GetCloudbrainCountByUserID(userID int64, jobType string) (int, error) { count, err := x.In("status", JobWaiting, JobRunning).And("job_type = ? and user_id = ? and type = ?", jobType, userID, TypeCloudBrainOne).Count(new(Cloudbrain)) return int(count), err diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 29ed58197..dc656033b 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -108,9 +108,36 @@ func CloudBrainAiSafetyCreate(ctx *context.Context) { } else if taskType == models.TypeCloudBrainOne { createForGPU(ctx, jobName) } + //ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/cloudbrain/benchmark") +} + +func TimerHandleModelSafetyTestTask() { + tasks, err := models.GetRunningModelSafetyTestTask() + if err == nil { + if tasks != nil && len(tasks) > 0 { + for _, task := range tasks { + if task.Type == models.TypeCloudBrainOne { + if task.Status == string(models.JobRunning) { + //调用云脑任务状态接口 + + } else if task.Status == string(models.ModelSafetyTesting) { + //调用模型评测查询状态接口 + + } + } else if task.Type == models.TypeCloudBrainTwo { + if task.Status == string(models.ModelArtsRunning) { - ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/cloudbrain/benchmark") + } else if task.Status == string(models.ModelArtsTrainJobCompleted) { + } + } + } + } else { + log.Info("query running model safety test task 0.") + } + } else { + log.Info("query running model safety test task err." + err.Error()) + } } func createForNPU(ctx *context.Context, jobName string) { From bdf17495f3828ec5d130fdc860e39fbd5b1ea398 Mon Sep 17 00:00:00 2001 From: zouap Date: Wed, 28 Sep 2022 08:54:38 +0800 Subject: [PATCH 042/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 40 ++++++++++++++++++++++++++++++++++++++++ routers/routes/routes.go | 12 ++++++++++-- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index dc656033b..98e102336 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -55,6 +55,46 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { } } +func GetAiSafetyTask(ctx *context.Context) { + var ID = ctx.Params(":jobid") + task, err := models.GetCloudbrainByJobIDWithDeleted(ID) + if err != nil { + log.Error("GetCloudbrainByJobID failed:" + err.Error()) + ctx.NotFound(ctx.Req.URL.RequestURI(), nil) + return + } + if task.Type == models.TypeCloudBrainTwo { + + } else if task.Type == models.TypeCloudBrainOne { + + } +} + +func isTaskFinished(status string) bool { + if status == string(models.ModelArtsTrainJobRunning) || status == string(models.ModelArtsTrainJobWaiting) { + return false + } + if status == string(models.JobWaiting) || status == string(models.JobRunning) { + return false + } + + if status == string(models.ModelArtsTrainJobUnknown) || status == string(models.ModelArtsTrainJobInit) { + return false + } + if status == string(models.ModelArtsTrainJobImageCreating) || status == string(models.ModelArtsTrainJobSubmitTrying) { + return false + } + return true +} + +func StopAiSafetyTask(ctx *context.Context) { + +} + +func DelAiSafetyTask(ctx *context.Context) { + +} + func CloudBrainAiSafetyCreate(ctx *context.Context) { ctx.Data["PageIsCloudBrain"] = true displayJobName := ctx.Query("DisplayJobName") diff --git a/routers/routes/routes.go b/routers/routes/routes.go index b555a6756..851a8d017 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -1126,7 +1126,6 @@ func RegisterRoutes(m *macaron.Macaron) { }) m.Get("/create", reqWechatBind, reqRepoCloudBrainWriter, repo.CloudBrainBenchmarkNew) m.Post("/create", reqWechatBind, reqRepoCloudBrainWriter, bindIgnErr(auth.CreateCloudBrainForm{}), repo.CloudBrainBenchmarkCreate) - m.Post("/create_safetytask", reqWechatBind, reqRepoCloudBrainWriter, repo.CloudBrainAiSafetyCreate) m.Get("/create_safetytask_test", repo.CloudBrainAiSafetyCreateTest) m.Get("/get_child_types", repo.GetChildTypes) }) @@ -1174,7 +1173,7 @@ func RegisterRoutes(m *macaron.Macaron) { }, context.RepoRef()) m.Group("/modelmanage", func() { m.Post("/create_model", repo.SaveModel) - m.Post("/create_model_convert", reqRepoModelManageWriter, repo.SaveModelConvert) + m.Post("/create_model_convert", reqWechatBind, reqRepoModelManageWriter, repo.SaveModelConvert) m.Post("/create_new_model", repo.SaveNewNameModel) m.Delete("/delete_model", repo.DeleteModel) m.Post("/delete_model_convert/:id", repo.DeleteModelConvert) @@ -1201,6 +1200,15 @@ func RegisterRoutes(m *macaron.Macaron) { m.Get("/downloadall", repo.DownloadMultiModelFile) }, context.RepoRef()) + m.Group("/modelsafety", func() { + m.Group("/:jobid", func() { + m.Get("", reqRepoCloudBrainWriter, repo.GetAiSafetyTask) + m.Post("/stop", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.StopAiSafetyTask) + m.Post("/del", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.DelAiSafetyTask) + m.Post("/create", reqWechatBind, reqRepoCloudBrainWriter, repo.CloudBrainAiSafetyCreate) + }) + }, context.RepoRef()) + m.Group("/debugjob", func() { m.Get("", reqRepoCloudBrainReader, repo.DebugJobIndex) }, context.RepoRef()) From 7a03ab2288cf9a49a0aa459de284199bb015606a Mon Sep 17 00:00:00 2001 From: zouap Date: Wed, 28 Sep 2022 09:17:15 +0800 Subject: [PATCH 043/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/api/v1/repo/cloudbrain.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/routers/api/v1/repo/cloudbrain.go b/routers/api/v1/repo/cloudbrain.go index d6b7bb076..dcddc190d 100755 --- a/routers/api/v1/repo/cloudbrain.go +++ b/routers/api/v1/repo/cloudbrain.go @@ -399,7 +399,11 @@ func CloudbrainDownloadLogFile(ctx *context.Context) { ctx.ServerError("Get minio get SignedUrl failed", err) return } + log.Info("fileName=" + fileName) http.Redirect(ctx.Resp, ctx.Req.Request, url, http.StatusTemporaryRedirect) + } else { + log.Info("fileName is null.") + } } From 3c348f5f6cdd111acfa4e5433f27e083269b821e Mon Sep 17 00:00:00 2001 From: zouap Date: Wed, 28 Sep 2022 09:24:35 +0800 Subject: [PATCH 044/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/api/v1/repo/cloudbrain.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/routers/api/v1/repo/cloudbrain.go b/routers/api/v1/repo/cloudbrain.go index dcddc190d..2d58a3e32 100755 --- a/routers/api/v1/repo/cloudbrain.go +++ b/routers/api/v1/repo/cloudbrain.go @@ -378,8 +378,11 @@ func CloudbrainDownloadLogFile(ctx *context.Context) { ctx.ServerError(err.Error(), err) return } - - prefix := "/" + setting.CBCodePathPrefix + job.JobName + "/model" + logDir := "/model" + if job.JobType == string(models.JobTypeInference) { + logDir = cloudbrain.ResultPath + } + prefix := "/" + setting.CBCodePathPrefix + job.JobName + logDir files, err := storage.GetOneLevelAllObjectUnderDirMinio(setting.Attachment.Minio.Bucket, prefix, "") if err != nil { log.Error("query cloudbrain model failed: %v", err) From 0f4a71ea9afe23bb5b27c552d79fd54715c2d4c5 Mon Sep 17 00:00:00 2001 From: zouap Date: Wed, 28 Sep 2022 17:33:56 +0800 Subject: [PATCH 045/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=90=8E=E7=AB=AF?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E4=BB=A3=E7=A0=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 2 +- modules/setting/setting.go | 16 +++++ routers/repo/aisafety.go | 151 +++++++++++++++++++++++++++++++++++++++++---- routers/routes/routes.go | 10 +-- 4 files changed, 163 insertions(+), 16 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index 108851c6f..16e873c90 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -227,7 +227,7 @@ func GetTaskStatus(jobID string) (map[string]interface{}, error) { if err != nil { log.Info("error =" + err.Error()) - return nil, fmt.Errorf("resty GetJob: %v", err) + return nil, fmt.Errorf("Get task status error: %v", err) } else { reMap := make(map[string]interface{}) err = json.Unmarshal(res.Body(), &reMap) diff --git a/modules/setting/setting.go b/modules/setting/setting.go index d6e4824ef..a232226c9 100755 --- a/modules/setting/setting.go +++ b/modules/setting/setting.go @@ -707,6 +707,13 @@ var ( NPU_MINDSPORE_IMAGE_ID int NPU_TENSORFLOW_IMAGE_ID int }{} + + ModelSafetyTest = struct { + BaseDataSetName string + BaseDataSetUUID string + CombatDataSetName string + CombatDataSetUUID string + }{} ) // DateLang transforms standard language locale name to corresponding value in datetime plugin. @@ -1527,6 +1534,15 @@ func NewContext() { getGrampusConfig() getModelartsCDConfig() getModelConvertConfig() + getModelSafetyConfig() +} + +func getModelSafetyConfig() { + sec := Cfg.Section("model_safety_test") + ModelSafetyTest.BaseDataSetName = sec.Key("BaseDataSetName").MustString("ImageNet1000_100基础数据集;CIFAR10_1000基础数据集") + ModelSafetyTest.BaseDataSetUUID = sec.Key("BaseDataSetUUID").MustString("0fa81800-e95e-42f4-ab40-2c3ca83f2344;6eaab665-1c68-45fc-ad05-c070f2db092e") + ModelSafetyTest.CombatDataSetName = sec.Key("CombatDataSetName").MustString("ImageNet1000_100_FGSM;CIFAR10_1000_FGSM.zip") + ModelSafetyTest.CombatDataSetUUID = sec.Key("CombatDataSetUUID").MustString("9ba30d3f-83e1-4f9f-849d-6f93217e2ca3;23825796-e4f3-4cf8-b697-9963048cef42") } func getModelConvertConfig() { diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 98e102336..4830490c0 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -1,8 +1,10 @@ package repo import ( + "bufio" "encoding/json" "errors" + "io" "io/ioutil" "net/http" "os" @@ -22,6 +24,10 @@ import ( uuid "github.com/satori/go.uuid" ) +const ( + tplModelSafetyTestCreate = "repo/modelsafety/new" +) + func CloudBrainAiSafetyCreateTest(ctx *context.Context) { log.Info("start to create CloudBrainAiSafetyCreate") uuid := uuid.NewV4() @@ -57,34 +63,148 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { func GetAiSafetyTask(ctx *context.Context) { var ID = ctx.Params(":jobid") - task, err := models.GetCloudbrainByJobIDWithDeleted(ID) + getAiSafetyTaskStatusFromCloudbrain(ID) +} + +func getAiSafetyTaskStatusFromCloudbrain(ID string) { + job, err := models.GetCloudbrainByJobIDWithDeleted(ID) if err != nil { log.Error("GetCloudbrainByJobID failed:" + err.Error()) - ctx.NotFound(ctx.Req.URL.RequestURI(), nil) return } - if task.Type == models.TypeCloudBrainTwo { + if job.Type == models.TypeCloudBrainTwo { + + } else if job.Type == models.TypeCloudBrainOne { + if isTaskNotFinished(job.Status) { + log.Info("The task not finished,name=" + job.DisplayJobName) + jobResult, err := cloudbrain.GetJob(job.JobID) + + result, err := models.ConvertToJobResultPayload(jobResult.Payload) + if err != nil { + 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.Status = taskRes.TaskStatuses[0].State + } + + if result.JobStatus.State != string(models.JobSucceeded) { + err = models.UpdateJob(job) + if err != nil { + log.Error("UpdateJob failed:", err) + } + } else { + // + job.Status = string(models.ModelSafetyTesting) + err = models.UpdateJob(job) + if err != nil { + log.Error("UpdateJob failed:", err) + } + //send msg to beihang + sendGpuInferenceResultToTest(job) + } - } else if task.Type == models.TypeCloudBrainOne { + } else { + if job.Status == string(models.ModelSafetyTesting) { + // + result, err := aisafety.GetTaskStatus(job.PreVersionName) + if err == nil { + if result["code"] != nil { + + } + } + } + } } } -func isTaskFinished(status string) bool { +func sendGpuInferenceResultToTest(job *models.Cloudbrain) { + datasetname := job.DatasetName + datasetnames := strings.Split(datasetname, ";") + indicator := job.LabelName + + req := aisafety.TaskReq{ + UnionId: job.JobID, + EvalName: job.DisplayJobName, + EvalContent: job.Description, + TLPath: "test", + Indicators: strings.Split(indicator, ";"), + CDName: datasetnames[1], + BDName: datasetnames[0], + } + + resultDir := "/model" + prefix := "/" + setting.CBCodePathPrefix + job.JobName + resultDir + files, err := storage.GetOneLevelAllObjectUnderDirMinio(setting.Attachment.Minio.Bucket, prefix, "") + if err != nil { + log.Error("query cloudbrain one model failed: %v", err) + return + } + jsonContent := "" + for _, file := range files { + if strings.HasSuffix(file.FileName, "result.json") { + path := storage.GetMinioPath(job.JobName+resultDir+"/", file.FileName) + log.Info("path=" + path) + reader, err := os.Open(path) + defer reader.Close() + if err == nil { + r := bufio.NewReader(reader) + for { + line, error := r.ReadString('\n') + if error == io.EOF { + log.Info("read file completed.") + break + } + if error != nil { + log.Info("read file error." + error.Error()) + break + } + jsonContent += line + } + } + break + } + } + if jsonContent != "" { + serialNo, err := aisafety.CreateSafetyTask(req, jsonContent) + if err == nil { + //update serial no to db + job.PreVersionName = serialNo + err = models.UpdateJob(job) + if err != nil { + log.Error("UpdateJob failed:", err) + } + } + } else { + log.Info("The json is null. so set it failed.") + //update task failed. + job.Status = string(models.JobFailed) + err = models.UpdateJob(job) + if err != nil { + log.Error("UpdateJob failed:", err) + } + } +} + +func isTaskNotFinished(status string) bool { if status == string(models.ModelArtsTrainJobRunning) || status == string(models.ModelArtsTrainJobWaiting) { - return false + return true } if status == string(models.JobWaiting) || status == string(models.JobRunning) { - return false + return true } if status == string(models.ModelArtsTrainJobUnknown) || status == string(models.ModelArtsTrainJobInit) { - return false + return true } if status == string(models.ModelArtsTrainJobImageCreating) || status == string(models.ModelArtsTrainJobSubmitTrying) { - return false + return true } - return true + return false } func StopAiSafetyTask(ctx *context.Context) { @@ -95,7 +215,16 @@ func DelAiSafetyTask(ctx *context.Context) { } -func CloudBrainAiSafetyCreate(ctx *context.Context) { +func AiSafetyCreateForGet(ctx *context.Context) { + ctx.Data["PageIsCloudBrain"] = true + ctx.Data["BaseDataSetName"] = setting.ModelSafetyTest.BaseDataSetName + ctx.Data["BaseDataSetUUID"] = setting.ModelSafetyTest.BaseDataSetUUID + ctx.Data["CombatDataSetName"] = setting.ModelSafetyTest.CombatDataSetName + ctx.Data["CombatDataSetUUID"] = setting.ModelSafetyTest.CombatDataSetUUID + ctx.HTML(200, tplModelSafetyTestCreate) +} + +func AiSafetyCreateForPost(ctx *context.Context) { ctx.Data["PageIsCloudBrain"] = true displayJobName := ctx.Query("DisplayJobName") jobName := util.ConvertDisplayJobNameToJobName(displayJobName) diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 9a5bc6424..623071936 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -6,15 +6,16 @@ package routes import ( "bytes" - "code.gitea.io/gitea/routers/reward/point" - "code.gitea.io/gitea/routers/task" - "code.gitea.io/gitea/services/reward" "encoding/gob" "net/http" "path" "text/template" "time" + "code.gitea.io/gitea/routers/reward/point" + "code.gitea.io/gitea/routers/task" + "code.gitea.io/gitea/services/reward" + "code.gitea.io/gitea/modules/slideimage" "code.gitea.io/gitea/routers/image" @@ -1231,7 +1232,8 @@ func RegisterRoutes(m *macaron.Macaron) { m.Get("", reqRepoCloudBrainWriter, repo.GetAiSafetyTask) m.Post("/stop", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.StopAiSafetyTask) m.Post("/del", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.DelAiSafetyTask) - m.Post("/create", reqWechatBind, reqRepoCloudBrainWriter, repo.CloudBrainAiSafetyCreate) + m.Get("/create", reqWechatBind, reqRepoCloudBrainWriter, repo.AiSafetyCreateForGet) + m.Post("/create", reqWechatBind, reqRepoCloudBrainWriter, repo.AiSafetyCreateForPost) }) }, context.RepoRef()) From d343b67271d0656e11cc72fc8249e03f93f57d28 Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 29 Sep 2022 08:46:51 +0800 Subject: [PATCH 046/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9=E5=AF=B9=E6=8A=97=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E9=9B=86=E5=90=8D=E7=A7=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 4830490c0..05354aa69 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -42,7 +42,7 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { EvalContent: "test1", TLPath: "test1", Indicators: []string{"ACC", "ASS"}, - CDName: "CIFAR10_1000_FGSM对抗样本", + CDName: "CIFAR10_1000_FGSM", BDName: "CIFAR10_1000基础数据集", } aisafety.GetAlgorithmList() From 5b28526e8a93f8224011158a8774b57bb441d711 Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 29 Sep 2022 09:41:52 +0800 Subject: [PATCH 047/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- models/cloudbrain.go | 4 +- routers/repo/aisafety.go | 156 ++++++++++++++++++++++------------------------- 2 files changed, 76 insertions(+), 84 deletions(-) diff --git a/models/cloudbrain.go b/models/cloudbrain.go index 32dec5fa2..24be7b989 100755 --- a/models/cloudbrain.go +++ b/models/cloudbrain.go @@ -2006,9 +2006,9 @@ func GetStoppedJobWithNoStartTimeEndTime() ([]*Cloudbrain, error) { return cloudbrains, x.SQL("select * from cloudbrain where status in (?,?,?,?,?,?,?) and (start_time is null or end_time is null) limit 100", ModelArtsTrainJobCompleted, ModelArtsTrainJobFailed, ModelArtsTrainJobKilled, ModelArtsStopped, JobStopped, JobFailed, JobSucceeded).Find(&cloudbrains) } -func GetRunningModelSafetyTestTask() ([]*Cloudbrain, error) { +func GetModelSafetyTestTask() ([]*Cloudbrain, error) { cloudbrains := make([]*Cloudbrain, 0) - sess := x.Where("job_type = ? and status=?", string(JobTypeModelSafety), JobRunning) + sess := x.Where("job_type = ?", string(JobTypeModelSafety)) err := sess.Find(&cloudbrains) return cloudbrains, err } diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 05354aa69..4b53f737d 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -63,62 +63,87 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { func GetAiSafetyTask(ctx *context.Context) { var ID = ctx.Params(":jobid") - getAiSafetyTaskStatusFromCloudbrain(ID) -} - -func getAiSafetyTaskStatusFromCloudbrain(ID string) { job, err := models.GetCloudbrainByJobIDWithDeleted(ID) if err != nil { log.Error("GetCloudbrainByJobID failed:" + err.Error()) return } + syncAiSafetyTaskStatus(job) +} + +func syncAiSafetyTaskStatus(job *models.Cloudbrain) { if job.Type == models.TypeCloudBrainTwo { } else if job.Type == models.TypeCloudBrainOne { if isTaskNotFinished(job.Status) { - log.Info("The task not finished,name=" + job.DisplayJobName) - jobResult, err := cloudbrain.GetJob(job.JobID) - - result, err := models.ConvertToJobResultPayload(jobResult.Payload) - if err != nil { - 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.Status = taskRes.TaskStatuses[0].State - } - - if result.JobStatus.State != string(models.JobSucceeded) { - err = models.UpdateJob(job) - if err != nil { - log.Error("UpdateJob failed:", err) - } + queryTaskStatusFromCloudbrain(job) + } else { + if job.Status == string(models.ModelSafetyTesting) { + queryTaskStatusFromModelSafetyTestServer(job) } else { - // - job.Status = string(models.ModelSafetyTesting) - err = models.UpdateJob(job) - if err != nil { - log.Error("UpdateJob failed:", err) - } - //send msg to beihang - sendGpuInferenceResultToTest(job) + log.Info("The job is finished. status=" + job.Status) } + } + } +} +func TimerHandleModelSafetyTestTask() { + tasks, err := models.GetModelSafetyTestTask() + if err == nil { + if tasks != nil && len(tasks) > 0 { + for _, job := range tasks { + syncAiSafetyTaskStatus(job) + } } else { - if job.Status == string(models.ModelSafetyTesting) { - // - result, err := aisafety.GetTaskStatus(job.PreVersionName) - if err == nil { - if result["code"] != nil { + log.Info("query running model safety test task 0.") + } + } else { + log.Info("query running model safety test task err." + err.Error()) + } +} - } - } - } +func queryTaskStatusFromCloudbrain(job *models.Cloudbrain) { + + log.Info("The task not finished,name=" + job.DisplayJobName) + jobResult, err := cloudbrain.GetJob(job.JobID) + + result, err := models.ConvertToJobResultPayload(jobResult.Payload) + if err != nil { + 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.Status = taskRes.TaskStatuses[0].State + } + + if result.JobStatus.State != string(models.JobSucceeded) { + err = models.UpdateJob(job) + if err != nil { + log.Error("UpdateJob failed:", err) + } + } else { + // + job.Status = string(models.ModelSafetyTesting) + err = models.UpdateJob(job) + if err != nil { + log.Error("UpdateJob failed:", err) } + //send msg to beihang + sendGpuInferenceResultToTest(job) + } +} +func queryTaskStatusFromModelSafetyTestServer(job *models.Cloudbrain) { + result, err := aisafety.GetTaskStatus(job.PreVersionName) + if err == nil { + if result["code"] != nil { + if result["code"].(string) == "0" { + + } + } } } @@ -272,6 +297,15 @@ func AiSafetyCreateForPost(ctx *context.Context) { return } } + BootFile := ctx.Query("BootFile") + bootFileExist, err := ctx.Repo.FileExists(BootFile, cloudbrain.DefaultBranchName) + if err != nil || !bootFileExist { + log.Error("Get bootfile error:", err) + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr(ctx.Tr("repo.cloudbrain_bootfile_err"), tplModelArtsInferenceJobNew, nil) + return + } + if taskType == models.TypeCloudBrainTwo { createForNPU(ctx, jobName) } else if taskType == models.TypeCloudBrainOne { @@ -280,35 +314,6 @@ func AiSafetyCreateForPost(ctx *context.Context) { //ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/cloudbrain/benchmark") } -func TimerHandleModelSafetyTestTask() { - tasks, err := models.GetRunningModelSafetyTestTask() - if err == nil { - if tasks != nil && len(tasks) > 0 { - for _, task := range tasks { - if task.Type == models.TypeCloudBrainOne { - if task.Status == string(models.JobRunning) { - //调用云脑任务状态接口 - - } else if task.Status == string(models.ModelSafetyTesting) { - //调用模型评测查询状态接口 - - } - } else if task.Type == models.TypeCloudBrainTwo { - if task.Status == string(models.ModelArtsRunning) { - - } else if task.Status == string(models.ModelArtsTrainJobCompleted) { - - } - } - } - } else { - log.Info("query running model safety test task 0.") - } - } else { - log.Info("query running model safety test task err." + err.Error()) - } -} - func createForNPU(ctx *context.Context, jobName string) { } @@ -349,19 +354,6 @@ func createForGPU(ctx *context.Context, jobName string) { return } - if _, err := os.Stat(codePath + "/" + BootFile); err != nil { - if os.IsNotExist(err) { - // file does not exist - log.Error(BootFile+" does not exist, %v", err, ctx.Data["MsgID"]) - modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr(BootFile+" does not exist", tplCloudBrainModelSafetyNew, nil) - } else { - log.Error("Stat failed, %v", err, ctx.Data["MsgID"]) - modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr("system error", tplCloudBrainModelSafetyNew, nil) - } - return - } err = uploadCodeToMinio(codePath+"/", jobName, cloudbrain.CodeMountPath+"/") if err != nil { log.Error("uploadCodeToMinio failed, %v", err, ctx.Data["MsgID"]) From d83229936fece00f3f1610ced51e9c49e21dd252 Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 29 Sep 2022 11:07:58 +0800 Subject: [PATCH 048/180] =?UTF-8?q?=E5=88=9B=E5=BB=BANPU=E7=9A=84=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E5=AE=89=E5=85=A8=E6=A3=80=E6=B5=8B=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/modelarts/modelarts.go | 22 ++--- routers/repo/aisafety.go | 190 +++++++++++++++++++++++++++++++++++++++++ routers/repo/modelarts.go | 1 + 3 files changed, 203 insertions(+), 10 deletions(-) diff --git a/modules/modelarts/modelarts.go b/modules/modelarts/modelarts.go index 6b3d1f128..ca1195720 100755 --- a/modules/modelarts/modelarts.go +++ b/modules/modelarts/modelarts.go @@ -1,7 +1,6 @@ package modelarts import ( - "code.gitea.io/gitea/modules/modelarts_cd" "encoding/json" "errors" "fmt" @@ -9,6 +8,8 @@ import ( "strconv" "strings" + "code.gitea.io/gitea/modules/modelarts_cd" + "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/log" @@ -70,8 +71,8 @@ const ( var ( poolInfos *models.PoolInfos TrainFlavorInfos *Flavor - SpecialPools *models.SpecialPools - MultiNodeConfig *MultiNodes + SpecialPools *models.SpecialPools + MultiNodeConfig *MultiNodes ) type GenerateTrainJobReq struct { @@ -141,6 +142,7 @@ type GenerateInferenceJobReq struct { ResultUrl string Spec *models.Specification DatasetName string + JobType string } type VersionInfo struct { @@ -173,12 +175,12 @@ type ResourcePool struct { } `json:"resource_pool"` } -type MultiNodes struct{ +type MultiNodes struct { Info []OrgMultiNode `json:"multinode"` } -type OrgMultiNode struct{ +type OrgMultiNode struct { Org string `json:"org"` - Node []int `json:"node"` + Node []int `json:"node"` } // type Parameter struct { @@ -709,7 +711,7 @@ func GenerateInferenceJob(ctx *context.Context, req *GenerateInferenceJobReq) (e Status: models.TempJobStatus, Type: models.TypeCloudBrainTwo, JobName: req.JobName, - JobType: string(models.JobTypeInference), + JobType: req.JobType, }) if err != nil { log.Error("InsertCloudbrainTemp failed: %v", err.Error()) @@ -732,7 +734,7 @@ func GenerateInferenceJob(ctx *context.Context, req *GenerateInferenceJobReq) (e JobID: jobID, JobName: req.JobName, DisplayJobName: req.DisplayJobName, - JobType: string(models.JobTypeInference), + JobType: req.JobType, Type: models.TypeCloudBrainTwo, VersionID: jobResult.VersionID, VersionName: jobResult.VersionName, @@ -798,8 +800,8 @@ func InitSpecialPool() { } } -func InitMultiNode(){ - if MultiNodeConfig ==nil && setting.ModelArtsMultiNode!=""{ +func InitMultiNode() { + if MultiNodeConfig == nil && setting.ModelArtsMultiNode != "" { json.Unmarshal([]byte(setting.ModelArtsMultiNode), &MultiNodeConfig) } diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 4b53f737d..0f4b6ee1a 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -16,11 +16,14 @@ import ( "code.gitea.io/gitea/modules/aisafety" "code.gitea.io/gitea/modules/cloudbrain" "code.gitea.io/gitea/modules/context" + "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/modelarts" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/storage" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/services/cloudbrain/resource" + "code.gitea.io/gitea/services/reward/point/account" uuid "github.com/satori/go.uuid" ) @@ -315,7 +318,194 @@ 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 + evaluationIndex := ctx.Query("evaluationIndex") + Params := ctx.Query("RunParaList") + specId := ctx.QueryInt64("SpecId") + + repo := ctx.Repo.Repository + + trainUrl := ctx.Query("TrainUrl") + modelName := ctx.Query("ModelName") + modelVersion := ctx.Query("ModelVersion") + ckptName := ctx.Query("CkptName") + ckptUrl := "/" + trainUrl + ckptName + log.Info("ckpt url:" + ckptUrl) + + FlavorName := ctx.Query("FlavorName") + EngineName := ctx.Query("EngineName") + + isLatestVersion := modelarts.IsLatestVersion + VersionCount := modelarts.VersionCountOne + + codeLocalPath := setting.JobPath + jobName + modelarts.CodePath + codeObsPath := "/" + setting.Bucket + modelarts.JobPath + jobName + modelarts.CodePath + resultObsPath := "/" + setting.Bucket + modelarts.JobPath + jobName + modelarts.ResultPath + VersionOutputPath + "/" + logObsPath := "/" + setting.Bucket + modelarts.JobPath + jobName + modelarts.LogPath + VersionOutputPath + "/" + log.Info("ckpt url:" + ckptUrl) + spec, err := resource.GetAndCheckSpec(ctx.User.ID, specId, models.FindSpecsOptions{ + JobType: models.JobTypeInference, + ComputeResource: models.NPU, + Cluster: models.OpenICluster, + AiCenterCode: models.AICenterOfCloudBrainTwo}) + if err != nil || spec == nil { + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr("Resource specification not available", tplCloudBrainModelSafetyNew, nil) + return + } + if !account.IsPointBalanceEnough(ctx.User.ID, spec.UnitPrice) { + log.Error("point balance is not enough,userId=%d specId=%d ", ctx.User.ID, spec.ID) + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr(ctx.Tr("points.insufficient_points_balance"), tplCloudBrainModelSafetyNew, nil) + return + } + + //todo: del the codeLocalPath + _, err = ioutil.ReadDir(codeLocalPath) + if err == nil { + os.RemoveAll(codeLocalPath) + } + + gitRepo, _ := git.OpenRepository(repo.RepoPath()) + commitID, _ := gitRepo.GetBranchCommitID(cloudbrain.DefaultBranchName) + + if err := downloadCode(repo, codeLocalPath, cloudbrain.DefaultBranchName); err != nil { + log.Error("Create task failed, server timed out: %s (%v)", repo.FullName(), err) + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr(ctx.Tr("cloudbrain.load_code_failed"), tplCloudBrainModelSafetyNew, nil) + return + } + + //todo: upload code (send to file_server todo this work?) + if err := obsMkdir(setting.CodePathPrefix + jobName + modelarts.ResultPath + VersionOutputPath + "/"); err != nil { + log.Error("Failed to obsMkdir_result: %s (%v)", repo.FullName(), err) + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr("Failed to obsMkdir_result", tplCloudBrainModelSafetyNew, nil) + return + } + + if err := obsMkdir(setting.CodePathPrefix + jobName + modelarts.LogPath + VersionOutputPath + "/"); err != nil { + log.Error("Failed to obsMkdir_log: %s (%v)", repo.FullName(), err) + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr("Failed to obsMkdir_log", tplCloudBrainModelSafetyNew, nil) + return + } + + if err := uploadCodeToObs(codeLocalPath, jobName, ""); err != nil { + log.Error("Failed to uploadCodeToObs: %s (%v)", repo.FullName(), err) + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr(ctx.Tr("cloudbrain.load_code_failed"), tplCloudBrainModelSafetyNew, nil) + return + } + + var parameters models.Parameters + param := make([]models.Parameter, 0) + param = append(param, models.Parameter{ + Label: modelarts.ResultUrl, + Value: "s3:/" + resultObsPath, + }, models.Parameter{ + Label: modelarts.CkptUrl, + Value: "s3:/" + ckptUrl, + }) + uuid := srcDataset + ";" + combatDataset + datasUrlList, dataUrl, datasetNames, isMultiDataset, err := getDatasUrlListByUUIDS(uuid) + if err != nil { + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr(err.Error(), tplCloudBrainModelSafetyNew, nil) + return + } + dataPath := dataUrl + jsondatas, err := json.Marshal(datasUrlList) + if err != nil { + log.Error("Failed to Marshal: %v", err) + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr("json error:"+err.Error(), tplCloudBrainModelSafetyNew, nil) + return + } + if isMultiDataset { + param = append(param, models.Parameter{ + Label: modelarts.MultiDataUrl, + Value: string(jsondatas), + }) + } + + existDeviceTarget := false + if len(Params) != 0 { + err := json.Unmarshal([]byte(Params), ¶meters) + if err != nil { + log.Error("Failed to Unmarshal params: %s (%v)", Params, err) + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr("运行参数错误", tplCloudBrainModelSafetyNew, nil) + return + } + for _, parameter := range parameters.Parameter { + if parameter.Label == modelarts.DeviceTarget { + existDeviceTarget = true + } + if parameter.Label != modelarts.TrainUrl && parameter.Label != modelarts.DataUrl { + param = append(param, models.Parameter{ + Label: parameter.Label, + Value: parameter.Value, + }) + } + } + } + if !existDeviceTarget { + param = append(param, models.Parameter{ + Label: modelarts.DeviceTarget, + Value: modelarts.Ascend, + }) + } + + req := &modelarts.GenerateInferenceJobReq{ + JobName: jobName, + DisplayJobName: displayJobName, + DataUrl: dataPath, + Description: description, + CodeObsPath: codeObsPath, + BootFileUrl: codeObsPath + BootFile, + BootFile: BootFile, + TrainUrl: trainUrl, + WorkServerNumber: 1, + EngineID: int64(engineID), + LogUrl: logObsPath, + PoolID: poolID, + Uuid: uuid, + Parameters: param, //modelarts train parameters + CommitID: commitID, + BranchName: cloudbrain.DefaultBranchName, + Params: Params, + FlavorName: FlavorName, + EngineName: EngineName, + LabelName: evaluationIndex, + IsLatestVersion: isLatestVersion, + VersionCount: VersionCount, + TotalVersionCount: modelarts.TotalVersionCount, + ModelName: modelName, + ModelVersion: modelVersion, + CkptName: ckptName, + ResultUrl: resultObsPath, + Spec: spec, + DatasetName: datasetNames, + JobType: string(models.JobTypeModelSafety), + } + + err = modelarts.GenerateInferenceJob(ctx, req) + if err != nil { + log.Error("GenerateTrainJob failed:%v", err.Error()) + modelSafetyNewDataPrepare(ctx) + ctx.RenderWithErr(err.Error(), tplCloudBrainModelSafetyNew, nil) + return + } } func createForGPU(ctx *context.Context, jobName string) { diff --git a/routers/repo/modelarts.go b/routers/repo/modelarts.go index 5487231a2..811ec0424 100755 --- a/routers/repo/modelarts.go +++ b/routers/repo/modelarts.go @@ -2200,6 +2200,7 @@ func InferenceJobCreate(ctx *context.Context, form auth.CreateModelArtsInference ResultUrl: resultObsPath, Spec: spec, DatasetName: datasetNames, + JobType: string(models.JobTypeInference), } err = modelarts.GenerateInferenceJob(ctx, req) From 126666ddfc7234d4676837bad0f9832f3d1d9de0 Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 29 Sep 2022 15:15:51 +0800 Subject: [PATCH 049/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 20 ++++++++++--- routers/repo/aisafety.go | 76 ++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 88 insertions(+), 8 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index 16e873c90..249043178 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -206,7 +206,19 @@ func GetAlgorithmList() (map[string]interface{}, error) { } -func GetTaskStatus(jobID string) (map[string]interface{}, error) { +type ReturnMsg struct { + code string + msg string + data ReturnData + times int64 +} +type ReturnData struct { + no string + code int + status int +} + +func GetTaskStatus(jobID string) (*ReturnMsg, error) { checkSetting() client := getRestyClient() var taskResult string @@ -229,9 +241,9 @@ func GetTaskStatus(jobID string) (map[string]interface{}, error) { log.Info("error =" + err.Error()) return nil, fmt.Errorf("Get task status error: %v", err) } else { - reMap := make(map[string]interface{}) - err = json.Unmarshal(res.Body(), &reMap) - if err == nil && reMap["code"] == "0" { + var reMap *ReturnMsg + err = json.Unmarshal(res.Body(), reMap) + if err == nil && reMap.code == "0" { return reMap, nil } else { return nil, fmt.Errorf("get error,code not 0") diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 0f4b6ee1a..45c927477 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -76,7 +76,9 @@ func GetAiSafetyTask(ctx *context.Context) { func syncAiSafetyTaskStatus(job *models.Cloudbrain) { if job.Type == models.TypeCloudBrainTwo { - + if isTaskNotFinished(job.Status) { + queryTaskStatusFromCloudbrainTwo(job) + } } else if job.Type == models.TypeCloudBrainOne { if isTaskNotFinished(job.Status) { queryTaskStatusFromCloudbrain(job) @@ -105,6 +107,72 @@ func TimerHandleModelSafetyTestTask() { } } +func queryTaskStatusFromCloudbrainTwo(job *models.Cloudbrain) { + log.Info("The task not finished,name=" + job.DisplayJobName) + result, err := modelarts.GetTrainJob(job.JobID, strconv.FormatInt(job.VersionID, 10)) + if err != nil { + log.Info("query train job error." + err.Error()) + return + } + + job.Status = modelarts.TransTrainJobStatus(result.IntStatus) + job.Duration = result.Duration + job.TrainJobDuration = result.TrainJobDuration + if job.Status != string(models.ModelArtsTrainJobCompleted) { + err = models.UpdateJob(job) + if err != nil { + log.Error("UpdateJob failed:", err) + } + } else { + job.Status = string(models.ModelSafetyTesting) + err = models.UpdateJob(job) + if err != nil { + log.Error("UpdateJob failed:", err) + } + //send msg to beihang + sendNPUInferenceResultToTest(job) + } + +} + +func sendNPUInferenceResultToTest(job *models.Cloudbrain) { + datasetname := job.DatasetName + datasetnames := strings.Split(datasetname, ";") + indicator := job.LabelName + + req := aisafety.TaskReq{ + UnionId: job.JobID, + EvalName: job.DisplayJobName, + EvalContent: job.Description, + TLPath: "test", + Indicators: strings.Split(indicator, ";"), + CDName: datasetnames[1], + BDName: datasetnames[0], + } + jsonContent := "" + //TODO + + if jsonContent != "" { + serialNo, err := aisafety.CreateSafetyTask(req, jsonContent) + if err == nil { + //update serial no to db + job.PreVersionName = serialNo + err = models.UpdateJob(job) + if err != nil { + log.Error("UpdateJob failed:", err) + } + } + } else { + log.Info("The json is null. so set it failed.") + //update task failed. + job.Status = string(models.ModelArtsTrainJobFailed) + err := models.UpdateJob(job) + if err != nil { + log.Error("UpdateJob failed:", err) + } + } +} + func queryTaskStatusFromCloudbrain(job *models.Cloudbrain) { log.Info("The task not finished,name=" + job.DisplayJobName) @@ -135,7 +203,7 @@ func queryTaskStatusFromCloudbrain(job *models.Cloudbrain) { log.Error("UpdateJob failed:", err) } //send msg to beihang - sendGpuInferenceResultToTest(job) + sendGPUInferenceResultToTest(job) } } @@ -150,7 +218,7 @@ func queryTaskStatusFromModelSafetyTestServer(job *models.Cloudbrain) { } } -func sendGpuInferenceResultToTest(job *models.Cloudbrain) { +func sendGPUInferenceResultToTest(job *models.Cloudbrain) { datasetname := job.DatasetName datasetnames := strings.Split(datasetname, ";") indicator := job.LabelName @@ -314,7 +382,7 @@ func AiSafetyCreateForPost(ctx *context.Context) { } else if taskType == models.TypeCloudBrainOne { createForGPU(ctx, jobName) } - //ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/cloudbrain/benchmark") + ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/cloudbrain/benchmark") } func createForNPU(ctx *context.Context, jobName string) { From a33a21befac3808a8bc06bfba7ff7da5f465f48f Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 29 Sep 2022 15:25:35 +0800 Subject: [PATCH 050/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 26 +++++++++++++------------- routers/repo/aisafety.go | 4 +--- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index 249043178..bcd077c23 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -32,6 +32,18 @@ type TaskReq struct { BDName string //原数据集名称 } +type ReturnMsg struct { + Code string `json:"code"` + Msg string `json:"msg"` + Data ReturnData `json:"data"` + Times int64 `json:"times"` +} +type ReturnData struct { + No string `json:"no"` + Code int `json:"code"` + Status int `json:"status"` +} + const ( APPID = "1" LogPageSize = 500 @@ -206,18 +218,6 @@ func GetAlgorithmList() (map[string]interface{}, error) { } -type ReturnMsg struct { - code string - msg string - data ReturnData - times int64 -} -type ReturnData struct { - no string - code int - status int -} - func GetTaskStatus(jobID string) (*ReturnMsg, error) { checkSetting() client := getRestyClient() @@ -243,7 +243,7 @@ func GetTaskStatus(jobID string) (*ReturnMsg, error) { } else { var reMap *ReturnMsg err = json.Unmarshal(res.Body(), reMap) - if err == nil && reMap.code == "0" { + if err == nil { return reMap, nil } else { return nil, fmt.Errorf("get error,code not 0") diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 45c927477..ab4065916 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -210,10 +210,8 @@ func queryTaskStatusFromCloudbrain(job *models.Cloudbrain) { func queryTaskStatusFromModelSafetyTestServer(job *models.Cloudbrain) { result, err := aisafety.GetTaskStatus(job.PreVersionName) if err == nil { - if result["code"] != nil { - if result["code"].(string) == "0" { + if result.Code == "0" { - } } } } From 0c7674885bb81e39f44a0d5c80c1a28a9c40d923 Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 29 Sep 2022 15:32:44 +0800 Subject: [PATCH 051/180] =?UTF-8?q?=E6=9E=9C=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 8 +++++--- routers/routes/routes.go | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index bcd077c23..868adeb91 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -39,9 +39,11 @@ type ReturnMsg struct { Times int64 `json:"times"` } type ReturnData struct { - No string `json:"no"` - Code int `json:"code"` - Status int `json:"status"` + ID int `json:"id"` + No string `json:"no"` + StandardJson string `json:"standardJson"` + Code int `json:"code"` + Status int `json:"status"` } const ( diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 623071936..09f6a1b1c 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -1232,9 +1232,9 @@ func RegisterRoutes(m *macaron.Macaron) { m.Get("", reqRepoCloudBrainWriter, repo.GetAiSafetyTask) m.Post("/stop", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.StopAiSafetyTask) m.Post("/del", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.DelAiSafetyTask) - m.Get("/create", reqWechatBind, reqRepoCloudBrainWriter, repo.AiSafetyCreateForGet) - m.Post("/create", reqWechatBind, reqRepoCloudBrainWriter, repo.AiSafetyCreateForPost) }) + m.Get("/create", reqWechatBind, reqRepoCloudBrainWriter, repo.AiSafetyCreateForGet) + m.Post("/create", reqWechatBind, reqRepoCloudBrainWriter, repo.AiSafetyCreateForPost) }, context.RepoRef()) m.Group("/debugjob", func() { From 54c215c40ae05ba5c6239df44557271205ba7b4c Mon Sep 17 00:00:00 2001 From: chenshihai Date: Thu, 29 Sep 2022 15:56:37 +0800 Subject: [PATCH 052/180] add modelsatety new tmpl --- templates/repo/modelsafety/new.tmpl | 316 ++++++++++++++++++++++++++++++++++++ 1 file changed, 316 insertions(+) create mode 100644 templates/repo/modelsafety/new.tmpl diff --git a/templates/repo/modelsafety/new.tmpl b/templates/repo/modelsafety/new.tmpl new file mode 100644 index 000000000..b2d180215 --- /dev/null +++ b/templates/repo/modelsafety/new.tmpl @@ -0,0 +1,316 @@ +{{template "base/head" .}} + +{{template "custom/global_mask" .}} +
+ {{template "repo/header" .}} +
+ + {{template "base/alert" .}} +

+ {{.i18n.Tr "repo.modelarts.evaluate_job.new_job"}} +

+
+ +
+ {{.CsrfTokenHtml}} + + + +
+
+ + {{template "custom/task_wait_count" .}} +
+
+ + + {{.i18n.Tr "repo.cloudbrain_jobname_err"}} +
+
+ + +
+ +
+
+ + +
+
+ +
+
+ +
+ + + +
+
+
+ + + + + + {{.i18n.Tr "cloudbrain.view_sample"}} +
+
+ +
+ + + + + + +
+
+ + + {{.i18n.Tr "repo.modelarts.train_job.add_run_parameter"}} + + +
+
+
+ + + {{if .CloudBrainPaySwitch}} +
+ {{$.i18n.Tr "points.balance_of_points"}}{{.PointAccount.Balance}}{{$.i18n.Tr "points.points"}}{{$.i18n.Tr "points.expected_time"}}{{$.i18n.Tr "points.hours"}} + + + {{$.i18n.Tr "points.points_acquisition_instructions"}} + +
+ {{end}} +
+
+ + + {{.i18n.Tr "repo.cloudbrain.cancel"}} +
+
+
+
+
+
+{{template "base/footer" .}} + + + + From b8976fed7142da2a2d9cf0bab86320391a99b5f2 Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 29 Sep 2022 16:07:34 +0800 Subject: [PATCH 053/180] =?UTF-8?q?Json=E8=A7=A3=E9=87=8A=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E4=BF=AE=E6=94=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index 868adeb91..31d66b880 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -38,11 +38,13 @@ type ReturnMsg struct { Data ReturnData `json:"data"` Times int64 `json:"times"` } + type ReturnData struct { ID int `json:"id"` No string `json:"no"` StandardJson string `json:"standardJson"` Code int `json:"code"` + Msg string `json:"msg"` Status int `json:"status"` } @@ -243,10 +245,10 @@ func GetTaskStatus(jobID string) (*ReturnMsg, error) { log.Info("error =" + err.Error()) return nil, fmt.Errorf("Get task status error: %v", err) } else { - var reMap *ReturnMsg - err = json.Unmarshal(res.Body(), reMap) + var reMap ReturnMsg + err = json.Unmarshal(res.Body(), &reMap) if err == nil { - return reMap, nil + return &reMap, nil } else { return nil, fmt.Errorf("get error,code not 0") } From e5103ce2ef000e9a144dc5bd6d12be80b21172c3 Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 29 Sep 2022 16:21:53 +0800 Subject: [PATCH 054/180] =?UTF-8?q?Json=E8=A7=A3=E9=87=8A=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E4=BF=AE=E6=94=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- modules/aisafety/resty.go | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index 31d66b880..9f7ebf5d2 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -225,7 +225,7 @@ func GetAlgorithmList() (map[string]interface{}, error) { func GetTaskStatus(jobID string) (*ReturnMsg, error) { checkSetting() client := getRestyClient() - var taskResult string + var reMap ReturnMsg params := make(map[string]interface{}) params["serialNo"] = jobID @@ -233,7 +233,7 @@ func GetTaskStatus(jobID string) (*ReturnMsg, error) { SetHeader("Content-Type", "application/json"). SetHeader("appId", APPID). SetHeader("sign", createSign(params, KEY)). - SetResult(&taskResult). + SetResult(&reMap). Get(HOST + "/v1/external/eval-standard/query?serialNo=" + jobID) log.Info("url=" + HOST + "/v1/external/eval-standard/query?serialNo=" + jobID) @@ -245,12 +245,13 @@ func GetTaskStatus(jobID string) (*ReturnMsg, error) { log.Info("error =" + err.Error()) return nil, fmt.Errorf("Get task status error: %v", err) } else { - var reMap ReturnMsg - err = json.Unmarshal(res.Body(), &reMap) - if err == nil { - return &reMap, nil - } else { - return nil, fmt.Errorf("get error,code not 0") - } + log.Info("finished.") + // var reMap ReturnMsg + // err = json.Unmarshal(res.Body(), &reMap) + // if err == nil { + return &reMap, nil + // } else { + // return nil, fmt.Errorf("get error,code not 0") + // } } } From 7f4531c4e386cbc339e6842566639673ef4dc101 Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 29 Sep 2022 16:46:39 +0800 Subject: [PATCH 055/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9=E6=A8=A1=E6=9D=BF=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 83 ++++++++++++++++++++++++++++++++++------------ routers/repo/cloudbrain.go | 3 +- routers/routes/routes.go | 3 +- 3 files changed, 65 insertions(+), 24 deletions(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index ab4065916..0ee54f535 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -28,7 +28,8 @@ import ( ) const ( - tplModelSafetyTestCreate = "repo/modelsafety/new" + tplModelSafetyTestCreateGpu = "repo/modelsafety/newgpu" + tplModelSafetyTestCreateNpu = "repo/modelsafety/newnpu" ) func CloudBrainAiSafetyCreateTest(ctx *context.Context) { @@ -309,13 +310,46 @@ func DelAiSafetyTask(ctx *context.Context) { } -func AiSafetyCreateForGet(ctx *context.Context) { +func AiSafetyCreateForGetGPU(ctx *context.Context) { ctx.Data["PageIsCloudBrain"] = true + ctx.Data["IsCreate"] = true ctx.Data["BaseDataSetName"] = setting.ModelSafetyTest.BaseDataSetName ctx.Data["BaseDataSetUUID"] = setting.ModelSafetyTest.BaseDataSetUUID ctx.Data["CombatDataSetName"] = setting.ModelSafetyTest.CombatDataSetName ctx.Data["CombatDataSetUUID"] = setting.ModelSafetyTest.CombatDataSetUUID - ctx.HTML(200, tplModelSafetyTestCreate) + prepareCloudbrainOneSpecs(ctx) + ctx.HTML(200, tplModelSafetyTestCreateGpu) +} + +func AiSafetyCreateForGetNPU(ctx *context.Context) { + ctx.Data["PageIsCloudBrain"] = true + ctx.Data["IsCreate"] = true + ctx.Data["BaseDataSetName"] = setting.ModelSafetyTest.BaseDataSetName + ctx.Data["BaseDataSetUUID"] = setting.ModelSafetyTest.BaseDataSetUUID + ctx.Data["CombatDataSetName"] = setting.ModelSafetyTest.CombatDataSetName + ctx.Data["CombatDataSetUUID"] = setting.ModelSafetyTest.CombatDataSetUUID + + var resourcePools modelarts.ResourcePool + if err := json.Unmarshal([]byte(setting.ResourcePools), &resourcePools); err != nil { + ctx.ServerError("json.Unmarshal failed:", err) + } + ctx.Data["resource_pools"] = resourcePools.Info + + var engines modelarts.Engine + if err := json.Unmarshal([]byte(setting.Engines), &engines); err != nil { + ctx.ServerError("json.Unmarshal failed:", err) + } + ctx.Data["engines"] = engines.Info + + var versionInfos modelarts.VersionInfo + if err := json.Unmarshal([]byte(setting.EngineVersions), &versionInfos); err != nil { + ctx.ServerError("json.Unmarshal failed:", err) + } + ctx.Data["engine_versions"] = versionInfos.Version + + prepareCloudbrainTwoInferenceSpecs(ctx) + + ctx.HTML(200, tplModelSafetyTestCreateNpu) } func AiSafetyCreateForPost(ctx *context.Context) { @@ -329,26 +363,31 @@ func AiSafetyCreateForPost(ctx *context.Context) { repo := ctx.Repo.Repository + tpname := tplCloudBrainModelSafetyNewNpu + if taskType == models.TypeCloudBrainOne { + tpname = tplCloudBrainModelSafetyNewGpu + } + tasks, err := models.GetCloudbrainsByDisplayJobName(repo.ID, string(models.JobTypeModelSafety), displayJobName) if err == nil { if len(tasks) != 0 { log.Error("the job name did already exist", ctx.Data["MsgID"]) modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr("the job name did already exist", tplCloudBrainModelSafetyNew, nil) + ctx.RenderWithErr("the job name did already exist", tpname, nil) return } } else { if !models.IsErrJobNotExist(err) { log.Error("system error, %v", err, ctx.Data["MsgID"]) modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr("system error", tplCloudBrainModelSafetyNew, nil) + ctx.RenderWithErr("system error", tpname, nil) return } } if !jobNamePattern.MatchString(jobName) { modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr(ctx.Tr("repo.cloudbrain_jobname_err"), tplCloudBrainModelSafetyNew, nil) + ctx.RenderWithErr(ctx.Tr("repo.cloudbrain_jobname_err"), tpname, nil) return } @@ -356,13 +395,13 @@ func AiSafetyCreateForPost(ctx *context.Context) { if err != nil { log.Error("GetCloudbrainCountByUserID failed:%v", err, ctx.Data["MsgID"]) modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr("system error", tplCloudBrainModelSafetyNew, nil) + ctx.RenderWithErr("system error", tpname, nil) return } else { if count >= 1 { log.Error("the user already has running or waiting task", ctx.Data["MsgID"]) modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr(ctx.Tr("repo.cloudbrain.morethanonejob"), tplCloudBrainModelSafetyNew, nil) + ctx.RenderWithErr(ctx.Tr("repo.cloudbrain.morethanonejob"), tpname, nil) return } } @@ -371,7 +410,7 @@ func AiSafetyCreateForPost(ctx *context.Context) { if err != nil || !bootFileExist { log.Error("Get bootfile error:", err) modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr(ctx.Tr("repo.cloudbrain_bootfile_err"), tplModelArtsInferenceJobNew, nil) + ctx.RenderWithErr(ctx.Tr("repo.cloudbrain_bootfile_err"), tpname, nil) return } @@ -424,13 +463,13 @@ func createForNPU(ctx *context.Context, jobName string) { AiCenterCode: models.AICenterOfCloudBrainTwo}) if err != nil || spec == nil { modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr("Resource specification not available", tplCloudBrainModelSafetyNew, nil) + ctx.RenderWithErr("Resource specification not available", tplCloudBrainModelSafetyNewNpu, nil) return } if !account.IsPointBalanceEnough(ctx.User.ID, spec.UnitPrice) { log.Error("point balance is not enough,userId=%d specId=%d ", ctx.User.ID, spec.ID) modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr(ctx.Tr("points.insufficient_points_balance"), tplCloudBrainModelSafetyNew, nil) + ctx.RenderWithErr(ctx.Tr("points.insufficient_points_balance"), tplCloudBrainModelSafetyNewNpu, nil) return } @@ -446,7 +485,7 @@ func createForNPU(ctx *context.Context, jobName string) { if err := downloadCode(repo, codeLocalPath, cloudbrain.DefaultBranchName); err != nil { log.Error("Create task failed, server timed out: %s (%v)", repo.FullName(), err) modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr(ctx.Tr("cloudbrain.load_code_failed"), tplCloudBrainModelSafetyNew, nil) + ctx.RenderWithErr(ctx.Tr("cloudbrain.load_code_failed"), tplCloudBrainModelSafetyNewNpu, nil) return } @@ -454,21 +493,21 @@ func createForNPU(ctx *context.Context, jobName string) { if err := obsMkdir(setting.CodePathPrefix + jobName + modelarts.ResultPath + VersionOutputPath + "/"); err != nil { log.Error("Failed to obsMkdir_result: %s (%v)", repo.FullName(), err) modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr("Failed to obsMkdir_result", tplCloudBrainModelSafetyNew, nil) + ctx.RenderWithErr("Failed to obsMkdir_result", tplCloudBrainModelSafetyNewNpu, nil) return } if err := obsMkdir(setting.CodePathPrefix + jobName + modelarts.LogPath + VersionOutputPath + "/"); err != nil { log.Error("Failed to obsMkdir_log: %s (%v)", repo.FullName(), err) modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr("Failed to obsMkdir_log", tplCloudBrainModelSafetyNew, nil) + ctx.RenderWithErr("Failed to obsMkdir_log", tplCloudBrainModelSafetyNewNpu, nil) return } if err := uploadCodeToObs(codeLocalPath, jobName, ""); err != nil { log.Error("Failed to uploadCodeToObs: %s (%v)", repo.FullName(), err) modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr(ctx.Tr("cloudbrain.load_code_failed"), tplCloudBrainModelSafetyNew, nil) + ctx.RenderWithErr(ctx.Tr("cloudbrain.load_code_failed"), tplCloudBrainModelSafetyNewNpu, nil) return } @@ -485,7 +524,7 @@ func createForNPU(ctx *context.Context, jobName string) { datasUrlList, dataUrl, datasetNames, isMultiDataset, err := getDatasUrlListByUUIDS(uuid) if err != nil { modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr(err.Error(), tplCloudBrainModelSafetyNew, nil) + ctx.RenderWithErr(err.Error(), tplCloudBrainModelSafetyNewNpu, nil) return } dataPath := dataUrl @@ -493,7 +532,7 @@ func createForNPU(ctx *context.Context, jobName string) { if err != nil { log.Error("Failed to Marshal: %v", err) modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr("json error:"+err.Error(), tplCloudBrainModelSafetyNew, nil) + ctx.RenderWithErr("json error:"+err.Error(), tplCloudBrainModelSafetyNewNpu, nil) return } if isMultiDataset { @@ -509,7 +548,7 @@ func createForNPU(ctx *context.Context, jobName string) { if err != nil { log.Error("Failed to Unmarshal params: %s (%v)", Params, err) modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr("运行参数错误", tplCloudBrainModelSafetyNew, nil) + ctx.RenderWithErr("运行参数错误", tplCloudBrainModelSafetyNewNpu, nil) return } @@ -569,7 +608,7 @@ func createForNPU(ctx *context.Context, jobName string) { if err != nil { log.Error("GenerateTrainJob failed:%v", err.Error()) modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr(err.Error(), tplCloudBrainModelSafetyNew, nil) + ctx.RenderWithErr(err.Error(), tplCloudBrainModelSafetyNewNpu, nil) return } } @@ -595,7 +634,7 @@ func createForGPU(ctx *context.Context, jobName string) { AiCenterCode: models.AICenterOfCloudBrainOne}) if err != nil || spec == nil { modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr("Resource specification not available", tplCloudBrainModelSafetyNew, nil) + ctx.RenderWithErr("Resource specification not available", tplCloudBrainModelSafetyNewGpu, nil) return } @@ -606,7 +645,7 @@ func createForGPU(ctx *context.Context, jobName string) { if err := downloadCode(repo, codePath, cloudbrain.DefaultBranchName); err != nil { log.Error("downloadCode failed, %v", err, ctx.Data["MsgID"]) modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr("system error", tplCloudBrainModelSafetyNew, nil) + ctx.RenderWithErr("system error", tplCloudBrainModelSafetyNewGpu, nil) return } @@ -614,7 +653,7 @@ func createForGPU(ctx *context.Context, jobName string) { if err != nil { log.Error("uploadCodeToMinio failed, %v", err, ctx.Data["MsgID"]) modelSafetyNewDataPrepare(ctx) - ctx.RenderWithErr("system error", tplCloudBrainModelSafetyNew, nil) + ctx.RenderWithErr("system error", tplCloudBrainModelSafetyNewGpu, nil) return } diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index f24d33cd0..1f6732174 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -51,7 +51,8 @@ const ( tplCloudBrainBenchmarkNew base.TplName = "repo/cloudbrain/benchmark/new" tplCloudBrainBenchmarkShow base.TplName = "repo/cloudbrain/benchmark/show" - tplCloudBrainModelSafetyNew base.TplName = "repo/cloudbrain/modelsafety/new" + tplCloudBrainModelSafetyNewGpu base.TplName = "repo/cloudbrain/modelsafety/newgpu" + tplCloudBrainModelSafetyNewNpu base.TplName = "repo/cloudbrain/modelsafety/newnpu" tplCloudBrainImageSubmit base.TplName = "repo/cloudbrain/image/submit" tplCloudBrainImageEdit base.TplName = "repo/cloudbrain/image/edit" diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 09f6a1b1c..e249fafbe 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -1233,7 +1233,8 @@ func RegisterRoutes(m *macaron.Macaron) { m.Post("/stop", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.StopAiSafetyTask) m.Post("/del", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.DelAiSafetyTask) }) - m.Get("/create", reqWechatBind, reqRepoCloudBrainWriter, repo.AiSafetyCreateForGet) + m.Get("/create_gpu", reqWechatBind, reqRepoCloudBrainWriter, repo.AiSafetyCreateForGetGPU) + m.Get("/create_npu", reqWechatBind, reqRepoCloudBrainWriter, repo.AiSafetyCreateForGetNPU) m.Post("/create", reqWechatBind, reqRepoCloudBrainWriter, repo.AiSafetyCreateForPost) }, context.RepoRef()) From 587dcb60f786a4ce1e8b202b9ca3d80c7db46e0b Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 29 Sep 2022 17:10:50 +0800 Subject: [PATCH 056/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4NPU=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E7=9A=84=E4=BB=A3=E7=A0=81=EF=BC=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 0ee54f535..a8bd6a2a2 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -151,7 +151,28 @@ func sendNPUInferenceResultToTest(job *models.Cloudbrain) { BDName: datasetnames[0], } jsonContent := "" - //TODO + VersionOutputPath := modelarts.GetOutputPathByCount(modelarts.TotalVersionCount) + resultPath := modelarts.JobPath + job.JobName + modelarts.ResultPath + VersionOutputPath + "/result.json" + body, err := storage.ObsDownloadAFile(setting.Bucket, resultPath) + if err != nil { + log.Info("ObsDownloadAFile error." + err.Error() + " resultPath=" + resultPath) + } else { + defer body.Close() + var data []byte + p := make([]byte, 4096) + var readErr error + var readCount int + for { + readCount, readErr = body.Read(p) + if readCount > 0 { + data = append(data, p[:readCount]...) + } + if readErr != nil || readCount == 0 { + break + } + } + jsonContent = string(data) + } if jsonContent != "" { serialNo, err := aisafety.CreateSafetyTask(req, jsonContent) From 5de0aa0dbcaac4a6d3219dcd47a0c555675320c8 Mon Sep 17 00:00:00 2001 From: zouap Date: Thu, 29 Sep 2022 17:21:14 +0800 Subject: [PATCH 057/180] =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E8=AF=84=E6=B5=8B?= =?UTF-8?q?=E5=90=8E=E7=AB=AF=E4=BB=A3=E7=A0=81=E7=BC=96=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- models/cloudbrain.go | 40 ++++++++++++++++++++-------------------- modules/aisafety/resty.go | 8 -------- routers/repo/aisafety.go | 39 ++++++++++++++++++++++++++++----------- 3 files changed, 48 insertions(+), 39 deletions(-) diff --git a/models/cloudbrain.go b/models/cloudbrain.go index 24be7b989..cb0fb3421 100755 --- a/models/cloudbrain.go +++ b/models/cloudbrain.go @@ -175,26 +175,26 @@ type Cloudbrain struct { ImageID string //grampus image_id AiCenter string //grampus ai center: center_id+center_name - TrainUrl string //输出模型的obs路径 - BranchName string //分支名称 - Parameters string //传给modelarts的param参数 - BootFile string //启动文件 - DataUrl string //数据集的obs路径 - LogUrl string //日志输出的obs路径 - PreVersionId int64 //父版本的版本id - FlavorCode string //modelarts上的规格id - Description string `xorm:"varchar(256)"` //描述 - WorkServerNumber int //节点数 - FlavorName string //规格名称 - EngineName string //引擎名称 - TotalVersionCount int //任务的所有版本数量,包括删除的 - LabelName string //标签名称 - ModelName string //模型名称 - ModelVersion string //模型版本 - CkptName string //权重文件名称 - PreTrainModelUrl string //预训练模型地址 - ResultUrl string //推理结果的obs路径 - + TrainUrl string //输出模型的obs路径 + BranchName string //分支名称 + Parameters string //传给modelarts的param参数 + BootFile string //启动文件 + DataUrl string //数据集的obs路径 + LogUrl string //日志输出的obs路径 + PreVersionId int64 //父版本的版本id + FlavorCode string //modelarts上的规格id + Description string `xorm:"varchar(256)"` //描述 + WorkServerNumber int //节点数 + FlavorName string //规格名称 + EngineName string //引擎名称 + TotalVersionCount int //任务的所有版本数量,包括删除的 + LabelName string //标签名称 + ModelName string //模型名称 + ModelVersion string //模型版本 + CkptName string //权重文件名称 + PreTrainModelUrl string //预训练模型地址 + ResultUrl string //推理结果的obs路径 + ResultJson string `xorm:"varchar(4000)"` User *User `xorm:"-"` Repo *Repository `xorm:"-"` BenchmarkType string `xorm:"-"` //算法评测,模型评测 diff --git a/modules/aisafety/resty.go b/modules/aisafety/resty.go index 9f7ebf5d2..be6468529 100644 --- a/modules/aisafety/resty.go +++ b/modules/aisafety/resty.go @@ -237,7 +237,6 @@ func GetTaskStatus(jobID string) (*ReturnMsg, error) { Get(HOST + "/v1/external/eval-standard/query?serialNo=" + jobID) log.Info("url=" + HOST + "/v1/external/eval-standard/query?serialNo=" + jobID) - responseStr := string(res.Body()) log.Info("GetTaskStatus responseStr=" + responseStr + " res code=" + fmt.Sprint(res.StatusCode())) @@ -245,13 +244,6 @@ func GetTaskStatus(jobID string) (*ReturnMsg, error) { log.Info("error =" + err.Error()) return nil, fmt.Errorf("Get task status error: %v", err) } else { - log.Info("finished.") - // var reMap ReturnMsg - // err = json.Unmarshal(res.Body(), &reMap) - // if err == nil { return &reMap, nil - // } else { - // return nil, fmt.Errorf("get error,code not 0") - // } } } diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index a8bd6a2a2..f845c3918 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -76,19 +76,17 @@ func GetAiSafetyTask(ctx *context.Context) { } func syncAiSafetyTaskStatus(job *models.Cloudbrain) { - if job.Type == models.TypeCloudBrainTwo { - if isTaskNotFinished(job.Status) { + if isTaskNotFinished(job.Status) { + if job.Type == models.TypeCloudBrainTwo { queryTaskStatusFromCloudbrainTwo(job) - } - } else if job.Type == models.TypeCloudBrainOne { - if isTaskNotFinished(job.Status) { + } else if job.Type == models.TypeCloudBrainOne { queryTaskStatusFromCloudbrain(job) + } + } else { + if job.Status == string(models.ModelSafetyTesting) { + queryTaskStatusFromModelSafetyTestServer(job) } else { - if job.Status == string(models.ModelSafetyTesting) { - queryTaskStatusFromModelSafetyTestServer(job) - } else { - log.Info("The job is finished. status=" + job.Status) - } + log.Info("The job is finished. status=" + job.Status) } } } @@ -233,8 +231,27 @@ func queryTaskStatusFromModelSafetyTestServer(job *models.Cloudbrain) { result, err := aisafety.GetTaskStatus(job.PreVersionName) if err == nil { if result.Code == "0" { - + if result.Data.Status == 1 { + log.Info("The task is running....") + } else { + if result.Data.Code == 0 { + job.ResultJson = result.Data.StandardJson + err = models.UpdateJob(job) + if err != nil { + log.Error("UpdateJob failed:", err) + } + } + } + } else { + log.Info("The task is failed.") + job.Status = string(models.JobFailed) + err = models.UpdateJob(job) + if err != nil { + log.Error("UpdateJob failed:", err) + } } + } else { + log.Info("The task not found.....") } } From 6cd7f96040b300f1a10b1423312fee373511bc07 Mon Sep 17 00:00:00 2001 From: chenshihai Date: Fri, 30 Sep 2022 09:21:11 +0800 Subject: [PATCH 058/180] update model safety --- routers/repo/aisafety.go | 2 + routers/repo/cloudbrain.go | 4 +- templates/repo/cloudbrain/benchmark/new.tmpl | 6 +- templates/repo/modelsafety/indicators_descr.tmpl | 62 ++++++++++ templates/repo/modelsafety/new.tmpl | 142 ++++++++++++----------- templates/repo/modelsafety/newgpu.tmpl | 1 + templates/repo/modelsafety/newnpu.tmpl | 1 + web_src/js/components/dataset/selectDataset.vue | 3 +- web_src/js/components/images/selectImages.vue | 3 +- 9 files changed, 149 insertions(+), 75 deletions(-) create mode 100644 templates/repo/modelsafety/indicators_descr.tmpl create mode 100644 templates/repo/modelsafety/newgpu.tmpl create mode 100644 templates/repo/modelsafety/newnpu.tmpl diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index f845c3918..eb3019e5a 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -351,6 +351,7 @@ func DelAiSafetyTask(ctx *context.Context) { func AiSafetyCreateForGetGPU(ctx *context.Context) { ctx.Data["PageIsCloudBrain"] = true ctx.Data["IsCreate"] = true + ctx.Data["datasetType"] = models.TypeCloudBrainOne ctx.Data["BaseDataSetName"] = setting.ModelSafetyTest.BaseDataSetName ctx.Data["BaseDataSetUUID"] = setting.ModelSafetyTest.BaseDataSetUUID ctx.Data["CombatDataSetName"] = setting.ModelSafetyTest.CombatDataSetName @@ -362,6 +363,7 @@ func AiSafetyCreateForGetGPU(ctx *context.Context) { func AiSafetyCreateForGetNPU(ctx *context.Context) { ctx.Data["PageIsCloudBrain"] = true ctx.Data["IsCreate"] = true + ctx.Data["datasetType"] = models.TypeCloudBrainTwo ctx.Data["BaseDataSetName"] = setting.ModelSafetyTest.BaseDataSetName ctx.Data["BaseDataSetUUID"] = setting.ModelSafetyTest.BaseDataSetUUID ctx.Data["CombatDataSetName"] = setting.ModelSafetyTest.CombatDataSetName diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index 1f6732174..b1020c082 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -51,8 +51,8 @@ const ( tplCloudBrainBenchmarkNew base.TplName = "repo/cloudbrain/benchmark/new" tplCloudBrainBenchmarkShow base.TplName = "repo/cloudbrain/benchmark/show" - tplCloudBrainModelSafetyNewGpu base.TplName = "repo/cloudbrain/modelsafety/newgpu" - tplCloudBrainModelSafetyNewNpu base.TplName = "repo/cloudbrain/modelsafety/newnpu" + tplCloudBrainModelSafetyNewGpu base.TplName = "repo/modelsafety/newgpu" + tplCloudBrainModelSafetyNewNpu base.TplName = "repo/modelsafety/newnpu" tplCloudBrainImageSubmit base.TplName = "repo/cloudbrain/image/submit" tplCloudBrainImageEdit base.TplName = "repo/cloudbrain/image/edit" diff --git a/templates/repo/cloudbrain/benchmark/new.tmpl b/templates/repo/cloudbrain/benchmark/new.tmpl index 863edd2d0..13665c036 100755 --- a/templates/repo/cloudbrain/benchmark/new.tmpl +++ b/templates/repo/cloudbrain/benchmark/new.tmpl @@ -51,7 +51,7 @@ {{.i18n.Tr "repo.cloudbrain.benchmark.model"}} 模型安全评测 + href="{{.RepoLink}}/modelsafety/create_gpu">模型安全评测
@@ -168,7 +168,7 @@ {{.i18n.Tr "repo.cloudbrain.benchmark.model"}} 模型安全评测 + href="{{.RepoLink}}/modelsafety/create_gpu">模型安全评测
@@ -298,7 +298,7 @@ {{.i18n.Tr "repo.cloudbrain.benchmark.model"}} 模型安全评测 + href="{{.RepoLink}}/modelsafety/create_gpu">模型安全评测 diff --git a/templates/repo/modelsafety/indicators_descr.tmpl b/templates/repo/modelsafety/indicators_descr.tmpl new file mode 100644 index 000000000..3b6f7ff48 --- /dev/null +++ b/templates/repo/modelsafety/indicators_descr.tmpl @@ -0,0 +1,62 @@ + + + + + diff --git a/templates/repo/modelsafety/new.tmpl b/templates/repo/modelsafety/new.tmpl index b2d180215..1b6cccf46 100644 --- a/templates/repo/modelsafety/new.tmpl +++ b/templates/repo/modelsafety/new.tmpl @@ -49,19 +49,42 @@
-
+ {{.CsrfTokenHtml}} +
+
+
+ +
-
- +
+ + +
+
+ + +
- + - - - - + {{template "repo/modelsafety/indicators_descr".}}
@@ -199,7 +183,7 @@
- + {{range .engines}} + + {{end}} + +
+
+ +
+
+ {{end}} +
From 2b06c6978884cca76e05d57c2c432eea7cf3cb12 Mon Sep 17 00:00:00 2001 From: zouap Date: Sat, 8 Oct 2022 16:55:10 +0800 Subject: [PATCH 071/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E8=B7=AF=E7=94=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 8 +++++++- routers/routes/routes.go | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 8eb275411..7e62ae71f 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -31,6 +31,7 @@ import ( const ( tplModelSafetyTestCreateGpu = "repo/modelsafety/newgpu" tplModelSafetyTestCreateNpu = "repo/modelsafety/newnpu" + tplModelSafetyTestShow = "repo/modelsafety/show" ) func CloudBrainAiSafetyCreateTest(ctx *context.Context) { @@ -67,13 +68,16 @@ func CloudBrainAiSafetyCreateTest(ctx *context.Context) { } func GetAiSafetyTaskByJob(job *models.Cloudbrain) { - if job == nil { log.Error("GetCloudbrainByJobID failed") return } syncAiSafetyTaskStatus(job) +} +func GetAiSafetyTaskTmpl(ctx *context.Context) { + ctx.Data["id"] = ctx.Params(":jobid") + ctx.HTML(200, tplModelSafetyTestShow) } func GetAiSafetyTask(ctx *context.Context) { @@ -85,6 +89,8 @@ func GetAiSafetyTask(ctx *context.Context) { } syncAiSafetyTaskStatus(job) job, err = models.GetCloudbrainByJobIDWithDeleted(ID) + job.BenchmarkType = "CV" + job.BenchmarkTypeName = "Classification" ctx.JSON(200, job) } diff --git a/routers/routes/routes.go b/routers/routes/routes.go index e249fafbe..9959e98ff 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -1229,6 +1229,7 @@ func RegisterRoutes(m *macaron.Macaron) { m.Group("/modelsafety", func() { m.Group("/:jobid", func() { + m.Get("/show", reqRepoCloudBrainWriter, repo.GetAiSafetyTaskTmpl) m.Get("", reqRepoCloudBrainWriter, repo.GetAiSafetyTask) m.Post("/stop", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.StopAiSafetyTask) m.Post("/del", cloudbrain.AdminOrOwnerOrJobCreaterRight, repo.DelAiSafetyTask) From c8e0d6d16f5c3a78e9fd8120c126b72fc852fac8 Mon Sep 17 00:00:00 2001 From: zouap Date: Sat, 8 Oct 2022 17:44:42 +0800 Subject: [PATCH 072/180] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 7e62ae71f..74b95fc5f 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -82,13 +82,13 @@ func GetAiSafetyTaskTmpl(ctx *context.Context) { func GetAiSafetyTask(ctx *context.Context) { var ID = ctx.Params(":jobid") - job, err := models.GetCloudbrainByJobIDWithDeleted(ID) + job, err := models.GetCloudbrainByIDWithDeleted(ID) if err != nil { log.Error("GetCloudbrainByJobID failed:" + err.Error()) return } syncAiSafetyTaskStatus(job) - job, err = models.GetCloudbrainByJobIDWithDeleted(ID) + job, err = models.GetCloudbrainByIDWithDeleted(ID) job.BenchmarkType = "CV" job.BenchmarkTypeName = "Classification" ctx.JSON(200, job) @@ -96,7 +96,7 @@ func GetAiSafetyTask(ctx *context.Context) { func StopAiSafetyTask(ctx *context.Context) { var ID = ctx.Params(":jobid") - task, err := models.GetCloudbrainByJobIDWithDeleted(ID) + task, err := models.GetCloudbrainByIDWithDeleted(ID) result := make(map[string]interface{}) result["code"] = -1 if err != nil { @@ -159,7 +159,7 @@ func StopAiSafetyTask(ctx *context.Context) { func DelAiSafetyTask(ctx *context.Context) { var ID = ctx.Params(":jobid") - task, err := models.GetCloudbrainByJobIDWithDeleted(ID) + task, err := models.GetCloudbrainByIDWithDeleted(ID) result := make(map[string]interface{}) result["code"] = 1 if err != nil { From 833902f8ec0ce5e30e9f9d2ada9eb3bca556f3f4 Mon Sep 17 00:00:00 2001 From: zouap Date: Sun, 9 Oct 2022 09:12:00 +0800 Subject: [PATCH 073/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=A4=E4=B8=AA?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=EF=BC=8C=E6=94=AF=E6=8C=81=E6=99=BA=E7=AE=97?= =?UTF-8?q?=E7=BD=91=E7=BB=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 64 ++++++++++++++++++++++++++++++++++++---- routers/repo/grampus.go | 76 ++++++++++++++++++++++++------------------------ routers/routes/routes.go | 2 ++ 3 files changed, 98 insertions(+), 44 deletions(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 74b95fc5f..5211e082b 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -17,6 +17,7 @@ import ( "code.gitea.io/gitea/modules/cloudbrain" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/grampus" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/modelarts" "code.gitea.io/gitea/modules/setting" @@ -29,9 +30,11 @@ import ( ) const ( - tplModelSafetyTestCreateGpu = "repo/modelsafety/newgpu" - tplModelSafetyTestCreateNpu = "repo/modelsafety/newnpu" - tplModelSafetyTestShow = "repo/modelsafety/show" + tplModelSafetyTestCreateGrampusGpu = "repo/modelsafety/newgrampusgpu" + tplModelSafetyTestCreateGrampusNpu = "repo/modelsafety/newgrampusnpu" + tplModelSafetyTestCreateGpu = "repo/modelsafety/newgpu" + tplModelSafetyTestCreateNpu = "repo/modelsafety/newnpu" + tplModelSafetyTestShow = "repo/modelsafety/show" ) func CloudBrainAiSafetyCreateTest(ctx *context.Context) { @@ -471,6 +474,40 @@ func AiSafetyCreateForGetGPU(ctx *context.Context) { } ctx.HTML(200, tplModelSafetyTestCreateGpu) } +func AiSafetyCreateForGetGrampusGPU(ctx *context.Context) { + ctx.Data["PageIsCloudBrain"] = true + ctx.Data["IsCreate"] = true + ctx.Data["datasetType"] = models.TypeCloudBrainOne + ctx.Data["BaseDataSetName"] = setting.ModelSafetyTest.BaseDataSetName + ctx.Data["BaseDataSetUUID"] = setting.ModelSafetyTest.BaseDataSetUUID + ctx.Data["CombatDataSetName"] = setting.ModelSafetyTest.CombatDataSetName + ctx.Data["CombatDataSetUUID"] = setting.ModelSafetyTest.CombatDataSetUUID + err := GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + if err != nil { + ctx.ServerError("get new train-job info failed", err) + return + } + ctx.HTML(200, tplModelSafetyTestCreateGrampusGpu) +} + +func AiSafetyCreateForGetGrampusNPU(ctx *context.Context) { + ctx.Data["PageIsCloudBrain"] = true + ctx.Data["IsCreate"] = true + + ctx.Data["datasetType"] = models.TypeCloudBrainTwo + ctx.Data["BaseDataSetName"] = setting.ModelSafetyTest.BaseDataSetName + ctx.Data["BaseDataSetUUID"] = setting.ModelSafetyTest.BaseDataSetUUID + ctx.Data["CombatDataSetName"] = setting.ModelSafetyTest.CombatDataSetName + ctx.Data["CombatDataSetUUID"] = setting.ModelSafetyTest.CombatDataSetUUID + + err := GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + if err != nil { + ctx.ServerError("get new train-job info failed", err) + return + } + + ctx.HTML(200, tplModelSafetyTestCreateGrampusNpu) +} func AiSafetyCreateForGetNPU(ctx *context.Context) { t := time.Now() @@ -510,11 +547,11 @@ func AiSafetyCreateForGetNPU(ctx *context.Context) { func AiSafetyCreateForPost(ctx *context.Context) { ctx.Data["PageIsCloudBrain"] = true - displayJobName := ctx.Query("DisplayJobName") + displayJobName := ctx.Query("display_job_name") jobName := util.ConvertDisplayJobNameToJobName(displayJobName) taskType := ctx.QueryInt("type") - description := ctx.Query("Description") + description := ctx.Query("description") ctx.Data["description"] = description repo := ctx.Repo.Repository @@ -561,7 +598,7 @@ func AiSafetyCreateForPost(ctx *context.Context) { return } } - BootFile := ctx.Query("BootFile") + BootFile := ctx.Query("boot_file") bootFileExist, err := ctx.Repo.FileExists(BootFile, cloudbrain.DefaultBranchName) if err != nil || !bootFileExist { log.Error("Get bootfile error:", err) @@ -574,10 +611,25 @@ func AiSafetyCreateForPost(ctx *context.Context) { createForNPU(ctx, jobName) } else if taskType == models.TypeCloudBrainOne { createForGPU(ctx, jobName) + } else if taskType == models.TypeC2Net { + ComputeResource := ctx.Query("compute_resource") + if ComputeResource == models.NPUResource { + createForGrampusNPU(ctx, jobName) + } else if ComputeResource == models.GPUResource { + createForGrampusGPU(ctx, jobName) + } } ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/cloudbrain/benchmark") } +func createForGrampusGPU(ctx *context.Context, jobName string) { + +} + +func createForGrampusNPU(ctx *context.Context, jobName string) { + +} + func createForNPU(ctx *context.Context, jobName string) { VersionOutputPath := modelarts.GetOutputPathByCount(modelarts.TotalVersionCount) BootFile := ctx.Query("boot_file") diff --git a/routers/repo/grampus.go b/routers/repo/grampus.go index abf64281a..11916ecb6 100755 --- a/routers/repo/grampus.go +++ b/routers/repo/grampus.go @@ -49,7 +49,7 @@ const ( func GrampusTrainJobGPUNew(ctx *context.Context) { ctx.Data["IsCreate"] = true - err := grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + err := GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) if err != nil { ctx.ServerError("get new train-job info failed", err) return @@ -60,7 +60,7 @@ func GrampusTrainJobGPUNew(ctx *context.Context) { func GrampusTrainJobNPUNew(ctx *context.Context) { ctx.Data["IsCreate"] = true - err := grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + err := GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) if err != nil { ctx.ServerError("get new train-job info failed", err) return @@ -68,7 +68,7 @@ func GrampusTrainJobNPUNew(ctx *context.Context) { ctx.HTML(200, tplGrampusTrainJobNPUNew) } -func grampusTrainJobNewDataPrepare(ctx *context.Context, processType string) error { +func GrampusTrainJobNewDataPrepare(ctx *context.Context, processType string) error { ctx.Data["PageIsCloudBrain"] = true t := time.Now() @@ -176,14 +176,14 @@ func GrampusTrainJobVersionNew(ctx *context.Context) { task := ctx.Cloudbrain ctx.Data["IsCreate"] = false if task.ComputeResource == models.GPUResource { - err := grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + err := GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) if err != nil { ctx.ServerError("get new train-job version info failed", err) return } ctx.HTML(http.StatusOK, tplGrampusTrainJobGPUNew) } else if task.ComputeResource == models.NPUResource { - err := grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + err := GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) if err != nil { ctx.ServerError("get new train-job version info failed", err) return @@ -279,14 +279,14 @@ func grampusTrainJobGpuCreate(ctx *context.Context, form auth.CreateGrampusTrain isOk, err := lock.Lock(models.CloudbrainKeyDuration) if !isOk { log.Error("lock processed failed:%v", err, ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) ctx.RenderWithErr(ctx.Tr("repo.cloudbrain_samejob_err"), tplGrampusTrainJobGPUNew, &form) return } defer lock.UnLock() if !jobNamePattern.MatchString(displayJobName) { - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) ctx.RenderWithErr(ctx.Tr("repo.cloudbrain_jobname_err"), tpl, &form) return } @@ -294,7 +294,7 @@ func grampusTrainJobGpuCreate(ctx *context.Context, form auth.CreateGrampusTrain bootFileExist, err := ctx.Repo.FileExists(bootFile, branchName) if err != nil || !bootFileExist { log.Error("Get bootfile error:", err, ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) ctx.RenderWithErr(ctx.Tr("repo.cloudbrain_bootfile_err"), tpl, &form) return } @@ -303,13 +303,13 @@ func grampusTrainJobGpuCreate(ctx *context.Context, form auth.CreateGrampusTrain count, err := models.GetGrampusCountByUserID(ctx.User.ID, string(models.JobTypeTrain), models.GPUResource) if err != nil { log.Error("GetGrampusCountByUserID failed:%v", err, ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) ctx.RenderWithErr("system error", tpl, &form) return } else { if count >= 1 { log.Error("the user already has running or waiting task", ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) ctx.RenderWithErr("you have already a running or waiting task, can not create more", tpl, &form) return } @@ -318,7 +318,7 @@ func grampusTrainJobGpuCreate(ctx *context.Context, form auth.CreateGrampusTrain //check param if err := grampusParamCheckCreateTrainJob(form); err != nil { log.Error("paramCheckCreateTrainJob failed:(%v)", err, ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) ctx.RenderWithErr(err.Error(), tpl, &form) return } @@ -328,14 +328,14 @@ func grampusTrainJobGpuCreate(ctx *context.Context, form auth.CreateGrampusTrain if err == nil { if len(tasks) != 0 { log.Error("the job name did already exist", ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) 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"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) ctx.RenderWithErr("system error", tpl, &form) return } @@ -348,14 +348,14 @@ func grampusTrainJobGpuCreate(ctx *context.Context, form auth.CreateGrampusTrain Cluster: models.C2NetCluster, }) if err != nil || spec == nil { - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) ctx.RenderWithErr("Resource specification not available", tpl, &form) return } if !account.IsPointBalanceEnough(ctx.User.ID, spec.UnitPrice) { log.Error("point balance is not enough,userId=%d specId=%d", ctx.User.ID, spec.ID) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) ctx.RenderWithErr(ctx.Tr("points.insufficient_points_balance"), tplGrampusTrainJobGPUNew, &form) return } @@ -365,7 +365,7 @@ func grampusTrainJobGpuCreate(ctx *context.Context, form auth.CreateGrampusTrain datasetInfos, datasetNames, err := models.GetDatasetInfo(uuid, models.GPU) if err != nil { log.Error("GetDatasetInfo failed: %v", err, ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) ctx.RenderWithErr(ctx.Tr("cloudbrain.error.dataset_select"), tpl, &form) return } @@ -378,7 +378,7 @@ func grampusTrainJobGpuCreate(ctx *context.Context, form auth.CreateGrampusTrain if err := downloadZipCode(ctx, codeLocalPath, branchName); err != nil { log.Error("downloadZipCode failed, server timed out: %s (%v)", repo.FullName(), err, ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) ctx.RenderWithErr(ctx.Tr("cloudbrain.load_code_failed"), tpl, &form) return } @@ -387,7 +387,7 @@ func grampusTrainJobGpuCreate(ctx *context.Context, form auth.CreateGrampusTrain //upload code if err := uploadCodeToMinio(codeLocalPath+"/", jobName, cloudbrain.CodeMountPath+"/"); err != nil { log.Error("Failed to uploadCodeToMinio: %s (%v)", repo.FullName(), err, ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) ctx.RenderWithErr(ctx.Tr("cloudbrain.load_code_failed"), tpl, &form) return } @@ -395,7 +395,7 @@ func grampusTrainJobGpuCreate(ctx *context.Context, form auth.CreateGrampusTrain modelPath := setting.JobPath + jobName + cloudbrain.ModelMountPath + "/" if err := mkModelPath(modelPath); err != nil { log.Error("Failed to mkModelPath: %s (%v)", repo.FullName(), err, ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) ctx.RenderWithErr(ctx.Tr("cloudbrain.load_code_failed"), tpl, &form) return } @@ -403,7 +403,7 @@ func grampusTrainJobGpuCreate(ctx *context.Context, form auth.CreateGrampusTrain //init model readme if err := uploadCodeToMinio(modelPath, jobName, cloudbrain.ModelMountPath+"/"); err != nil { log.Error("Failed to uploadCodeToMinio: %s (%v)", repo.FullName(), err, ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) ctx.RenderWithErr(ctx.Tr("cloudbrain.load_code_failed"), tpl, &form) return } @@ -426,7 +426,7 @@ func grampusTrainJobGpuCreate(ctx *context.Context, form auth.CreateGrampusTrain command, err := generateCommand(repo.Name, grampus.ProcessorTypeGPU, codeMinioPath+cloudbrain.DefaultBranchName+".zip", datasetRemotePath, bootFile, params, setting.CBCodePathPrefix+jobName+cloudbrain.ModelMountPath+"/", allFileName, preTrainModelPath, form.CkptName) if err != nil { log.Error("Failed to generateCommand: %s (%v)", displayJobName, err, ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) ctx.RenderWithErr("Create task failed, internal error", tpl, &form) return } @@ -468,7 +468,7 @@ func grampusTrainJobGpuCreate(ctx *context.Context, form auth.CreateGrampusTrain err = grampus.GenerateTrainJob(ctx, req) if err != nil { log.Error("GenerateTrainJob failed:%v", err.Error(), ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) ctx.RenderWithErr(err.Error(), tpl, &form) return } @@ -549,14 +549,14 @@ func grampusTrainJobNpuCreate(ctx *context.Context, form auth.CreateGrampusTrain isOk, err := lock.Lock(models.CloudbrainKeyDuration) if !isOk { log.Error("lock processed failed:%v", err, ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) ctx.RenderWithErr(ctx.Tr("repo.cloudbrain_samejob_err"), tplGrampusTrainJobNPUNew, &form) return } defer lock.UnLock() if !jobNamePattern.MatchString(displayJobName) { - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) ctx.RenderWithErr(ctx.Tr("repo.cloudbrain_jobname_err"), tpl, &form) return } @@ -564,7 +564,7 @@ func grampusTrainJobNpuCreate(ctx *context.Context, form auth.CreateGrampusTrain bootFileExist, err := ctx.Repo.FileExists(bootFile, branchName) if err != nil || !bootFileExist { log.Error("Get bootfile error:", err, ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) ctx.RenderWithErr(ctx.Tr("repo.cloudbrain_bootfile_err"), tpl, &form) return } @@ -573,13 +573,13 @@ func grampusTrainJobNpuCreate(ctx *context.Context, form auth.CreateGrampusTrain count, err := models.GetGrampusCountByUserID(ctx.User.ID, string(models.JobTypeTrain), models.NPUResource) if err != nil { log.Error("GetGrampusCountByUserID failed:%v", err, ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) ctx.RenderWithErr("system error", tpl, &form) return } else { if count >= 1 { log.Error("the user already has running or waiting task", ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) ctx.RenderWithErr("you have already a running or waiting task, can not create more", tpl, &form) return } @@ -588,7 +588,7 @@ func grampusTrainJobNpuCreate(ctx *context.Context, form auth.CreateGrampusTrain //check param if err := grampusParamCheckCreateTrainJob(form); err != nil { log.Error("paramCheckCreateTrainJob failed:(%v)", err) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) ctx.RenderWithErr(err.Error(), tpl, &form) return } @@ -598,14 +598,14 @@ func grampusTrainJobNpuCreate(ctx *context.Context, form auth.CreateGrampusTrain if err == nil { if len(tasks) != 0 { log.Error("the job name did already exist", ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) 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"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) ctx.RenderWithErr("system error", tpl, &form) return } @@ -618,13 +618,13 @@ func grampusTrainJobNpuCreate(ctx *context.Context, form auth.CreateGrampusTrain Cluster: models.C2NetCluster, }) if err != nil || spec == nil { - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) ctx.RenderWithErr("Resource specification not available", tpl, &form) return } if !account.IsPointBalanceEnough(ctx.User.ID, spec.UnitPrice) { log.Error("point balance is not enough,userId=%d specId=%d", ctx.User.ID, spec.ID) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) ctx.RenderWithErr(ctx.Tr("points.insufficient_points_balance"), tplGrampusTrainJobNPUNew, &form) return } @@ -633,7 +633,7 @@ func grampusTrainJobNpuCreate(ctx *context.Context, form auth.CreateGrampusTrain datasetInfos, datasetNames, err := models.GetDatasetInfo(uuid, models.NPU) if err != nil { log.Error("GetDatasetInfo failed: %v", err, ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) ctx.RenderWithErr(ctx.Tr("cloudbrain.error.dataset_select"), tpl, &form) return } @@ -646,7 +646,7 @@ func grampusTrainJobNpuCreate(ctx *context.Context, form auth.CreateGrampusTrain if err := downloadZipCode(ctx, codeLocalPath, branchName); err != nil { log.Error("downloadZipCode failed, server timed out: %s (%v)", repo.FullName(), err) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) ctx.RenderWithErr(ctx.Tr("cloudbrain.load_code_failed"), tpl, &form) return } @@ -654,14 +654,14 @@ func grampusTrainJobNpuCreate(ctx *context.Context, form auth.CreateGrampusTrain //todo: upload code (send to file_server todo this work?) if err := obsMkdir(setting.CodePathPrefix + jobName + modelarts.OutputPath); err != nil { log.Error("Failed to obsMkdir_output: %s (%v)", repo.FullName(), err) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) ctx.RenderWithErr(ctx.Tr("cloudbrain.load_code_failed"), tpl, &form) return } if err := uploadCodeToObs(codeLocalPath, jobName, ""); err != nil { log.Error("Failed to uploadCodeToObs: %s (%v)", repo.FullName(), err) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) ctx.RenderWithErr(ctx.Tr("cloudbrain.load_code_failed"), tpl, &form) return } @@ -683,7 +683,7 @@ func grampusTrainJobNpuCreate(ctx *context.Context, form auth.CreateGrampusTrain command, err := generateCommand(repo.Name, grampus.ProcessorTypeNPU, codeObsPath+cloudbrain.DefaultBranchName+".zip", datasetRemotePath, bootFile, params, setting.CodePathPrefix+jobName+modelarts.OutputPath, allFileName, preTrainModelPath, form.CkptName) if err != nil { log.Error("Failed to generateCommand: %s (%v)", displayJobName, err, ctx.Data["MsgID"]) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) ctx.RenderWithErr("Create task failed, internal error", tpl, &form) return } @@ -726,7 +726,7 @@ func grampusTrainJobNpuCreate(ctx *context.Context, form auth.CreateGrampusTrain err = grampus.GenerateTrainJob(ctx, req) if err != nil { log.Error("GenerateTrainJob failed:%v", err.Error()) - grampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeNPU) ctx.RenderWithErr(err.Error(), tpl, &form) return } diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 9959e98ff..8a21c7c06 100755 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -1236,6 +1236,8 @@ func RegisterRoutes(m *macaron.Macaron) { }) m.Get("/create_gpu", reqWechatBind, reqRepoCloudBrainWriter, repo.AiSafetyCreateForGetGPU) m.Get("/create_npu", reqWechatBind, reqRepoCloudBrainWriter, repo.AiSafetyCreateForGetNPU) + m.Get("/create_grampus_gpu", reqWechatBind, reqRepoCloudBrainWriter, repo.AiSafetyCreateForGetGrampusGPU) + m.Get("/create_grampus_npu", reqWechatBind, reqRepoCloudBrainWriter, repo.AiSafetyCreateForGetGrampusNPU) m.Post("/create", reqWechatBind, reqRepoCloudBrainWriter, repo.AiSafetyCreateForPost) }, context.RepoRef()) From 5a34b5322116634799b2c0a22e725fb1d05838a6 Mon Sep 17 00:00:00 2001 From: zouap Date: Sun, 9 Oct 2022 10:12:01 +0800 Subject: [PATCH 074/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=99=BA=E7=AE=97GPU?= =?UTF-8?q?=E7=9A=84=E6=94=AF=E6=8C=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 190 +++++++++++++++++++++++++++++++++++++++++++++ routers/repo/cloudbrain.go | 3 + 2 files changed, 193 insertions(+) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 5211e082b..245894e45 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -197,6 +197,8 @@ func syncAiSafetyTaskStatus(job *models.Cloudbrain) { queryTaskStatusFromCloudbrainTwo(job) } else if job.Type == models.TypeCloudBrainOne { queryTaskStatusFromCloudbrain(job) + } else if job.Type == models.TypeC2Net { + queryTaskStatusFromGrampus(job) } } else { if job.Status == string(models.ModelSafetyTesting) { @@ -222,6 +224,53 @@ func TimerHandleModelSafetyTestTask() { } } +func queryTaskStatusFromGrampus(task *models.Cloudbrain) { + if task.DeletedAt.IsZero() { //normal record + result, err := grampus.GetJob(task.JobID) + if err != nil { + log.Error("GetJob failed:" + err.Error()) + return + } + + if result != nil { + if len(result.JobInfo.Tasks[0].CenterID) == 1 && len(result.JobInfo.Tasks[0].CenterName) == 1 { + task.AiCenter = result.JobInfo.Tasks[0].CenterID[0] + "+" + result.JobInfo.Tasks[0].CenterName[0] + } + task.Status = grampus.TransTrainJobStatus(result.JobInfo.Status) + if task.Status != models.GrampusStatusSucceeded { + if task.Status != result.JobInfo.Status || result.JobInfo.Status == models.GrampusStatusRunning { + task.Duration = result.JobInfo.RunSec + if task.Duration < 0 { + task.Duration = 0 + } + task.TrainJobDuration = models.ConvertDurationToStr(task.Duration) + + if task.StartTime == 0 && result.JobInfo.StartedAt > 0 { + task.StartTime = timeutil.TimeStamp(result.JobInfo.StartedAt) + } + if task.EndTime == 0 && models.IsTrainJobTerminal(task.Status) && task.StartTime > 0 { + task.EndTime = task.StartTime.Add(task.Duration) + } + task.CorrectCreateUnix() + err = models.UpdateJob(task) + if err != nil { + log.Error("UpdateJob failed:" + err.Error()) + } + } + } else { + task.Status = string(models.ModelSafetyTesting) + err = models.UpdateJob(task) + if err != nil { + log.Error("UpdateJob failed:", err) + } + //send msg to beihang + sendGPUInferenceResultToTest(task) + } + } + } + +} + func queryTaskStatusFromCloudbrainTwo(job *models.Cloudbrain) { log.Info("The task not finished,name=" + job.DisplayJobName) result, err := modelarts.GetTrainJob(job.JobID, strconv.FormatInt(job.VersionID, 10)) @@ -623,7 +672,148 @@ func AiSafetyCreateForPost(ctx *context.Context) { } func createForGrampusGPU(ctx *context.Context, jobName string) { + BootFile := ctx.Query("boot_file") + displayJobName := ctx.Query("display_job_name") + description := ctx.Query("description") + image := strings.TrimSpace(ctx.Query("image")) + srcDataset := ctx.Query("src_dataset") //uuid + combatDataset := ctx.Query("combat_dataset") //uuid + evaluationIndex := ctx.Query("evaluationIndex") + Params := ctx.Query("run_para_list") + specId := ctx.QueryInt64("spec_id") + TrainUrl := ctx.Query("train_url") + CkptName := ctx.Query("ckpt_name") + ModelName := ctx.Query("ModelName") + ModelVersion := ctx.Query("ModelVersion") + repo := ctx.Repo.Repository + codeLocalPath := setting.JobPath + jobName + cloudbrain.CodeMountPath + "/" + codeMinioPath := setting.CBCodePathPrefix + jobName + cloudbrain.CodeMountPath + "/" + //check specification + spec, err := resource.GetAndCheckSpec(ctx.User.ID, specId, models.FindSpecsOptions{ + JobType: models.JobTypeTrain, + ComputeResource: models.GPU, + Cluster: models.C2NetCluster, + }) + if err != nil || spec == nil { + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + ctx.RenderWithErr("Resource specification not available", tplCloudBrainModelSafetyNewGrampusGpu, nil) + return + } + + if !account.IsPointBalanceEnough(ctx.User.ID, spec.UnitPrice) { + log.Error("point balance is not enough,userId=%d specId=%d", ctx.User.ID, spec.ID) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + ctx.RenderWithErr(ctx.Tr("points.insufficient_points_balance"), tplCloudBrainModelSafetyNewGrampusGpu, nil) + return + } + //check dataset + uuid := srcDataset + ";" + combatDataset + datasetInfos, datasetNames, err := models.GetDatasetInfo(uuid, models.GPU) + if err != nil { + log.Error("GetDatasetInfo failed: %v", err, ctx.Data["MsgID"]) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + ctx.RenderWithErr(ctx.Tr("cloudbrain.error.dataset_select"), tplCloudBrainModelSafetyNewGrampusGpu, nil) + return + } + + //prepare code and out path + _, err = ioutil.ReadDir(codeLocalPath) + if err == nil { + os.RemoveAll(codeLocalPath) + } + + if err := downloadZipCode(ctx, codeLocalPath, cloudbrain.DefaultBranchName); err != nil { + log.Error("downloadZipCode failed, server timed out: %s (%v)", repo.FullName(), err, ctx.Data["MsgID"]) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + ctx.RenderWithErr(ctx.Tr("cloudbrain.load_code_failed"), tplCloudBrainModelSafetyNewGrampusGpu, nil) + return + } + + //todo: upload code (send to file_server todo this work?) + //upload code + if err := uploadCodeToMinio(codeLocalPath+"/", jobName, cloudbrain.CodeMountPath+"/"); err != nil { + log.Error("Failed to uploadCodeToMinio: %s (%v)", repo.FullName(), err, ctx.Data["MsgID"]) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + ctx.RenderWithErr(ctx.Tr("cloudbrain.load_code_failed"), tplCloudBrainModelSafetyNewGrampusGpu, nil) + return + } + + modelPath := setting.JobPath + jobName + cloudbrain.ModelMountPath + "/" + if err := mkModelPath(modelPath); err != nil { + log.Error("Failed to mkModelPath: %s (%v)", repo.FullName(), err, ctx.Data["MsgID"]) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + ctx.RenderWithErr(ctx.Tr("cloudbrain.load_code_failed"), tplCloudBrainModelSafetyNewGrampusGpu, nil) + return + } + + //init model readme + if err := uploadCodeToMinio(modelPath, jobName, cloudbrain.ModelMountPath+"/"); err != nil { + log.Error("Failed to uploadCodeToMinio: %s (%v)", repo.FullName(), err, ctx.Data["MsgID"]) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + ctx.RenderWithErr(ctx.Tr("cloudbrain.load_code_failed"), tplCloudBrainModelSafetyNewGrampusGpu, nil) + return + } + + var datasetRemotePath, allFileName string + for _, datasetInfo := range datasetInfos { + if datasetRemotePath == "" { + datasetRemotePath = datasetInfo.DataLocalPath + allFileName = datasetInfo.FullName + } else { + datasetRemotePath = datasetRemotePath + ";" + datasetInfo.DataLocalPath + allFileName = allFileName + ";" + datasetInfo.FullName + } + + } + + //prepare command + preTrainModelPath := getPreTrainModelPath(TrainUrl, CkptName) + + command, err := generateCommand(repo.Name, grampus.ProcessorTypeGPU, codeMinioPath+cloudbrain.DefaultBranchName+".zip", datasetRemotePath, BootFile, Params, setting.CBCodePathPrefix+jobName+cloudbrain.ModelMountPath+"/", allFileName, preTrainModelPath, CkptName) + if err != nil { + log.Error("Failed to generateCommand: %s (%v)", displayJobName, err, ctx.Data["MsgID"]) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + ctx.RenderWithErr("Create task failed, internal error", tplCloudBrainModelSafetyNewGrampusGpu, nil) + return + } + + commitID, _ := ctx.Repo.GitRepo.GetBranchCommitID(cloudbrain.DefaultBranchName) + + req := &grampus.GenerateTrainJobReq{ + JobName: jobName, + DisplayJobName: displayJobName, + ComputeResource: models.GPUResource, + ProcessType: grampus.ProcessorTypeGPU, + Command: command, + ImageUrl: image, + Description: description, + BootFile: BootFile, + Uuid: uuid, + CommitID: commitID, + BranchName: cloudbrain.DefaultBranchName, + Params: Params, + EngineName: image, + DatasetNames: datasetNames, + DatasetInfos: datasetInfos, + + IsLatestVersion: modelarts.IsLatestVersion, + VersionCount: modelarts.VersionCountOne, + WorkServerNumber: 1, + Spec: spec, + ModelName: ModelName, + LabelName: evaluationIndex, + CkptName: CkptName, + ModelVersion: ModelVersion, + PreTrainModelUrl: TrainUrl, + } + err = grampus.GenerateTrainJob(ctx, req) + if err != nil { + log.Error("GenerateTrainJob failed:%v", err.Error(), ctx.Data["MsgID"]) + GrampusTrainJobNewDataPrepare(ctx, grampus.ProcessorTypeGPU) + ctx.RenderWithErr(err.Error(), tplCloudBrainModelSafetyNewGrampusGpu, nil) + return + } } func createForGrampusNPU(ctx *context.Context, jobName string) { diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index 50379fe08..b3069d00d 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -54,6 +54,9 @@ const ( tplCloudBrainModelSafetyNewGpu base.TplName = "repo/modelsafety/newgpu" tplCloudBrainModelSafetyNewNpu base.TplName = "repo/modelsafety/newnpu" + tplCloudBrainModelSafetyNewGrampusGpu base.TplName = "repo/modelsafety/newgrampusgpu" + tplCloudBrainModelSafetyNewGrampusNpu base.TplName = "repo/modelsafety/newgrampusnpu" + tplCloudBrainImageSubmit base.TplName = "repo/cloudbrain/image/submit" tplCloudBrainImageEdit base.TplName = "repo/cloudbrain/image/edit" From 29d61baab1fbc35b354503968b9f06932af9f9f1 Mon Sep 17 00:00:00 2001 From: chenshihai Date: Sun, 9 Oct 2022 10:49:24 +0800 Subject: [PATCH 075/180] update modelsafety --- templates/repo/cloudbrain/benchmark/index.tmpl | 56 +- templates/repo/modelsafety/new.tmpl | 101 +++- templates/repo/modelsafety/newgrampusgpu.tmpl | 1 + templates/repo/modelsafety/newgrampusnpu.tmpl | 1 + templates/repo/modelsafety/show.tmpl | 661 +++++++++++++++++++++ .../js/components/images/selectGrampusImages.vue | 3 +- 6 files changed, 784 insertions(+), 39 deletions(-) create mode 100644 templates/repo/modelsafety/newgrampusgpu.tmpl create mode 100644 templates/repo/modelsafety/newgrampusnpu.tmpl create mode 100644 templates/repo/modelsafety/show.tmpl diff --git a/templates/repo/cloudbrain/benchmark/index.tmpl b/templates/repo/cloudbrain/benchmark/index.tmpl index 8a2fbd51b..69a8167ef 100755 --- a/templates/repo/cloudbrain/benchmark/index.tmpl +++ b/templates/repo/cloudbrain/benchmark/index.tmpl @@ -102,9 +102,15 @@
+ {{if eq .JobType "MODELSAFETY"}} + + {{.DisplayJobName}} + + {{else}} {{.DisplayJobName}} + {{end}}
@@ -113,13 +119,19 @@
- {{.BenchmarkType}} + {{.BenchmarkType}}
+ {{if eq .JobType "MODELSAFETY"}} +
+ {{.BenchmarkTypeName}} +
+ {{else}} + {{end}}
{{TimeSinceUnix .Cloudbrain.CreatedUnix $.Lang}} @@ -142,9 +154,36 @@
-
- - +
+ {{if eq .JobType "MODELSAFETY"}} + + + {{$.CsrfTokenHtml}} + {{if .CanDel}} + + {{$.i18n.Tr "repo.stop"}} + + {{else}} + {{$.i18n.Tr "repo.stop"}} + {{end}} + + +
+ + {{$.CsrfTokenHtml}} + {{if .CanDel}} + + {{$.i18n.Tr "repo.delete"}} + + {{else}} + + {{$.i18n.Tr "repo.delete"}} + + {{end}} +
+ {{else}} + +
{{$.CsrfTokenHtml}} {{if .CanDel}} @@ -162,8 +201,8 @@ {{$.i18n.Tr "repo.score"}} {{end}} - - + + {{$.CsrfTokenHtml}} {{if .CanDel}} @@ -175,7 +214,8 @@ {{$.i18n.Tr "repo.delete"}} {{end}} -
+ + {{end}}
diff --git a/templates/repo/modelsafety/new.tmpl b/templates/repo/modelsafety/new.tmpl index 31525b27c..db1cce846 100644 --- a/templates/repo/modelsafety/new.tmpl +++ b/templates/repo/modelsafety/new.tmpl @@ -46,7 +46,8 @@
{{template "repo/header" .}}
- + {{$Grampus := (or (eq (index (SubJumpablePath .Link) 1) "create_grampus_gpu") (eq (index (SubJumpablePath .Link) 1) "create_grampus_npu"))}} + {{template "base/alert" .}}

{{.i18n.Tr "repo.modelarts.evaluate_job.new_job"}} @@ -69,10 +70,23 @@ href="{{.Link}}">模型安全评测

+
- - {{end}} + {{end}} + {{end}}
@@ -311,7 +352,7 @@ }) ;(function() { - var SPECS = {{ .benchmark_specs }}; + var SPECS = {{ .benchmark_specs }} || {{ .Specs }}; var showPoint = {{ .CloudBrainPaySwitch }}; window.renderSpecsSelect($('#__specs__'), SPECS, showPoint, { gpu_memory: {{$.i18n.Tr "cloudbrain.gpu_memory"}}, diff --git a/templates/repo/modelsafety/newgrampusgpu.tmpl b/templates/repo/modelsafety/newgrampusgpu.tmpl new file mode 100644 index 000000000..d41c8f816 --- /dev/null +++ b/templates/repo/modelsafety/newgrampusgpu.tmpl @@ -0,0 +1 @@ +{{template "repo/modelsafety/new".}} diff --git a/templates/repo/modelsafety/newgrampusnpu.tmpl b/templates/repo/modelsafety/newgrampusnpu.tmpl new file mode 100644 index 000000000..d41c8f816 --- /dev/null +++ b/templates/repo/modelsafety/newgrampusnpu.tmpl @@ -0,0 +1 @@ +{{template "repo/modelsafety/new".}} diff --git a/templates/repo/modelsafety/show.tmpl b/templates/repo/modelsafety/show.tmpl new file mode 100644 index 000000000..01af374a6 --- /dev/null +++ b/templates/repo/modelsafety/show.tmpl @@ -0,0 +1,661 @@ +{{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.createtime"}} + +
+ + {{TimeSinceUnix1 .CreatedUnix}} + +
+
+ {{$.i18n.Tr "repo.cloudbrain.time.starttime"}} + +
+ {{if not (eq .StartTime 0)}} + {{TimeSinceUnix1 .StartTime}} + {{else}} + -- + {{end}} +
+
+ {{$.i18n.Tr "repo.cloudbrain.time.endtime"}} + +
+ {{if not (eq .EndTime 0)}} + {{TimeSinceUnix1 .EndTime}} + {{else}} + -- + {{end}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.dura_time"}} + +
+ {{$.duration}} +
+
+ {{$.i18n.Tr "cloudbrain.mirror"}} + +
+ + {{.Image}} + +
+
+ {{$.i18n.Tr "repo.cloudbrain.benchmark.evaluate_scenes"}} + + +
+ {{.BenchmarkType}} +
+
+ {{$.i18n.Tr "repo.cloudbrain.benchmark.evaluate_type"}} + + +
+ {{.BenchmarkTypeName}} +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ {{$.i18n.Tr "repo.cloudbrain.benchmark.evaluate_train"}} + +
+ {{if eq .JobType "BENCHMARK"}} + train.py + {{else}} + -- + {{end}} +
+
+ {{$.i18n.Tr "repo.cloudbrain.benchmark.evaluate_test"}} + +
+ {{if eq .JobType "BENCHMARK"}} + test.py + {{else}} + -- + {{end}} +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.description"}} + +
+ {{if .Description}} + {{.Description}} + {{else}} + -- + {{end}} +
+
+ {{$.i18n.Tr "cloudbrain.gpu_type"}} + +
+
+ {{$.i18n.Tr "repo.modelarts.train_job.standard"}} + +
+
+ {{$.i18n.Tr "repo.model_manager"}} + +
+ {{.DatasetName}} +
+
+ {{$.i18n.Tr "repo.cloudbrain_creator"}} + +
+ {{if .User}} + {{.User.Name}} + {{else}} + -- + {{end}} +
+
+ {{if eq .BenchmarkTypeName "BRAINSCORE"}} + {{$.i18n.Tr "cloudbrain.brain_area"}} + {{else}} + {{$.i18n.Tr "repo.cloudbrain.benchmark.evaluate_child_type"}} + {{end}} + +
+ + {{if $.BenchmarkChildTypeName}} + {{$.BenchmarkChildTypeName}} + {{else}} + -- + {{end}} +
+
+
+
+
+ +
+
+
+ +
+ + + + + + + +
+
+
+
+ + +

+                             
+ +
+ + +
+ +
+
+
+ {{end}} {{template "base/paginate" .}} +
+ +
+ +
+ + +
+{{template "base/footer" .}} + + + + \ No newline at end of file diff --git a/web_src/js/components/images/selectGrampusImages.vue b/web_src/js/components/images/selectGrampusImages.vue index f7af01e9f..eced8cf88 100755 --- a/web_src/js/components/images/selectGrampusImages.vue +++ b/web_src/js/components/images/selectGrampusImages.vue @@ -242,7 +242,8 @@ export default { this.getImageListPublic(); if ( location.href.indexOf("benchmark") !== -1 || - location.href.indexOf("train-job") !== -1 + location.href.indexOf("train-job") !== -1 || + location.href.indexOf("modelsafety") !== -1 ) { this.benchmarkNew = true; } From 8304ea2eebe14109f03961980e22ccdc68f1a95f Mon Sep 17 00:00:00 2001 From: chenshihai Date: Sun, 9 Oct 2022 11:21:23 +0800 Subject: [PATCH 076/180] update --- templates/repo/modelsafety/new.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repo/modelsafety/new.tmpl b/templates/repo/modelsafety/new.tmpl index db1cce846..22b623d24 100644 --- a/templates/repo/modelsafety/new.tmpl +++ b/templates/repo/modelsafety/new.tmpl @@ -352,7 +352,7 @@ }) ;(function() { - var SPECS = {{ .benchmark_specs }} || {{ .Specs }}; + var SPECS = {{ .train_specs }} || {{ .Specs }}; var showPoint = {{ .CloudBrainPaySwitch }}; window.renderSpecsSelect($('#__specs__'), SPECS, showPoint, { gpu_memory: {{$.i18n.Tr "cloudbrain.gpu_memory"}}, From 8a93e92cafcafff63b520f57bce3dbc1ff48c4e1 Mon Sep 17 00:00:00 2001 From: zouap Date: Sun, 9 Oct 2022 11:23:31 +0800 Subject: [PATCH 077/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=AF=84=E6=B5=8B?= =?UTF-8?q?=E5=9C=BA=E6=99=AF=E5=8F=8A=E5=88=86=E7=B1=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 2 +- routers/repo/cloudbrain.go | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 245894e45..49e4d7b6a 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -93,7 +93,7 @@ func GetAiSafetyTask(ctx *context.Context) { syncAiSafetyTaskStatus(job) job, err = models.GetCloudbrainByIDWithDeleted(ID) job.BenchmarkType = "CV" - job.BenchmarkTypeName = "Classification" + job.BenchmarkTypeName = "图像分类" ctx.JSON(200, job) } diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index b3069d00d..11e632620 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -2175,6 +2175,10 @@ func CloudBrainBenchmarkIndex(ctx *context.Context) { } } } + if task.JobType == string(models.JobTypeModelSafety) { + ciTasks[i].BenchmarkType = "CV" + ciTasks[i].BenchmarkTypeName = "图像分类" + } } pager := context.NewPagination(int(count), setting.UI.IssuePagingNum, page, 5) From dd105e2dd019be0a5b559d584daff0e2337cfbdd Mon Sep 17 00:00:00 2001 From: zouap Date: Sun, 9 Oct 2022 11:29:35 +0800 Subject: [PATCH 078/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 4 ++-- routers/repo/cloudbrain.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 49e4d7b6a..9b7af5d6c 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -92,8 +92,8 @@ func GetAiSafetyTask(ctx *context.Context) { } syncAiSafetyTaskStatus(job) job, err = models.GetCloudbrainByIDWithDeleted(ID) - job.BenchmarkType = "CV" - job.BenchmarkTypeName = "图像分类" + job.BenchmarkType = "安全评测" + job.BenchmarkTypeName = "Image Classification" ctx.JSON(200, job) } diff --git a/routers/repo/cloudbrain.go b/routers/repo/cloudbrain.go index 11e632620..1752c27aa 100755 --- a/routers/repo/cloudbrain.go +++ b/routers/repo/cloudbrain.go @@ -2176,8 +2176,8 @@ func CloudBrainBenchmarkIndex(ctx *context.Context) { } } if task.JobType == string(models.JobTypeModelSafety) { - ciTasks[i].BenchmarkType = "CV" - ciTasks[i].BenchmarkTypeName = "图像分类" + ciTasks[i].BenchmarkType = "安全评测" + ciTasks[i].BenchmarkTypeName = "Image Classification" } } From 2a98a047b4f8bdb923f6140bf48f2c7e1090c0b8 Mon Sep 17 00:00:00 2001 From: zouap Date: Sun, 9 Oct 2022 11:44:14 +0800 Subject: [PATCH 079/180] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 9b7af5d6c..30cb50c79 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -526,6 +526,8 @@ func AiSafetyCreateForGetGPU(ctx *context.Context) { func AiSafetyCreateForGetGrampusGPU(ctx *context.Context) { ctx.Data["PageIsCloudBrain"] = true ctx.Data["IsCreate"] = true + ctx.Data["type"] = models.TypeC2Net + ctx.Data["compute_resource"] = models.GPUResource ctx.Data["datasetType"] = models.TypeCloudBrainOne ctx.Data["BaseDataSetName"] = setting.ModelSafetyTest.BaseDataSetName ctx.Data["BaseDataSetUUID"] = setting.ModelSafetyTest.BaseDataSetUUID @@ -542,7 +544,8 @@ func AiSafetyCreateForGetGrampusGPU(ctx *context.Context) { func AiSafetyCreateForGetGrampusNPU(ctx *context.Context) { ctx.Data["PageIsCloudBrain"] = true ctx.Data["IsCreate"] = true - + ctx.Data["type"] = models.TypeC2Net + ctx.Data["compute_resource"] = models.NPUResource ctx.Data["datasetType"] = models.TypeCloudBrainTwo ctx.Data["BaseDataSetName"] = setting.ModelSafetyTest.BaseDataSetName ctx.Data["BaseDataSetUUID"] = setting.ModelSafetyTest.BaseDataSetUUID @@ -678,7 +681,7 @@ func createForGrampusGPU(ctx *context.Context, jobName string) { image := strings.TrimSpace(ctx.Query("image")) srcDataset := ctx.Query("src_dataset") //uuid combatDataset := ctx.Query("combat_dataset") //uuid - evaluationIndex := ctx.Query("evaluationIndex") + evaluationIndex := ctx.Query("evaluation_index") Params := ctx.Query("run_para_list") specId := ctx.QueryInt64("spec_id") TrainUrl := ctx.Query("train_url") @@ -828,7 +831,7 @@ func createForNPU(ctx *context.Context, jobName string) { srcDataset := ctx.Query("src_dataset") //uuid combatDataset := ctx.Query("combat_dataset") //uuid - evaluationIndex := ctx.Query("evaluationIndex") + evaluationIndex := ctx.Query("evaluation_index") Params := ctx.Query("run_para_list") specId := ctx.QueryInt64("spec_id") @@ -1018,7 +1021,7 @@ func createForGPU(ctx *context.Context, jobName string) { image := strings.TrimSpace(ctx.Query("image")) srcDataset := ctx.Query("src_dataset") //uuid combatDataset := ctx.Query("combat_dataset") //uuid - evaluationIndex := ctx.Query("evaluationIndex") + evaluationIndex := ctx.Query("evaluation_index") Params := ctx.Query("run_para_list") specId := ctx.QueryInt64("spec_id") TrainUrl := ctx.Query("train_url") @@ -1146,7 +1149,7 @@ func modelSafetyNewDataPrepare(ctx *context.Context) error { 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["evaluationIndex"] = ctx.Query("evaluation_index") 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") From 0b3e23c5ad8e213203e2c9641dc1261a4bfe6054 Mon Sep 17 00:00:00 2001 From: zouap Date: Sun, 9 Oct 2022 11:48:27 +0800 Subject: [PATCH 080/180] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: zouap --- routers/repo/aisafety.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/routers/repo/aisafety.go b/routers/repo/aisafety.go index 30cb50c79..1eaa2669f 100644 --- a/routers/repo/aisafety.go +++ b/routers/repo/aisafety.go @@ -509,6 +509,8 @@ func AiSafetyCreateForGetGPU(ctx *context.Context) { t := time.Now() ctx.Data["PageIsCloudBrain"] = true ctx.Data["IsCreate"] = true + ctx.Data["type"] = models.TypeCloudBrainOne + ctx.Data["compute_resource"] = models.GPUResource ctx.Data["datasetType"] = models.TypeCloudBrainOne ctx.Data["BaseDataSetName"] = setting.ModelSafetyTest.BaseDataSetName ctx.Data["BaseDataSetUUID"] = setting.ModelSafetyTest.BaseDataSetUUID @@ -565,6 +567,8 @@ func AiSafetyCreateForGetNPU(ctx *context.Context) { t := time.Now() ctx.Data["PageIsCloudBrain"] = true ctx.Data["IsCreate"] = true + ctx.Data["type"] = models.TypeCloudBrainTwo + ctx.Data["compute_resource"] = models.GPUResource 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["datasetType"] = models.TypeCloudBrainTwo From 3b218cdfadbea73d3f242d0d625f48e991402851 Mon Sep 17 00:00:00 2001 From: chenshihai Date: Sun, 9 Oct 2022 14:12:28 +0800 Subject: [PATCH 081/180] update modelsafety new.tmpl --- templates/repo/modelsafety/new.tmpl | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/templates/repo/modelsafety/new.tmpl b/templates/repo/modelsafety/new.tmpl index 22b623d24..d15aa377a 100644 --- a/templates/repo/modelsafety/new.tmpl +++ b/templates/repo/modelsafety/new.tmpl @@ -56,9 +56,8 @@
{{.CsrfTokenHtml}} - - - + +