Browse Source

提交代码。

Signed-off-by: zouap <zouap@pcl.ac.cn>
tags/v1.21.12.1^2
zouap 4 years ago
parent
commit
71bd6004ac
10 changed files with 82 additions and 45 deletions
  1. +1
    -0
      models/cloudbrain.go
  2. +3
    -2
      modules/auth/modelarts.go
  3. +20
    -0
      modules/modelarts/modelarts.go
  4. +1
    -1
      modules/storage/obs.go
  5. +6
    -4
      routers/api/v1/api.go
  6. +5
    -4
      routers/api/v1/repo/modelarts.go
  7. +13
    -23
      routers/repo/modelarts.go
  8. +1
    -1
      templates/repo/modelarts/trainjob/index.tmpl
  9. +11
    -2
      templates/repo/modelarts/trainjob/new.tmpl
  10. +21
    -8
      templates/repo/modelarts/trainjob/version_new.tmpl

+ 1
- 0
models/cloudbrain.go View File

@@ -91,6 +91,7 @@ type Cloudbrain struct {
Description string
WorkServerNumber int
FlavorName string
EngineName string

User *User `xorm:"-"`
Repo *Repository `xorm:"-"`


+ 3
- 2
modules/auth/modelarts.go View File

@@ -19,7 +19,7 @@ type CreateModelArtsNotebookForm struct {
JobName string `form:"job_name" binding:"Required"`
Attachment string `form:"attachment"`
Description string `form:"description"`
Flavor string `form:"flavor"`
Flavor string `form:"flavor"`
}

func (f *CreateModelArtsNotebookForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {
@@ -41,7 +41,8 @@ type CreateModelArtsTrainJobForm struct {
PrameterDescription string `form:"parameter_description"`
BranchName string `form:"branch_name" binding:"Required"`
VersionName string `form:"version_name" binding:"Required"`
FlavorName string `form:"flavor_name" binding:"Required"`
FlavorName string `form:"flaver_names" binding:"Required"`
EngineName string `form:"engine_names" binding:"Required"`
}

func (f *CreateModelArtsTrainJobForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors {


+ 20
- 0
modules/modelarts/modelarts.go View File

@@ -82,6 +82,7 @@ type GenerateTrainJobReq struct {
FatherVersionName string
FlavorName string
VersionCount int
EngineName string
}

type GenerateTrainJobVersionReq struct {
@@ -104,6 +105,7 @@ type GenerateTrainJobVersionReq struct {
CommitID string
BranchName string
FlavorName string
EngineName string
}

type VersionInfo struct {
@@ -134,6 +136,22 @@ type ResourcePool struct {
} `json:"resource_pool"`
}

// type Parameter struct {
// Label string `json:"label"`
// Value string `json:"value"`
// }

// type Parameters struct {
// Parameter []Parameter `json:"parameter"`
// }

type Parameters struct {
Parameter []struct {
Label string `json:"label"`
Value string `json:"value"`
} `json:"parameter"`
}

func GenerateTask(ctx *context.Context, jobName, uuid, description, flavor string) error {
var dataActualPath string
if uuid != "" {
@@ -263,6 +281,7 @@ func GenerateTrainJob(ctx *context.Context, req *GenerateTrainJobReq) (err error
Description: req.Description,
WorkServerNumber: req.WorkServerNumber,
FlavorName: req.FlavorName,
EngineName: req.EngineName,
VersionCount: req.VersionCount,
})

@@ -331,6 +350,7 @@ func GenerateTrainJobVersion(ctx *context.Context, req *GenerateTrainJobVersionR
Description: req.Description,
WorkServerNumber: req.WorkServerNumber,
FlavorName: req.FlavorName,
EngineName: req.EngineName,
})
if err != nil {
log.Error("CreateCloudbrain(%s) failed:%v", req.JobName, err.Error())


+ 1
- 1
modules/storage/obs.go View File

@@ -302,7 +302,7 @@ func GetOneLevelAllObjectUnderDir(bucket string, prefixRootPath string, relative
fileName = val.Key[prefixLen:]
}
fileInfo := FileInfo{
ModTime: val.LastModified.Format("2006-01-02 15:04:05"),
ModTime: val.LastModified.Local().Format("2006-01-02 15:04:05"),
FileName: fileName,
Size: val.Size,
IsDir: isDir,


+ 6
- 4
routers/api/v1/api.go View File

@@ -874,11 +874,13 @@ func RegisterRoutes(m *macaron.Macaron) {
})
m.Group("/train-job", func() {
m.Group("/:jobid", func() {
m.Get("", repo.GetModelArtsTrainJob)
// m.Get("", repo.GetModelArtsTrainJob)
m.Get("", repo.GetModelArtsTrainJobVersion)
// m.Get("/log", repo.TrainJobGetLog)
m.Get("/log", repo.TrainJobGetLog)
m.Group("/:version-name", func() {
m.Get("", repo.GetModelArtsTrainJobVersion)
})
// m.Group("/:version-name", func() {
// m.Get("", repo.GetModelArtsTrainJobVersion)
// })
})
})
}, reqRepoReader(models.UnitTypeCloudBrain))


+ 5
- 4
routers/api/v1/repo/modelarts.go View File

@@ -86,7 +86,7 @@ func GetModelArtsTrainJobVersion(ctx *context.APIContext) {
)

jobID := ctx.Params(":jobid")
versionName := ctx.Params(":version-name")
versionName := ctx.Query("version_name")
repoID := ctx.Repo.Repository.ID
job, err := models.GetRepoCloudBrainByJobIDAndVersionName(repoID, jobID, versionName)
if err != nil {
@@ -123,6 +123,7 @@ func TrainJobGetLog(ctx *context.APIContext) {
log.Info("test")

var jobID = ctx.Params(":jobid")
var versionName = ctx.Query("version_name")
var logFileName = ctx.Query("file_name")
var baseLine = ctx.Query("base_line")
var order = ctx.Query("order")
@@ -135,11 +136,11 @@ func TrainJobGetLog(ctx *context.APIContext) {
return
}

task, err := models.GetCloudbrainByJobID(jobID)
task, err := models.GetCloudbrainByJobIDAndVersionName(jobID, versionName)
if err != nil {
log.Error("GetCloudbrainByJobID(%s) failed:%v", jobID, err.Error())
log.Error("GetCloudbrainByJobIDAndVersionName(%s) failed:%v", jobID, err.Error())
ctx.JSON(http.StatusInternalServerError, map[string]interface{}{
"err_msg": "GetCloudbrainByJobID failed",
"err_msg": "GetCloudbrainByJobIDAndVersionName failed",
})
return
}


+ 13
- 23
routers/repo/modelarts.go View File

@@ -441,6 +441,13 @@ func trainJobNewVersionDataPrepare(ctx *context.Context) error {
}
ctx.Data["flavor_infos"] = flavorInfos.Info

var Parameters modelarts.Parameters
if err = json.Unmarshal([]byte(task.Parameters), &Parameters); err != nil {
ctx.ServerError("json.Unmarshal failed:", err)
return err
}
ctx.Data["params"] = Parameters.Parameter

outputObsPath := "/" + setting.Bucket + modelarts.JobPath + jobName + modelarts.OutputPath
ctx.Data["train_url"] = outputObsPath

@@ -454,9 +461,9 @@ func trainJobNewVersionDataPrepare(ctx *context.Context) error {
ctx.Data["description"] = task.Description
ctx.Data["boot_file"] = task.BootFile
ctx.Data["dataset_name"] = task.DatasetName
ctx.Data["params"] = task.Parameters
ctx.Data["work_server_number"] = task.WorkServerNumber
ctx.Data["flavor_name"] = task.FlavorName
ctx.Data["engine_name"] = task.FlavorName
ctx.Data["uuid"] = task.Uuid
ctx.Data["flavor_code"] = task.FlavorCode
ctx.Data["engine_id"] = task.EngineID
@@ -493,6 +500,7 @@ func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm)
isLatestVersion := modelarts.IsLatestVersion
FlavorName := form.FlavorName
VersionCount := modelarts.VersionCount
EngineName := form.EngineName

if err := paramCheckCreateTrainJob(form); err != nil {
log.Error("paramCheckCreateTrainJob failed:(%v)", err)
@@ -619,13 +627,6 @@ func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm)
return
}
}
//将引擎id转化为引擎名称
FlavorName, err = getFlavorNameByEngineID(engineID)
if err != nil {
log.Error("getFlavorNameByEngineID(%s) failed:%v", engineID, err.Error())
ctx.RenderWithErr(err.Error(), tplModelArtsTrainJobNew, &form)
return
}

req := &modelarts.GenerateTrainJobReq{
JobName: jobName,
@@ -648,6 +649,7 @@ func TrainJobCreate(ctx *context.Context, form auth.CreateModelArtsTrainJobForm)
Params: form.Params,
FatherVersionName: modelarts.InitFatherVersionName,
FlavorName: FlavorName,
EngineName: EngineName,
VersionCount: VersionCount,
}

@@ -719,6 +721,7 @@ func TrainJobCreateVersion(ctx *context.Context, form auth.CreateModelArtsTrainJ
branch_name := form.BranchName
fatherVersionName := versionName
FlavorName := form.FlavorName
EngineName := form.EngineName

if err := paramCheckCreateTrainJob(form); err != nil {
log.Error("paramCheckCreateTrainJob failed:(%v)", err)
@@ -843,8 +846,7 @@ func TrainJobCreateVersion(ctx *context.Context, form auth.CreateModelArtsTrainJ
return
}
}
//将引擎id转化为引擎名称
FlavorName, err = getFlavorNameByEngineID(engineID)

if err != nil {
log.Error("getFlavorNameByEngineID(%s) failed:%v", engineID, err.Error())
ctx.RenderWithErr(err.Error(), tplModelArtsTrainJobVersionNew, &form)
@@ -876,6 +878,7 @@ func TrainJobCreateVersion(ctx *context.Context, form auth.CreateModelArtsTrainJ
CommitID: commitID,
BranchName: branch_name,
FlavorName: FlavorName,
EngineName: EngineName,
}
err = modelarts.GenerateTrainJobVersion(ctx, req, jobID, fatherVersionName)
if err != nil {
@@ -920,19 +923,6 @@ func TrainJobCreateVersion(ctx *context.Context, form auth.CreateModelArtsTrainJ
ctx.HTML(http.StatusOK, tplModelArtsTrainJobShow)
}

func getFlavorNameByEngineID(engineID int) (FlavorName string, err error) {
if engineID == 121 {
FlavorName = "TensorFlow-1.15"
return FlavorName, nil
} else if engineID == 122 {
FlavorName = "Mindspore-1.3"
return FlavorName, nil
} else {
log.Error("getFlavorName failed:%v", errors.New("getFlavorName failed"))
return "getFlavorName failed:", errors.New("getFlavorName failed")
}
}

// readDir reads the directory named by dirname and returns
// a list of directory entries sorted by filename.
func readDir(dirname string) ([]os.FileInfo, error) {


+ 1
- 1
templates/repo/modelarts/trainjob/index.tmpl View File

@@ -332,7 +332,7 @@
<span>{{.VersionCount}} </span>
</div>
<!-- 任务状态 -->
<div class="two wide column text center padding0">
<div class="two wide column padding0" style="padding-left: 2.2rem !important;">
<span class="job-status" id="{{.JobID}}" data-repopath="{{$.RepoRelPath}}" data-jobid="{{.JobID}}">
<span><i id="{{.JobID}}-icon" style="vertical-align: middle;" class="{{.Status}}"></i><span id="{{.JobID}}-text" style="margin-left: 0.4em;font-size: 12px;">{{.Status}}</span></span>
</span>


+ 11
- 2
templates/repo/modelarts/trainjob/new.tmpl View File

@@ -153,6 +153,8 @@
<form class="ui form" action="{{.Link}}" method="post">
{{.CsrfTokenHtml}}
<input type="hidden" name="action" value="update">
<input type="hidden" id="ai_engine_name" name="engine_names" value="">
<input type="hidden" id="ai_flaver_name" name="flaver_names" value="">
<h4 class="unite title ui header ">{{.i18n.Tr "repo.modelarts.train_job.basic_info"}}:</h4>
<div class="required unite min_title inline field">
<label>{{.i18n.Tr "repo.modelarts.train_job.job_name"}}</label>
@@ -189,7 +191,7 @@
</select>
</div>

<div class="field" style="flex: 2;">
<div class="field" style="flex: 2;" id="engine_name">
<select class="ui dropdown width" id="trainjob_engine_versions" style='width: 100%;' name="engine_id">
{{range .engine_versions}}
<option name="engine_id" value="{{.ID}}">{{.Value}}</option>
@@ -257,7 +259,7 @@
</div>
</div>

<div class="required unite min_title inline field">
<div class="required unite min_title inline field" id="flaver_name">
<label>{{.i18n.Tr "repo.modelarts.train_job.standard"}}</label>
<select class="ui dropdown width81" id="trainjob-flavor" style='width:385px' name="flavor">
{{range .flavor_infos}}
@@ -541,8 +543,15 @@
msg = JSON.stringify(msg)
$('#store_run_para').val(msg)
}
function get_name(){
let name1=$("#engine_name .text").text()
let name2=$("#flaver_name .text").text()
$("input#ai_engine_name").val(name1)
$("input#ai_flaver_name").val(name2)

}
$('.ui.create_train_job.green.button').click(function(e) {
get_name()
send_run_para()
validate()
})

+ 21
- 8
templates/repo/modelarts/trainjob/version_new.tmpl View File

@@ -162,7 +162,6 @@
<input type="hidden" style="width: 60%;" name="job_name" id="trainjob_job_name" value="{{.job_name}}">
<input style="width: 60%;" value="{{.job_name}}" tabindex="3" disabled >
</div>
<input type="hidden" name="version_name" value="{{.version_name}}">
<div class="unite min_title inline field">
<label for="description">{{.i18n.Tr "repo.modelarts.train_job.description"}}&nbsp;&nbsp;</label>
<textarea style="width: 80%;" id="description" value="{{.description}}" name="description" rows="3" maxlength="255" placeholder={{.i18n.Tr "repo.modelarts.train_job.new_place"}} onchange="this.value=this.value.substring(0, 255)" onkeydown="this.value=this.value.substring(0, 255)" onkeyup="this.value=this.value.substring(0, 256)"></textarea>
@@ -202,7 +201,7 @@
<div class="field" style="flex: 2;">
<select class="ui dropdown width" id="trainjob_engine_versions" style='width: 100%;' name="engine_id">
{{if .engine_id}}
<option name="engine_id" value="{{.engine_id}}">{{.engine_id}}</option>
<option name="engine_id" value="{{.engine_id}}">{{.engine_name}}</option>
{{end}}
{{range .engine_versions}}
{{if ne $.engine_id .ID}}
@@ -245,7 +244,24 @@
<label>{{.i18n.Tr "repo.modelarts.train_job.run_parameter"}}</label>
<span id="add_run_para" style="margin-left: 0.5rem;cursor:pointer;color: rgba(3, 102, 214, 100);font-size: 14px;line-height: 26px;font-family: SourceHanSansSC-medium;"><i class="plus square outline icon"></i>{{.i18n.Tr "repo.modelarts.train_job.add_run_parameter"}}</span>
<input id="store_run_para" type="hidden" name="run_para_list">
<div class="dynamic field" style="margin-top: 1rem;"></div>
<div class="dynamic field" style="margin-top: 1rem;">
{{if ne 0 (len .params)}}
{{range $k ,$v := .params}}
<div class="two fields width85" id="para{{$k}}">
<div class="field">
<input type="text" name="shipping_first-name" value={{$v.Label}} required>
</div>
<div class="field">
<input type="text" name="shipping_last-name" value={{$v.Value}} required>
</div>
<span>
<i class="trash icon"></i>
</span>

</div>
{{end}}
{{end}}
</div>
</div>


@@ -314,11 +330,7 @@
{{template "base/footer" .}}

<script>
console.log({{.dataset_name}})
console.log({{.params}})
console.log({{.flavor_name}})
console.log({{.flavor_code}})
let url_href = window.location.pathname.split('create')[0]
let url_href = {{.RepoLink}}+'/modelarts/train-job'
let url_post = window.location.pathname.split('?version_name=V0001')[0]
$(".ui.button").attr('href',url_href)
$(".ui.form").attr('action',url_post)
@@ -554,6 +566,7 @@
}
document.onreadystatechange = function() {
if (document.readyState === "complete") {

document.getElementById("mask").style.display = "none"
}
}


Loading…
Cancel
Save