Reviewed-on: https://git.openi.org.cn/OpenI/aiforge/pulls/2494 Reviewed-by: chenshihai <chenshh@pcl.ac.cn>pull/2503/head
@@ -69,6 +69,7 @@ type CreateCloudBrainInferencForm struct { | |||
ModelName string `form:"model_name" binding:"Required"` | |||
ModelVersion string `form:"model_version" binding:"Required"` | |||
CkptName string `form:"ckpt_name" binding:"Required"` | |||
LabelName string `form:"label_names" binding:"Required"` | |||
} | |||
func (f *CreateCloudBrainForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | |||
@@ -78,6 +78,7 @@ type GenerateCloudBrainTaskReq struct { | |||
ModelName string | |||
ModelVersion string | |||
CkptName string | |||
LabelName string | |||
} | |||
func GetCloudbrainDebugCommand() string { | |||
@@ -400,6 +401,7 @@ func GenerateTask(req GenerateCloudBrainTaskReq) error { | |||
ModelVersion: req.ModelVersion, | |||
CkptName: req.CkptName, | |||
ResultUrl: req.ResultPath, | |||
LabelName: req.LabelName, | |||
CreatedUnix: createTime, | |||
UpdatedUnix: createTime, | |||
CommitID: req.CommitID, | |||
@@ -157,15 +157,15 @@ func DelCloudBrainJob(ctx *context.APIContext) { | |||
if errStr != "" { | |||
ctx.JSON(http.StatusOK, map[string]interface{}{ | |||
"message": ctx.Tr(errStr), | |||
"Message": ctx.Tr(errStr), | |||
"VersionName": "1", | |||
"code": 1, | |||
"Code": 1, | |||
}) | |||
} else { | |||
ctx.JSON(http.StatusOK, map[string]interface{}{ | |||
"message": "", | |||
"Message": "", | |||
"VersionName": "1", | |||
"code": 0, | |||
"Code": 0, | |||
}) | |||
} | |||
@@ -380,6 +380,7 @@ func CloudBrainInferenceJobCreate(ctx *context.Context, form auth.CreateCloudBra | |||
codePath := setting.JobPath + jobName + cloudbrain.CodeMountPath | |||
resourceSpecId := form.ResourceSpecId | |||
branchName := form.BranchName | |||
labelName := form.LabelName | |||
repo := ctx.Repo.Repository | |||
ckptUrl := setting.Attachment.Minio.RealPath + form.TrainUrl + form.CkptName | |||
@@ -475,6 +476,7 @@ func CloudBrainInferenceJobCreate(ctx *context.Context, form auth.CreateCloudBra | |||
ModelVersion: form.ModelVersion, | |||
CkptName: form.CkptName, | |||
TrainUrl: form.TrainUrl, | |||
LabelName: labelName, | |||
} | |||
err = cloudbrain.GenerateTask(req) | |||
@@ -830,6 +832,8 @@ func cloudBrainShow(ctx *context.Context, tpName base.TplName, jobType models.Jo | |||
} | |||
ctx.Data["task"] = task | |||
labelName := strings.Fields(task.LabelName) | |||
ctx.Data["LabelName"] = labelName | |||
ctx.Data["jobName"] = task.JobName | |||
ctx.Data["displayJobName"] = task.DisplayJobName | |||
version_list_task := make([]*models.Cloudbrain, 0) | |||
@@ -266,7 +266,7 @@ | |||
onclick="javascript:parseInfo()">{{$.i18n.Tr "repo.cloudbrain.runinfo"}}</a> | |||
<a class="item load-model-file" data-tab="four" | |||
data-path="{{$.RepoLink}}/cloudbrain/inference-job/{{.JobID}}/result_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a> | |||
data-gpu-flag="true" data-download-flag="{{$.canDownload}}" data-path="{{$.RepoLink}}/cloudbrain/inference-job/{{.JobID}}/result_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a> | |||
</div> | |||
<div class="ui tab active" data-tab="first" style="height:400px"> | |||
<div style="padding-top: 10px;"> | |||
@@ -420,9 +420,8 @@ | |||
<td class="ti-text-form-content"> | |||
<div class="text-span text-span-w" id="{{.VersionName}}-labels"> | |||
{{if .LabelName}} | |||
{{range $.labelName}} | |||
{{range $.LabelName}} | |||
<a class="ui label" title="{{.}}">{{.}}</a> | |||
{{end}} | |||
{{else}} | |||
@@ -288,7 +288,7 @@ | |||
onclick="javascript:parseInfo()">{{$.i18n.Tr "repo.cloudbrain.runinfo"}}</a> | |||
<a class="item" data-tab="third{{$k}}" | |||
onclick="loadLog({{.VersionName}})">{{$.i18n.Tr "repo.modelarts.log"}}</a> | |||
<a class="item load-model-file" data-tab="four{{$k}}" data-path="{{$.RepoLink}}/cloudbrain/train-job/{{.JobID}}/model_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a> | |||
<a class="item load-model-file" data-tab="four{{$k}}" data-gpu-flag="true" data-download-flag="{{$.canDownload}}" data-path="{{$.RepoLink}}/cloudbrain/train-job/{{.JobID}}/model_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a> | |||
</div> | |||
<div class="ui tab active" data-tab="first{{$k}}"> | |||
<div style="padding-top: 10px;"> | |||
@@ -298,7 +298,7 @@ | |||
data-tab="first{{$k}}">{{$.i18n.Tr "repo.modelarts.train_job.config"}}</a> | |||
<a class="item" data-tab="second{{$k}}" | |||
onclick="loadLog({{.VersionName}})">{{$.i18n.Tr "repo.modelarts.log"}}</a> | |||
<a class="item load-model-file" data-tab="third{{$k}}" data-path="{{$.RepoLink}}/modelarts/train-job/{{.JobID}}/model_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a> | |||
<a class="item load-model-file" data-tab="third{{$k}}" data-download-flag="{{$.canDownload}}" data-path="{{$.RepoLink}}/modelarts/train-job/{{.JobID}}/model_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a> | |||
</div> | |||
<div class="ui tab active" data-tab="first{{$k}}"> | |||
<div style="padding-top: 10px;"> | |||
@@ -214,7 +214,7 @@ td, th { | |||
<a class="active item" data-tab="first">{{$.i18n.Tr "repo.modelarts.train_job.config"}}</a> | |||
<a class="item log_bottom" data-tab="second" data-version="{{.VersionName}}">{{$.i18n.Tr "repo.modelarts.log"}}</a> | |||
<a class="item load-model-file" data-tab="third" data-path="{{$.RepoLink}}/modelarts/inference-job/{{.JobID}}/result_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a> | |||
<a class="item load-model-file" data-tab="third" data-download-flag="{{$.canDownload}}" data-path="{{$.RepoLink}}/modelarts/inference-job/{{.JobID}}/result_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a> | |||
</div> | |||
<div class="ui tab active" data-tab="first" style="height:400px"> | |||
@@ -451,10 +451,10 @@ td, th { | |||
<div class="ui tab" data-tab="second"> | |||
<div> | |||
<a id="{{.VersionName}}-log-down" | |||
class='{{if and (.CanModify) (eq .Status "KILLED" "FAILED" "START_FAILED" "STOPPED" "COMPLETED") }}ti-download-file{{else}}disabled{{end}}' | |||
class='{{if and ($.canDownload) (eq .Status "KILLED" "FAILED" "START_FAILED" "STOPPED" "COMPLETED") }}ti-download-file{{else}}disabled{{end}}' | |||
href="{{$.RepoLink}}/modelarts/train-job/{{.JobID}}/download_log_file?version_name={{.VersionName}}"> | |||
<i class="ri-download-cloud-2-line"></i> | |||
<span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.download_log"}}</span>{{.CanModify}} | |||
<span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.download_log"}}</span> | |||
</a> | |||
</div> | |||
@@ -507,7 +507,7 @@ td, th { | |||
</div> | |||
{{template "base/footer" .}} | |||
<script> | |||
console.log('{{.CanModify}}') | |||
console.log('{{$.canDownload}}') | |||
$(document).ready(function(){ | |||
$('.secondary.menu .item').tab(); | |||
}); | |||
@@ -327,7 +327,7 @@ | |||
<a class="item log_bottom" data-tab="second{{$k}}" | |||
data-version="{{.VersionName}}">{{$.i18n.Tr "repo.modelarts.log"}}</a> | |||
<a class="item metric_chart" data-tab="four{{$k}}" data-version="{{.VersionName}}">资源占用情况</a> | |||
<a class="item load-model-file" data-tab="third{{$k}}" data-path="{{$.RepoLink}}/modelarts/train-job/{{.JobID}}/model_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a> | |||
<a class="item load-model-file" data-tab="third{{$k}}" data-download-flag="{{$.canDownload}}" data-path="{{$.RepoLink}}/modelarts/train-job/{{.JobID}}/model_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a> | |||
</div> | |||
<div class="ui tab active" data-tab="first{{$k}}"> | |||
<div style="padding-top: 10px;"> | |||
@@ -16,7 +16,6 @@ export default async function initCloudrainSow() { | |||
function logScroll(version_name) { | |||
let container = document.querySelector(`#log${version_name}`); | |||
console.log(container); | |||
let scrollTop = container.scrollTop; | |||
let scrollHeight = container.scrollHeight; | |||
let clientHeight = container.clientHeight; | |||
@@ -161,17 +160,17 @@ export default async function initCloudrainSow() { | |||
// | |||
$(".content-pad").on("click", ".load-model-file", function () { | |||
console.log("11111111111"); | |||
let downloadFlag = $(this).data("download-flag") || ""; | |||
let gpuFlag = $(this).data("gpu-flag") || ""; | |||
let version_name = $(this).data("version"); | |||
let parents = $(this).data("parents") || ""; | |||
let filename = $(this).data("filename") || ""; | |||
let init = $(this).data("init") || ""; | |||
let path = $(this).data("path"); | |||
let url = `/api/v1/repos${path}?version_name=${version_name}&parentDir=${parents}`; | |||
console.log(url); | |||
$.get(url, (data) => { | |||
$(`#dir_list${version_name}`).empty(); | |||
renderDir(path, data, version_name); | |||
renderDir(path, data, version_name, downloadFlag, gpuFlag); | |||
if (init === "init") { | |||
$(`input[name=model${version_name}]`).val(""); | |||
$(`input[name=modelback${version_name}]`).val(version_name); | |||
@@ -251,7 +250,7 @@ export default async function initCloudrainSow() { | |||
} | |||
} | |||
function renderDir(path, data, version_name) { | |||
function renderDir(path, data, version_name, downloadFlag, gpuFlag) { | |||
let html = ""; | |||
html += "<div class='ui grid' style='margin:0;'>"; | |||
html += "<div class='row' style='padding: 0;'>"; | |||
@@ -274,8 +273,20 @@ export default async function initCloudrainSow() { | |||
data.Dirs[i].FileName + | |||
"</span>"; | |||
} else { | |||
if (downlaodFlag) { | |||
html += `<a href="${location.href}/result_download?version_name=${version_name}&file_name=${data.Dirs[i].FileName}&parent_dir=${data.Dirs[i].ParenDir}">`; | |||
if (downloadFlag) { | |||
if (gpuFlag) { | |||
if (path.includes("model_list")) { | |||
html += `<a href="${location.href}/download_model?version_name=${version_name}&fileName=${data.Dirs[i].FileName}&parentDir=${data.Dirs[i].ParenDir}&jobName=${data.task.JobName}">`; | |||
} else { | |||
html += `<a href="${location.href}/result_download?version_name=${version_name}&fileName=${data.Dirs[i].FileName}&parentDir=${data.Dirs[i].ParenDir}&jobName=${data.task.JobName}">`; | |||
} | |||
} else { | |||
if (path.includes("model_list")) { | |||
html += `<a href="${location.href}/model_download?version_name=${version_name}&file_name=${data.Dirs[i].FileName}&parent_dir=${data.Dirs[i].ParenDir}">`; | |||
} else { | |||
html += `<a href="${location.href}/result_download?version_name=${version_name}&file_name=${data.Dirs[i].FileName}&parent_dir=${data.Dirs[i].ParenDir}">`; | |||
} | |||
} | |||
} else { | |||
html += `<a class="disabled">`; | |||
} | |||