Browse Source

Merge pull request '训练作业多版本下载模型接口换为不是api接口' (#957) from liuzx_trainjob into V20211115

Reviewed-on: https://git.openi.org.cn/OpenI/aiforge/pulls/957
Reviewed-by: lewis <747342561@qq.com>
tags/v1.21.12.1
lewis 4 years ago
parent
commit
3dd32301a5
4 changed files with 62 additions and 25 deletions
  1. +1
    -1
      routers/api/v1/repo/modelarts.go
  2. +44
    -15
      routers/repo/modelarts.go
  3. +1
    -0
      routers/routes/routes.go
  4. +16
    -9
      templates/repo/modelarts/trainjob/show.tmpl

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

@@ -343,7 +343,7 @@ func ModelDownload(ctx *context.Context) {

path := strings.TrimPrefix(path.Join(setting.TrainJobModelPath, task.JobName, setting.OutPutPath, versionName, parentDir, fileName), "/")
log.Info("Download path is:%s", path)
if setting.PROXYURL != "" {
if setting.PROXYURL == "" {
body, err := storage.ObsDownloadAFile(setting.Bucket, path)
if err != nil {
log.Info("download error.")


+ 44
- 15
routers/repo/modelarts.go View File

@@ -478,11 +478,10 @@ func TrainJobNewVersion(ctx *context.Context) {
func trainJobNewVersionDataPrepare(ctx *context.Context) error {
ctx.Data["PageIsCloudBrain"] = true
var jobID = ctx.Params(":jobid")
// var versionName = ctx.Params(":version-name")
var versionName = ctx.Query("version_name")
// canNewJob, err := canUserCreateTrainJobVersion(ctx, jobID)
// canNewJob, err := canUserCreateTrainJobVersion(ctx, jobID, versionName)
// if err != nil {
// ctx.ServerError("get can info failed", err)
// ctx.ServerError("canNewJob can info failed", err)
// return err
// }
// ctx.Data["canNewJob"] = canNewJob
@@ -548,7 +547,7 @@ func trainJobNewVersionDataPrepare(ctx *context.Context) error {
return err
}

ctx.Data["branch"] = Branches
ctx.Data["branches"] = Branches
ctx.Data["branch_name"] = task.BranchName
ctx.Data["description"] = task.Description
ctx.Data["boot_file"] = task.BootFile
@@ -1312,17 +1311,19 @@ func canUserCreateTrainJob(uid int64) (bool, error) {

return org.IsOrgMember(uid)
}
func canUserCreateTrainJobVersion(ctx *context.Context, jobID string) (bool, error) {

var versionName = "V0001"
task, err := models.GetCloudbrainByJobIDAndVersionName(jobID, versionName)
if err != nil {
return false, err
}
if ctx.User.ID == task.User.ID {
return true, nil
}
return false, err
func canUserCreateTrainJobVersion(ctx *context.Context, jobID string, versionName string) (bool, error) {
// task, err := models.GetCloudbrainByJobIDAndVersionName(jobID, versionName)
// if err != nil {
// return false, err
// }
// if ctx.User.ID == task.UserID {
// canNewJob := true
// return canNewJob, nil
// } else {
// canNewJob := false
// return canNewJob, nil
// }
return true, nil
}

func TrainJobGetConfigList(ctx *context.Context) {
@@ -1378,3 +1379,31 @@ func getConfigList(perPage, page int, sortBy, order, searchContent, configType s

return list, nil
}

func ModelDownload(ctx *context.Context) {
var (
err error
)

var jobID = ctx.Params(":jobid")
versionName := ctx.Query("version_name")
parentDir := ctx.Query("parent_dir")
fileName := ctx.Query("file_name")
log.Info("DownloadSingleModelFile start.")
task, err := models.GetCloudbrainByJobIDAndVersionName(jobID, versionName)
if err != nil {
log.Error("GetCloudbrainByJobID(%s) failed:%v", task.JobName, err.Error())
return
}

path := strings.TrimPrefix(path.Join(setting.TrainJobModelPath, task.JobName, setting.OutPutPath, versionName, parentDir, fileName), "/")
log.Info("Download path is:%s", path)

url, err := storage.GetObsCreateSignedUrlByBucketAndKey(setting.Bucket, path)
if err != nil {
log.Error("GetObsCreateSignedUrl failed: %v", err.Error(), ctx.Data["msgID"])
ctx.ServerError("GetObsCreateSignedUrl", err)
return
}
http.Redirect(ctx.Resp, ctx.Req.Request, url, http.StatusMovedPermanently)
}

+ 1
- 0
routers/routes/routes.go View File

@@ -988,6 +988,7 @@ func RegisterRoutes(m *macaron.Macaron) {
m.Get("", reqRepoCloudBrainReader, repo.TrainJobShow)
m.Post("/stop", reqRepoCloudBrainWriter, repo.TrainJobStop)
m.Post("/del", reqRepoCloudBrainWriter, repo.TrainJobDel)
m.Get("/model_download", reqRepoCloudBrainReader, repo.ModelDownload)
m.Get("/create_version", reqRepoCloudBrainReader, repo.TrainJobNewVersion)
m.Post("/create_version", reqRepoCloudBrainWriter, bindIgnErr(auth.CreateModelArtsTrainJobForm{}), repo.TrainJobCreateVersion)
})


+ 16
- 9
templates/repo/modelarts/trainjob/show.tmpl View File

@@ -557,6 +557,7 @@ td, th {
// detail status and duration
$('#'+version_name+'-duration').text(data.JobDuration)
$('#'+version_name+'-status').text(data.JobStatus)
loadLog(version_name)


}).fail(function(err) {
@@ -600,7 +601,7 @@ td, th {
});
}
function loadLog(version_name){
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&lines=20&order=asc`, (data) => {
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&lines=50&order=asc`, (data) => {
$('input[name=end_line]').val(data.EndLine)
$('input[name=start_line]').val(data.StartLine)
$(`#log_file${version_name}`).text(data.Content)
@@ -657,7 +658,7 @@ td, th {
}
}
function downloadModelFile(version_name,parentDir,filename){
function downloadModelFile(version_name,filename){
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/model_download?version_name=${version_name}&file_name=${filename}`, (data) => {
console.log(data)

@@ -680,10 +681,10 @@ td, th {
html += "<span class='octicon octicon-file-directory'>"
html += "</span>"
if(data.Dirs[i].IsDir){
html += `<a onclick="loadModelFile('${version_name}','${data.Dirs[i].ParenDir}','${data.Dirs[i].ParenDir}','folder')">`
html += `<a onclick="loadModelFile('${version_name}','${data.Dirs[i].ParenDir}','${data.Dirs[i].FileName}','folder')">`
html += "<span class='fitted'><i class='folder icon' width='16' height='16' aria-hidden='true'></i>" + data.Dirs[i].FileName + "</span>"
}else{
html += `<a onclick="downloadModelFile('${version_name}','${data.Dirs[i].ParenDir}','${data.Dirs[i].ParenDir}')">`
html += `<a href="${location.href}/model_download?version_name=${version_name}&file_name=${data.Dirs[i].FileName}&parent_dir=${data.Dirs[i].ParenDir}">`
html += "<span class='fitted'><i class='file icon' width='16' height='16' aria-hidden='true'></i>" + data.Dirs[i].FileName + "</span>"
}
html += '</a>'
@@ -714,9 +715,9 @@ td, th {
let divHeight = $(`#log${version_name}`).height(); // 可视区高度
// let version_name=$(this).find('input[name=version_name]').val()
console.log("scrollTo,scrollHeight,divHeight",scrollTop,scrollHeight,divHeight)
if(parseInt(scrollTop) + divHeight + 18 == scrollHeight){
if(parseInt(scrollTop) + divHeight -10 == scrollHeight){
let end_line = $(`#log${version_name} input[name=end_line]`).val()
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${end_line}&order=desc`, (data) => {
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${end_line}&lines=50&order=desc`, (data) => {
if (data.Lines == 0){
$(`.message${version_name} #header`).text('您已翻阅至日志底部')
$(`.message${version_name}`).css('display', 'block')
@@ -724,8 +725,14 @@ td, th {
$(`.message${version_name}`).css('display', 'none')
}, 1000)
}else{
$(`#log${version_name} input[name=end_line]`).val(data.EndLine)
$(`#log${version_name}`).append('<pre>' + data.Content)
if(end_line===data.EndLine){
return
}
else{
$(`#log${version_name} input[name=end_line]`).val(data.EndLine)
$(`#log${version_name}`).append('<pre>' + data.Content)
}
}
}).fail(function(err) {
console.log(err);
@@ -733,7 +740,7 @@ td, th {
}
if(scrollTop == 0){
let start_line = $(`#log${version_name} input[name=start_line]`).val()
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${start_line}&order=asc`, (data) => {
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${start_line}&lines=50&order=asc`, (data) => {
if (data.Lines == 0){
$(`.message${version_name} #header`).text('您已翻阅至日志顶部')
$(`.message${version_name}`).css('display', 'block')


Loading…
Cancel
Save