|
|
|
@@ -1,7 +1,6 @@ |
|
|
|
package repo |
|
|
|
|
|
|
|
import ( |
|
|
|
"code.gitea.io/gitea/services/cloudbrain/resource" |
|
|
|
"encoding/json" |
|
|
|
"errors" |
|
|
|
"fmt" |
|
|
|
@@ -13,6 +12,8 @@ import ( |
|
|
|
"strings" |
|
|
|
"time" |
|
|
|
|
|
|
|
"code.gitea.io/gitea/services/cloudbrain/resource" |
|
|
|
|
|
|
|
"code.gitea.io/gitea/modules/auth" |
|
|
|
"code.gitea.io/gitea/modules/git" |
|
|
|
"code.gitea.io/gitea/modules/grampus" |
|
|
|
@@ -34,10 +35,12 @@ const ( |
|
|
|
tplGrampusTrainJobShow base.TplName = "repo/grampus/trainjob/show" |
|
|
|
|
|
|
|
//GPU |
|
|
|
tplGrampusTrainJobGPUNew base.TplName = "repo/grampus/trainjob/gpu/new" |
|
|
|
tplGrampusTrainJobGPUNew base.TplName = "repo/grampus/trainjob/gpu/new" |
|
|
|
tplGrampusTrainJobGPUVersionNew base.TplName = "repo/grampus/trainjob/gpu/versionnew" |
|
|
|
|
|
|
|
//NPU |
|
|
|
tplGrampusTrainJobNPUNew base.TplName = "repo/grampus/trainjob/npu/new" |
|
|
|
tplGrampusTrainJobNPUNew base.TplName = "repo/grampus/trainjob/npu/new" |
|
|
|
tplGrampusTrainJobNPUVersionNew base.TplName = "repo/grampus/trainjob/npu/versionnew" |
|
|
|
) |
|
|
|
|
|
|
|
func GrampusTrainJobGPUNew(ctx *context.Context) { |
|
|
|
@@ -137,6 +140,126 @@ func grampusTrainJobNewDataPrepare(ctx *context.Context, processType string) err |
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
func GrampusTrainJobVersionNew(ctx *context.Context) { |
|
|
|
task := ctx.Cloudbrain |
|
|
|
if task.ComputeResource == models.GPUResource { |
|
|
|
err := grampusTrainJobVersionNewDataPrepare(ctx, grampus.ProcessorTypeGPU) |
|
|
|
if err != nil { |
|
|
|
ctx.ServerError("get new train-job version info failed", err) |
|
|
|
return |
|
|
|
} |
|
|
|
ctx.HTML(http.StatusOK, tplGrampusTrainJobGPUVersionNew) |
|
|
|
} else if task.ComputeResource == models.NPUResource { |
|
|
|
err := grampusTrainJobVersionNewDataPrepare(ctx, grampus.ProcessorTypeNPU) |
|
|
|
if err != nil { |
|
|
|
ctx.ServerError("get new train-job version info failed", err) |
|
|
|
return |
|
|
|
} |
|
|
|
ctx.HTML(200, tplGrampusTrainJobNPUVersionNew) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
func grampusTrainJobVersionNewDataPrepare(ctx *context.Context, processType string) 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 |
|
|
|
|
|
|
|
//get valid images |
|
|
|
images, err := grampus.GetImages(processType) |
|
|
|
if err != nil { |
|
|
|
log.Error("GetImages failed:", err.Error()) |
|
|
|
} else { |
|
|
|
ctx.Data["images"] = images.Infos |
|
|
|
} |
|
|
|
|
|
|
|
grampus.InitSpecialPool() |
|
|
|
|
|
|
|
ctx.Data["GPUEnabled"] = true |
|
|
|
ctx.Data["NPUEnabled"] = true |
|
|
|
includeCenters := make(map[string]struct{}) |
|
|
|
excludeCenters := make(map[string]struct{}) |
|
|
|
if grampus.SpecialPools != nil { |
|
|
|
for _, pool := range grampus.SpecialPools.Pools { |
|
|
|
if pool.IsExclusive { |
|
|
|
if !IsUserInOrgPool(ctx.User.ID, pool) { |
|
|
|
ctx.Data[pool.Type+"Enabled"] = false |
|
|
|
} |
|
|
|
} else { |
|
|
|
if strings.Contains(strings.ToLower(processType), strings.ToLower(pool.Type)) { |
|
|
|
if IsUserInOrgPool(ctx.User.ID, pool) { |
|
|
|
for _, center := range pool.Pool { |
|
|
|
includeCenters[center.Queue] = struct{}{} |
|
|
|
} |
|
|
|
} else { |
|
|
|
for _, center := range pool.Pool { |
|
|
|
excludeCenters[center.Queue] = struct{}{} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
//prepare available specs |
|
|
|
if processType == grampus.ProcessorTypeNPU { |
|
|
|
prepareGrampusTrainSpecs(ctx, models.NPU) |
|
|
|
} else if processType == grampus.ProcessorTypeGPU { |
|
|
|
prepareGrampusTrainSpecs(ctx, models.GPU) |
|
|
|
} |
|
|
|
|
|
|
|
//get branches |
|
|
|
branches, _, err := ctx.Repo.GitRepo.GetBranches(0, 0) |
|
|
|
if err != nil { |
|
|
|
log.Error("GetBranches error:", err.Error()) |
|
|
|
} else { |
|
|
|
ctx.Data["branches"] = branches |
|
|
|
} |
|
|
|
|
|
|
|
ctx.Data["BranchName"] = ctx.Cloudbrain.BranchName |
|
|
|
ctx.Data["ImageName"] = ctx.Cloudbrain.Image |
|
|
|
ctx.Data["BootFile"] = ctx.Cloudbrain.BootFile |
|
|
|
ctx.Data["description"] = ctx.Cloudbrain.Description |
|
|
|
spec, _ := resource.GetCloudbrainSpec(ctx.Cloudbrain.ID) |
|
|
|
if spec != nil { |
|
|
|
log.Info("spec_id = %d", spec.ID) |
|
|
|
ctx.Data["spec_id"] = spec.ID |
|
|
|
} |
|
|
|
var Parameters modelarts.Parameters |
|
|
|
if err = json.Unmarshal([]byte(ctx.Cloudbrain.Parameters), &Parameters); err != nil { |
|
|
|
ctx.ServerError("json.Unmarshal failed:", err) |
|
|
|
return err |
|
|
|
} |
|
|
|
ctx.Data["params"] = Parameters.Parameter |
|
|
|
|
|
|
|
_, _, datasetNames, _, err := getDatasUrlListByUUIDS(ctx.Cloudbrain.Uuid) |
|
|
|
if err != nil { |
|
|
|
log.Info("query dataset error," + err.Error()) |
|
|
|
ctx.Data["dataset_name"] = "" |
|
|
|
} else { |
|
|
|
ctx.Data["dataset_name"] = datasetNames |
|
|
|
} |
|
|
|
ctx.Data["uuid"] = ctx.Cloudbrain.Uuid |
|
|
|
ctx.Data["ComputeResource"] = ctx.Cloudbrain.ComputeResource |
|
|
|
|
|
|
|
if processType == grampus.ProcessorTypeGPU { |
|
|
|
ctx.Data["datasetType"] = models.TypeCloudBrainOne |
|
|
|
waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeC2Net, models.GPUResource, models.JobTypeTrain) |
|
|
|
ctx.Data["WaitCount"] = waitCount |
|
|
|
} else if processType == grampus.ProcessorTypeNPU { |
|
|
|
ctx.Data["datasetType"] = models.TypeCloudBrainTwo |
|
|
|
waitCount := cloudbrain.GetWaitingCloudbrainCount(models.TypeC2Net, models.NPUResource, models.JobTypeTrain) |
|
|
|
ctx.Data["WaitCount"] = waitCount |
|
|
|
ctx.Data["work_server_number"] = ctx.Cloudbrain.WorkServerNumber |
|
|
|
} |
|
|
|
|
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
func prepareGrampusTrainSpecs(ctx *context.Context, computeResource string) { |
|
|
|
noteBookSpecs, _ := resource.FindAvailableSpecs(ctx.User.ID, models.FindSpecsOptions{ |
|
|
|
JobType: models.JobTypeTrain, |
|
|
|
@@ -378,6 +501,19 @@ func GrampusTrainJobGpuCreate(ctx *context.Context, form auth.CreateGrampusTrain |
|
|
|
ctx.Redirect(setting.AppSubURL + ctx.Repo.RepoLink + "/modelarts/train-job") |
|
|
|
} |
|
|
|
|
|
|
|
func GrampusTrainJobVersionCreate(ctx *context.Context, form auth.CreateGrampusTrainJobForm) { |
|
|
|
computeResource := ctx.Query("compute_resource") |
|
|
|
if computeResource == models.GPUResource { |
|
|
|
GrampusTrainJobGpuCreate(ctx, form) |
|
|
|
} else if computeResource == models.NPUResource { |
|
|
|
GrampusTrainJobNpuCreate(ctx, form) |
|
|
|
} else { |
|
|
|
ctx.ServerError("resource error", errors.New("compute resource is not support")) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
func checkSpecialPool(ctx *context.Context, resourceType string) string { |
|
|
|
grampus.InitSpecialPool() |
|
|
|
if grampus.SpecialPools != nil { |
|
|
|
|