diff --git a/modules/auth/modelarts.go b/modules/auth/modelarts.go index 5c26c19fa..7f14e0a9e 100755 --- a/modules/auth/modelarts.go +++ b/modules/auth/modelarts.go @@ -20,6 +20,7 @@ type CreateModelArtsTrainJobForm struct { Attachment string `form:"attachment" binding:"Required"` BootFile string `form:"boot_file" binding:"Required"` WorkServerNumber int `form:"work_server_number" binding:"Required"` + EngineID int `form:"engine_id" binding:"Required"` Description string `form:"description"` } diff --git a/modules/modelarts/modelarts.go b/modules/modelarts/modelarts.go index 48884d66b..3508f1765 100755 --- a/modules/modelarts/modelarts.go +++ b/modules/modelarts/modelarts.go @@ -11,6 +11,7 @@ import ( ) const ( + //notebook storageTypeOBS = "obs" autoStopDuration = 4 * 60 * 60 flavor = "modelarts.kat1.xlarge" @@ -21,7 +22,20 @@ const ( NotebookType = "Ascend" FlavorInfo = "Ascend: 1*Ascend 910 CPU: 24 核 96GiB (modelarts.kat1.xlarge)" + //train-job engineID = 118 + + Engine = "Ascend-Powered-Engine" + EngineVersions = "{\"version\":[{\"id\":118,\"value\":\"MindSpore-1.0.0-c75-python3.7-euleros2.8-aarch64\"}," + + "{\"id\":119,\"value\":\"MindSpore-1.1.1-c76-python3.7-euleros2.8-aarch64\"}" + + "{\"id\":120,\"value\":\"MindSpore-1.1.1-c76-tr5-python3.7-euleros2.8-aarch64\"}" + + "{\"id\":117,\"value\":\"TF-1.15-c75-python3.7-euleros2.8-aarch64\"}" + + "]}" + FlavorInfos = "{\"flavor\":[{\"id\":1,\"value\":\"Ascend : 2 * Ascend 910 CPU:48 核 512GiB\"}," + + "{\"id\":2,\"value\":\"Ascend : 8 * Ascend 910 CPU:192 核 2048GiB\"}" + + "{\"id\":3,\"value\":\"Ascend : 4 * Ascend 910 CPU:96 核 1024GiB\"}" + + "{\"id\":4,\"value\":\"Ascend : 1 * Ascend 910 CPU:24 核 256GiB\"}" + + "]}" CodePath = "/code/" OutputPath = "/output/" JobPath = "/job/" @@ -36,6 +50,21 @@ type GenerateTrainJobReq struct { DataUrl string TrainUrl string WorkServerNumber int + EngineID int64 +} + +type VersionInfo struct { + Version []struct { + ID int `json:"id"` + Value string `json:"value"` + } `json:"version"` +} + +type Flavor struct { + Info []struct { + ID int `json:"id"` + Value string `json:"value"` + } `json:"flavor"` } func GenerateTask(ctx *context.Context, jobName, uuid, description string) error { @@ -90,7 +119,7 @@ func GenerateTrainJob(ctx *context.Context, req *GenerateTrainJobReq) error { AppUrl: req.CodeObsPath, BootFileUrl: req.CodeObsPath + req.BootFile, DataUrl: req.DataUrl, - EngineID: engineID, + EngineID: req.EngineID, TrainUrl: req.TrainUrl, }, diff --git a/routers/repo/modelarts.go b/routers/repo/modelarts.go index fb00f1ee6..7d83113a0 100755 --- a/routers/repo/modelarts.go +++ b/routers/repo/modelarts.go @@ -5,6 +5,7 @@ import ( "code.gitea.io/gitea/modules/modelarts" "code.gitea.io/gitea/modules/obs" "code.gitea.io/gitea/modules/storage" + "encoding/json" "errors" "github.com/unknwon/com" "io" @@ -297,10 +298,23 @@ func TrainJobNew(ctx *context.Context) { } ctx.Data["attachments"] = attachs - ctx.Data["dataset_path"] = modelarts.DataSetMountPath - ctx.Data["env"] = modelarts.NotebookEnv - ctx.Data["notebook_type"] = modelarts.NotebookType - ctx.Data["flavor"] = modelarts.FlavorInfo + ctx.Data["engine"] = modelarts.Engine + + var versionInfos modelarts.VersionInfo + if err = json.Unmarshal([]byte(modelarts.EngineVersions), &versionInfos); err != nil { + ctx.ServerError("json.Unmarshal failed:", err) + return + } + + ctx.Data["engine_versions"] = versionInfos + + var flavorInfos modelarts.Flavor + if err = json.Unmarshal([]byte(modelarts.FlavorInfos), &flavorInfos); err != nil { + ctx.ServerError("json.Unmarshal failed:", err) + return + } + + ctx.Data["flavor_infos"] = flavorInfos ctx.HTML(200, tplModelArtsTrainJobNew) } @@ -310,12 +324,13 @@ func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm) uuid := form.Attachment description := form.Description workServerNumber := form.WorkServerNumber + engineID := form.EngineID bootFile := form.BootFile repo := ctx.Repo.Repository codeLocalPath := setting.JobPath + jobName + modelarts.CodePath - codeObsPath := setting.Bucket + modelarts.JobPath + jobName + modelarts.CodePath - outputObsPath := setting.Bucket + modelarts.JobPath + jobName + modelarts.OutputPath - dataPath := setting.Bucket + "/" + setting.BasePath + path.Join(uuid[0:1], uuid[1:2]) + "/" + uuid + "/" + codeObsPath := "/" + setting.Bucket + modelarts.JobPath + jobName + modelarts.CodePath + outputObsPath := "/" + setting.Bucket + modelarts.JobPath + jobName + modelarts.OutputPath + dataPath := "/" + setting.Bucket + "/" + setting.BasePath + path.Join(uuid[0:1], uuid[1:2]) + "/" + uuid + "/" if err := git.Clone(repo.RepoPath(), codeLocalPath, git.CloneRepoOptions{}); err != nil { log.Error("Failed to clone repository: %s (%v)", repo.FullName(), err) @@ -335,9 +350,10 @@ func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm) DataUrl: dataPath, Description: description, CodeObsPath: codeObsPath, - BootFile: bootFile, + BootFile: codeObsPath + "/" + bootFile, TrainUrl: outputObsPath, WorkServerNumber: workServerNumber, + EngineID: int64(engineID), } err := modelarts.GenerateTrainJob(ctx, req)