@@ -91,7 +91,8 @@ type Cloudbrain struct { | |||
ID int64 `xorm:"pk autoincr"` | |||
JobID string `xorm:"INDEX NOT NULL"` | |||
JobType string `xorm:"INDEX NOT NULL DEFAULT 'DEBUG'"` | |||
JobName string | |||
JobName string `xorm:"INDEX NOT NULL"` | |||
DisplayJobName string | |||
Status string | |||
UserID int64 | |||
RepoID int64 | |||
@@ -27,6 +27,7 @@ func (f *CreateModelArtsNotebookForm) Validate(ctx *macaron.Context, errs bindin | |||
} | |||
type CreateModelArtsTrainJobForm struct { | |||
DisplayJobName string `form:"display_job_name" binding:"Required"` | |||
JobName string `form:"job_name" binding:"Required"` | |||
Attachment string `form:"attachment" binding:"Required"` | |||
BootFile string `form:"boot_file" binding:"Required"` | |||
@@ -15,8 +15,8 @@ import ( | |||
const ( | |||
//notebook | |||
storageTypeOBS = "obs" | |||
autoStopDuration = 4 * 60 * 60 | |||
storageTypeOBS = "obs" | |||
autoStopDuration = 4 * 60 * 60 | |||
autoStopDurationMs = 4 * 60 * 60 * 1000 | |||
DataSetMountPath = "/home/ma-user/work" | |||
@@ -67,6 +67,7 @@ var ( | |||
type GenerateTrainJobReq struct { | |||
JobName string | |||
DisplayJobName string | |||
Uuid string | |||
Description string | |||
CodeObsPath string | |||
@@ -275,12 +276,12 @@ func GenerateNotebook2(ctx *context.Context, jobName, uuid, description, flavor | |||
ImageID: "59a6e9f5-93c0-44dd-85b0-82f390c5d53a", | |||
PoolID: poolInfos.PoolInfo[0].PoolId, | |||
Feature: models.NotebookFeature, | |||
Volume: models.VolumeReq{ | |||
Capacity: 100, | |||
Category: models.EVSCategory, | |||
Ownership: models.ManagedOwnership, | |||
Volume: models.VolumeReq{ | |||
Capacity: 100, | |||
Category: models.EVSCategory, | |||
Ownership: models.ManagedOwnership, | |||
}, | |||
WorkspaceID: "0", | |||
WorkspaceID: "0", | |||
}) | |||
if err != nil { | |||
log.Error("createNotebook2 failed: %v", err.Error()) | |||
@@ -342,6 +343,7 @@ func GenerateTrainJob(ctx *context.Context, req *GenerateTrainJobReq) (err error | |||
RepoID: ctx.Repo.Repository.ID, | |||
JobID: strconv.FormatInt(jobResult.JobID, 10), | |||
JobName: req.JobName, | |||
DisplayJobName: req.DisplayJobName, | |||
JobType: string(models.JobTypeTrain), | |||
Type: models.TypeCloudBrainTwo, | |||
VersionID: jobResult.VersionID, | |||
@@ -6,8 +6,10 @@ package util | |||
import ( | |||
"bytes" | |||
"math/rand" | |||
"strconv" | |||
"strings" | |||
"time" | |||
) | |||
// OptionalBool a boolean that can be "null" | |||
@@ -110,3 +112,16 @@ func AddZero(t int64) (m string) { | |||
return strconv.FormatInt(t, 10) | |||
} | |||
} | |||
func ConvertDisplayJobNameToJobName(DisplayName string) (JobName string) { | |||
t := time.Now() | |||
JobName = "openi" + strings.ToLower(cutNameString(DisplayName, 15)) + "t" + t.Format("2006010215") + strconv.Itoa(int(rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(100000))) | |||
return JobName | |||
} | |||
func cutNameString(str string, lens int) string { | |||
if len(str) < lens { | |||
return str | |||
} | |||
return str[:lens] | |||
} |
@@ -25,6 +25,7 @@ import ( | |||
"code.gitea.io/gitea/modules/obs" | |||
"code.gitea.io/gitea/modules/setting" | |||
"code.gitea.io/gitea/modules/storage" | |||
"code.gitea.io/gitea/modules/util" | |||
) | |||
const ( | |||
@@ -516,8 +517,8 @@ func trainJobNewDataPrepare(ctx *context.Context) error { | |||
//} | |||
t := time.Now() | |||
var jobName = cutString(ctx.User.Name, 5) + t.Format("2006010215") + strconv.Itoa(int(t.Unix()))[5:] | |||
ctx.Data["job_name"] = jobName | |||
var displayJobName = cutString(ctx.User.Name, 5) + t.Format("2006010215") + strconv.Itoa(int(t.Unix()))[5:] | |||
ctx.Data["display_job_name"] = displayJobName | |||
attachs, err := models.GetModelArtsTrainAttachments(ctx.User.ID) | |||
if err != nil { | |||
@@ -554,8 +555,8 @@ func trainJobNewDataPrepare(ctx *context.Context) error { | |||
} | |||
ctx.Data["flavor_infos"] = flavorInfos.Info | |||
outputObsPath := "/" + setting.Bucket + modelarts.JobPath + jobName + modelarts.OutputPath | |||
ctx.Data["train_url"] = outputObsPath | |||
// outputObsPath := "/" + setting.Bucket + modelarts.JobPath + jobName + modelarts.OutputPath | |||
// ctx.Data["train_url"] = outputObsPath | |||
ctx.Data["params"] = "" | |||
ctx.Data["branchName"] = ctx.Repo.BranchName | |||
@@ -841,7 +842,8 @@ func versionErrorDataPrepare(ctx *context.Context, form auth.CreateModelArtsTrai | |||
func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm) { | |||
ctx.Data["PageIsTrainJob"] = true | |||
VersionOutputPath := modelarts.GetOutputPathByCount(modelarts.TotalVersionCount) | |||
jobName := form.JobName | |||
displayJobName := form.DisplayJobName | |||
jobName := util.ConvertDisplayJobNameToJobName(displayJobName) | |||
uuid := form.Attachment | |||
description := form.Description | |||
workServerNumber := form.WorkServerNumber | |||
@@ -993,6 +995,7 @@ func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm) | |||
req := &modelarts.GenerateTrainJobReq{ | |||
JobName: jobName, | |||
DisplayJobName: displayJobName, | |||
DataUrl: dataPath, | |||
Description: description, | |||
CodeObsPath: codeObsPath, | |||
@@ -80,7 +80,7 @@ | |||
<h4 class="unite title ui header ">{{.i18n.Tr "repo.modelarts.train_job.basic_info"}}:</h4> | |||
<div class="required unite min_title inline field"> | |||
<label style="font-weight: normal;">{{.i18n.Tr "repo.modelarts.train_job.job_name"}}</label> | |||
<input style="width: 60%;" name="job_name" id="trainjob_job_name" placeholder={{.i18n.Tr "repo.modelarts.train_job.job_name"}} value="{{.job_name}}" tabindex="3" onkeyup="this.value=this.value.replace(/[, ]/g,'')" autofocus required maxlength="64"> | |||
<input style="width: 60%;" name="display_job_name" id="job_name" placeholder={{.i18n.Tr "repo.modelarts.train_job.job_name"}} value="{{.display_job_name}}" tabindex="3" onkeyup="this.value=this.value.replace(/[, ]/g,'')" autofocus required maxlength="64"> | |||
<span class="tooltips" style="display: block;">请输入字母、数字、_和-,最长64个字符,且不能以中划线(-)结尾。</span> | |||
</div> | |||
@@ -391,8 +391,8 @@ | |||
} | |||
] | |||
}, | |||
job_name:{ | |||
identifier : 'job_name', | |||
display_job_name:{ | |||
identifier : 'display_job_name', | |||
rules: [ | |||
{ | |||
type: 'regExp[/^[a-zA-Z0-9-_]{1,64}[^-]$/]', | |||