Browse Source

update

pull/655/head
zhoupzh 3 years ago
parent
commit
204d8ffe30
6 changed files with 84 additions and 49 deletions
  1. +16
    -3
      options/locale/locale_en-US.ini
  2. +14
    -3
      options/locale/locale_zh-CN.ini
  3. +1
    -0
      routers/api/v1/repo/modelarts.go
  4. +7
    -7
      templates/repo/cloudbrain/index.tmpl
  5. +6
    -6
      templates/repo/modelarts/notebook/index.tmpl
  6. +40
    -30
      templates/repo/modelarts/trainjob/index.tmpl

+ 16
- 3
options/locale/locale_en-US.ini View File

@@ -755,6 +755,15 @@ unit_disabled = The site administrator has disabled this repository section.
language_other = Other language_other = Other
datasets = Datasets datasets = Datasets
datasets.desc = Enable Dataset datasets.desc = Enable Dataset

debug=Debug
stop=Stop
delete=Delete
model_download=Model Download
submit_image=Submit Image
download=Download


cloudbrain=cloudbrain cloudbrain=cloudbrain
cloudbrain.new=New cloudbrain cloudbrain.new=New cloudbrain
cloudbrain.desc=cloudbrain cloudbrain.desc=cloudbrain
@@ -777,9 +786,13 @@ cloudbrain_status_createtime = Status/Createtime
cloudbrain_status_runtime = Running Time cloudbrain_status_runtime = Running Time




modelarts.notebook=Debug Job
modelarts.train_job=Create Job
modelarts.train_job.new=New Job
modelarts.notebook=Debug Task
modelarts.train_job=Create Task
modelarts.train_job.new_debug= New Debug Task
modelarts.train_job.new_train=New Train Task



modelarts.train_job.basic_info=Basic Info modelarts.train_job.basic_info=Basic Info
modelarts.train_job.job_status=Job Status modelarts.train_job.job_status=Job Status
modelarts.train_job.job_name=Job Name modelarts.train_job.job_name=Job Name


+ 14
- 3
options/locale/locale_zh-CN.ini View File

@@ -757,6 +757,14 @@ unit_disabled=站点管理员已禁用此项目单元。
language_other=其它 language_other=其它
datasets=数据集 datasets=数据集
datasets.desc=数据集功能 datasets.desc=数据集功能

debug=调试
stop=停止
delete=删除
model_download=模型下载
submit_image=提交镜像
download=模型下载

cloudbrain=云脑 cloudbrain=云脑
cloudbrain.new=新建任务 cloudbrain.new=新建任务
cloudbrain.desc=云脑功能 cloudbrain.desc=云脑功能
@@ -779,9 +787,12 @@ cloudbrain_status_createtime=状态/创建时间
cloudbrain_status_runtime = 运行时长 cloudbrain_status_runtime = 运行时长
cloudbrain_jobname_err=只能以小写字母或数字开头且只包含小写字母、数字、_和-,不能以_结尾,最长36个字符。 cloudbrain_jobname_err=只能以小写字母或数字开头且只包含小写字母、数字、_和-,不能以_结尾,最长36个字符。


modelarts.notebook=调试作业
modelarts.train_job=训练作业
modelarts.train_job.new=新建作业
modelarts.notebook=调试任务
modelarts.train_job=训练任务
modelarts.train_job.new_debug=新建调试任务
modelarts.train_job.new_train=新建训练任务


modelarts.train_job.basic_info=基本信息 modelarts.train_job.basic_info=基本信息
modelarts.train_job.job_status=作业状态 modelarts.train_job.job_status=作业状态
modelarts.train_job.job_name=作业名称 modelarts.train_job.job_name=作业名称


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

@@ -74,6 +74,7 @@ func GetModelArtsTrainJob(ctx *context.APIContext) {
ctx.JSON(http.StatusOK, map[string]interface{}{ ctx.JSON(http.StatusOK, map[string]interface{}{
"JobID": jobID, "JobID": jobID,
"JobStatus": job.Status, "JobStatus": job.Status,
"JobDuration": job.Duration,
}) })


} }


+ 7
- 7
templates/repo/cloudbrain/index.tmpl View File

@@ -239,7 +239,7 @@


<div class="column"> <div class="column">
<div class="ui blue small menu compact selectcloudbrain"> <div class="ui blue small menu compact selectcloudbrain">
<a class="active item">调试任务</a>
<a class="active item">{{$.i18n.Tr "repo.modelarts.notebook"}}</a>
<!-- <a class="item" href="{{.RepoLink}}/modelarts">训练任务</a> --> <!-- <a class="item" href="{{.RepoLink}}/modelarts">训练任务</a> -->
</div> </div>
</div> </div>
@@ -255,7 +255,7 @@
</div> </div>
</div> </div>
<a class="ui green button" href="{{.RepoLink}}/cloudbrain/create">新建调试任务</a>
<a class="ui green button" href="{{.RepoLink}}/cloudbrain/create">{{$.i18n.Tr "repo.modelarts.train_job.new_debug"}}</a>
</div> </div>
</div> </div>


@@ -358,25 +358,25 @@


<!-- 调试 --> <!-- 调试 -->
<a id="model-debug-{{.JobID}}" class="ui basic {{if not .CanDebug}}disabled {{else}}blue {{end}}button" href="{{$.Link}}/{{.JobID}}/debug" target="_blank"> <a id="model-debug-{{.JobID}}" class="ui basic {{if not .CanDebug}}disabled {{else}}blue {{end}}button" href="{{$.Link}}/{{.JobID}}/debug" target="_blank">
调试
{{$.i18n.Tr "repo.debug"}}
</a> </a>
<form id="stopForm-{{.JobID}}" action="{{$.Link}}/{{.JobID}}/stop" method="post" style="margin-left:-1px;"> <form id="stopForm-{{.JobID}}" action="{{$.Link}}/{{.JobID}}/stop" method="post" style="margin-left:-1px;">
{{$.CsrfTokenHtml}} {{$.CsrfTokenHtml}}
<a id="stop-model-debug-{{.JobID}}" class="ui basic {{if or (eq .Status "STOPPED") (eq .Status "FAILED")}}disabled {{else}}blue {{end}}button" onclick="document.getElementById('stopForm-{{.JobID}}').submit();"> <a id="stop-model-debug-{{.JobID}}" class="ui basic {{if or (eq .Status "STOPPED") (eq .Status "FAILED")}}disabled {{else}}blue {{end}}button" onclick="document.getElementById('stopForm-{{.JobID}}').submit();">
停止
{{$.i18n.Tr "repo.stop"}}
</a> </a>
</form> </form>
</div> </div>
<div class="ui compact buttons" style="margin-right:10px;"> <div class="ui compact buttons" style="margin-right:10px;">
<!-- 模型下载 --> <!-- 模型下载 -->
<a class="ui basic blue button" href="{{$.Link}}/{{.JobID}}/models" target="_blank"> <a class="ui basic blue button" href="{{$.Link}}/{{.JobID}}/models" target="_blank">
模型下载
{{$.i18n.Tr "repo.download"}}
</a> </a>
<!-- 接收结果 --> <!-- 接收结果 -->
<iframe src="" frameborder="0" name="iframeContent" style="display: none;"></iframe> <iframe src="" frameborder="0" name="iframeContent" style="display: none;"></iframe>
<a id="model-image-{{.JobID}}" class="imageBtn ui basic {{if not .CanDebug}}disabled {{else}}blue {{end}}button" value="{{.CanDebug}}">提交镜像</a>
<a id="model-image-{{.JobID}}" class="imageBtn ui basic {{if not .CanDebug}}disabled {{else}}blue {{end}}button" value="{{.CanDebug}}">{{$.i18n.Tr "repo.submit_image"}}</a>


</div> </div>
@@ -384,7 +384,7 @@
<form class="ui compact buttons" id="delForm-{{.JobID}}" action="{{$.Link}}/{{.JobID}}/del" method="post"> <form class="ui compact buttons" id="delForm-{{.JobID}}" action="{{$.Link}}/{{.JobID}}/del" method="post">
{{$.CsrfTokenHtml}} {{$.CsrfTokenHtml}}
<a id="model-delete-{{.JobID}}" class="ui compact {{if not .CanDel}}disabled {{else}}red {{end}}button" onclick="assertDelete(this)" style="border-radius: .28571429rem;"> <a id="model-delete-{{.JobID}}" class="ui compact {{if not .CanDel}}disabled {{else}}red {{end}}button" onclick="assertDelete(this)" style="border-radius: .28571429rem;">
删除
{{$.i18n.Tr "repo.delete"}}
</a> </a>
</form> </form>


+ 6
- 6
templates/repo/modelarts/notebook/index.tmpl View File

@@ -208,8 +208,8 @@


<div class="column"> <div class="column">
<div class="ui blue small menu compact selectcloudbrain"> <div class="ui blue small menu compact selectcloudbrain">
<a class="active item" href="{{.RepoLink}}/modelarts/notebook">调试任务</a>
<a class="item" href="{{.RepoLink}}/modelarts/train-job">训练任务</a>
<a class="active item" href="{{.RepoLink}}/modelarts/notebook">{{$.i18n.Tr "repo.modelarts.notebook"}}</a>
<a class="item" href="{{.RepoLink}}/modelarts/train-job">{{$.i18n.Tr "repo.modelarts.train_job"}}</a>
</div> </div>
</div> </div>
<div class="column right aligned"> <div class="column right aligned">
@@ -224,7 +224,7 @@
</div> </div>
</div> </div>
<a class="ui green button" href="{{.RepoLink}}/modelarts/notebook/create">新建调试任务</a>
<a class="ui green button" href="{{.RepoLink}}/modelarts/notebook/create">{{$.i18n.Tr "repo.modelarts.train_job.new_debug"}}</a>
</div> </div>
</div> </div>


@@ -311,12 +311,12 @@
查看 查看
</a> --> </a> -->
<a id="model-debug-{{.JobID}}" style="margin-right: 2rem;" class="ui basic {{if not .CanDebug}}disabled {{else}}blue {{end}}button" href="{{$.Link}}/{{.JobID}}/debug" target="_blank"> <a id="model-debug-{{.JobID}}" style="margin-right: 2rem;" class="ui basic {{if not .CanDebug}}disabled {{else}}blue {{end}}button" href="{{$.Link}}/{{.JobID}}/debug" target="_blank">
调试
{{$.i18n.Tr "repo.debug"}}
</a> </a>
<form id="stopForm-{{.JobID}}" action="{{$.Link}}/{{.JobID}}/stop" method="post" style="margin-left:-1px;"> <form id="stopForm-{{.JobID}}" action="{{$.Link}}/{{.JobID}}/stop" method="post" style="margin-left:-1px;">
{{$.CsrfTokenHtml}} {{$.CsrfTokenHtml}}
<a id="stop-model-debug-{{.JobID}}" style="margin-right: 2rem;" class="ui basic {{if or (eq .Status "STOPPED") (eq .Status "FAILED")}}disabled {{else}}blue {{end}}button" onclick="document.getElementById('stopForm-{{.JobID}}').submit();"> <a id="stop-model-debug-{{.JobID}}" style="margin-right: 2rem;" class="ui basic {{if or (eq .Status "STOPPED") (eq .Status "FAILED")}}disabled {{else}}blue {{end}}button" onclick="document.getElementById('stopForm-{{.JobID}}').submit();">
停止
{{$.i18n.Tr "repo.stop"}}
</a> </a>
</form> </form>
</div> </div>
@@ -337,7 +337,7 @@
<form class="ui compact buttons" id="delForm-{{.JobID}}" action="{{$.Link}}/{{.JobID}}/del" method="post"> <form class="ui compact buttons" id="delForm-{{.JobID}}" action="{{$.Link}}/{{.JobID}}/del" method="post">
{{$.CsrfTokenHtml}} {{$.CsrfTokenHtml}}
<a id="model-delete-{{.JobID}}" class="ui compact {{if eq .Status "RUNNING"}}disabled {{else}}red {{end}}button" onclick="assertDelete(this)" style="border-radius: .28571429rem;"> <a id="model-delete-{{.JobID}}" class="ui compact {{if eq .Status "RUNNING"}}disabled {{else}}red {{end}}button" onclick="assertDelete(this)" style="border-radius: .28571429rem;">
删除
{{$.i18n.Tr "repo.delete"}}
</a> </a>
</form> </form>
</div> </div>


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

@@ -231,8 +231,8 @@


<div class="column"> <div class="column">
<div class="ui blue small menu compact selectcloudbrain"> <div class="ui blue small menu compact selectcloudbrain">
<a class="item" href="{{.RepoLink}}/modelarts/notebook">调试任务</a>
<a class="active item" href="{{.RepoLink}}/modelarts/train-job">训练任务</a>
<a class="item" href="{{.RepoLink}}/modelarts/notebook">{{$.i18n.Tr "repo.modelarts.notebook"}}</a>
<a class="active item" href="{{.RepoLink}}/modelarts/train-job">{{$.i18n.Tr "repo.modelarts.train_job"}}</a>
</div> </div>
</div> </div>
<div class="column right aligned"> <div class="column right aligned">
@@ -247,7 +247,7 @@
</div> </div>
</div> </div>
<a class="ui green button" href="{{.RepoLink}}/modelarts/train-job/create">新建训练任务</a>
<a class="ui green button" href="{{.RepoLink}}/modelarts/train-job/create">{{$.i18n.Tr "repo.modelarts.train_job.new_train"}}</a>
</div> </div>
</div> </div>


@@ -283,13 +283,13 @@
<div class="three wide column"> <div class="three wide column">
<span>{{$.i18n.Tr "repo.cloudbrain_status_createtime"}}</span> <span>{{$.i18n.Tr "repo.cloudbrain_status_createtime"}}</span>
</div> </div>
<div class="three wide column">
<div class="two wide column">
<span>{{$.i18n.Tr "repo.cloudbrain_status_runtime"}}</span> <span>{{$.i18n.Tr "repo.cloudbrain_status_runtime"}}</span>
</div> </div>
<div class="one wide column text center"> <div class="one wide column text center">
<span>{{$.i18n.Tr "repo.cloudbrain_creator"}}</span> <span>{{$.i18n.Tr "repo.cloudbrain_creator"}}</span>
</div> </div>
<div class="four wide column text center">
<div class="five wide column text center">
<span>{{$.i18n.Tr "repo.cloudbrain_operate"}}</span> <span>{{$.i18n.Tr "repo.cloudbrain_operate"}}</span>
</div> </div>


@@ -323,13 +323,13 @@
<span style="font-size: 12px;margin-left: 0.4rem;" class="">{{TimeSinceUnix .Cloudbrain.CreatedUnix $.Lang}}</span> <span style="font-size: 12px;margin-left: 0.4rem;" class="">{{TimeSinceUnix .Cloudbrain.CreatedUnix $.Lang}}</span>
</div> </div>


<div class="three wide column">
<div class="two wide column">
<!--任务状态 --> <!--任务状态 -->
<!-- <span class="ui compact button job-status" id="{{.JobID}}" data-repopath="{{$.RepoRelPath}}" data-jobid="{{.JobID}}"> <!-- <span class="ui compact button job-status" id="{{.JobID}}" data-repopath="{{$.RepoRelPath}}" data-jobid="{{.JobID}}">
{{.Status}} {{.Status}}
</span> --> </span> -->
<span>{{.TrainJobDuration}}</span>
<span id="duration-{{.JobID}}"></span>
<!-- 任务创建时间 --> <!-- 任务创建时间 -->
<!-- <span style="font-size: 12px;margin-left: 0.4rem;" class="">{{TimeSinceUnix .Cloudbrain.CreatedUnix $.Lang}}</span> --> <!-- <span style="font-size: 12px;margin-left: 0.4rem;" class="">{{TimeSinceUnix .Cloudbrain.CreatedUnix $.Lang}}</span> -->
@@ -343,7 +343,7 @@
{{end}} {{end}}
</div> </div>


<div class="four wide column text right">
<div class="five wide column text right">
<div class="ui compact buttons"> <div class="ui compact buttons">
<!-- <a class="ui basic blue button" href="{{$.Link}}/{{.JobID}}"> <!-- <a class="ui basic blue button" href="{{$.Link}}/{{.JobID}}">
查看 查看
@@ -354,14 +354,14 @@
<form id="stopForm-{{.JobID}}" action="{{$.Link}}/{{.JobID}}/stop" method="post" style="margin-left:-1px;"> <form id="stopForm-{{.JobID}}" action="{{$.Link}}/{{.JobID}}/stop" method="post" style="margin-left:-1px;">
{{$.CsrfTokenHtml}} {{$.CsrfTokenHtml}}
<a id="stop-model-debug-{{.JobID}}" class="ui basic {{if or (eq .Status "KILLED") (eq .Status "FAILED")}}disabled {{else}}blue {{end}}button" onclick="document.getElementById('stopForm-{{.JobID}}').submit();"> <a id="stop-model-debug-{{.JobID}}" class="ui basic {{if or (eq .Status "KILLED") (eq .Status "FAILED")}}disabled {{else}}blue {{end}}button" onclick="document.getElementById('stopForm-{{.JobID}}').submit();">
停止
{{$.i18n.Tr "repo.stop"}}
</a> </a>
</form> </form>
</div> </div>
<div class="ui compact buttons" style="margin-right:10px;"> <div class="ui compact buttons" style="margin-right:10px;">
<!-- 模型下载 --> <!-- 模型下载 -->
<a class="ui basic blue button" href="{{$.Link}}/{{.JobID}}/models" target="_blank"> <a class="ui basic blue button" href="{{$.Link}}/{{.JobID}}/models" target="_blank">
模型下载
{{$.i18n.Tr "repo.model_download"}}
</a> </a>
<!-- 接收结果 --> <!-- 接收结果 -->
@@ -373,7 +373,7 @@
<form class="ui compact buttons" id="delForm-{{.JobID}}" action="{{$.Link}}/{{.JobID}}/del" method="post"> <form class="ui compact buttons" id="delForm-{{.JobID}}" action="{{$.Link}}/{{.JobID}}/del" method="post">
{{$.CsrfTokenHtml}} {{$.CsrfTokenHtml}}
<a id="model-delete-{{.JobID}}" class="ui compact {{if eq .Status "RUNNING" }}disabled {{else}}red {{end}}button" onclick="assertDelete(this)" style="border-radius: .28571429rem;"> <a id="model-delete-{{.JobID}}" class="ui compact {{if eq .Status "RUNNING" }}disabled {{else}}red {{end}}button" onclick="assertDelete(this)" style="border-radius: .28571429rem;">
删除
{{$.i18n.Tr "repo.delete"}}
</a> </a>
</form> </form>
</div> </div>
@@ -456,7 +456,31 @@
.modal('show') .modal('show')
} }
} }
function runtime(time){
if(time){
let hours = time/3600000<10 ? "0"+parseInt(time/3600000):parseInt(time/3600000)
let miuns = time%3600000/60000<10 ? "0"+parseInt(time%3600000/60000):parseInt(time%3600000/60000)
let seconds = time%60000/1000<10 ? "0"+parseInt(time%60000/1000):parseInt(time%60000/1000)
return hours + ":" + miuns + ":" + seconds
}else{
return "00:00:00"
}
}


function loadJobDuration() {
$(".job-status").each((index, job) => {
const jobID = job.dataset.jobid;
const repoPath = job.dataset.repopath;
$.get(`/api/v1/repos/${repoPath}/modelarts/train-job/${jobID}`, (data) => {
const duration = data.JobDuration
const jobID = data.JobID
let train_duration = runtime(duration)
$('#duration-'+jobID).text(train_duration)
})
})
}
$(document).ready(loadJobDuration);
// 加载任务状态 // 加载任务状态
var timeid = window.setInterval(loadJobStatus, 15000); var timeid = window.setInterval(loadJobStatus, 15000);
$(document).ready(loadJobStatus); $(document).ready(loadJobStatus);
@@ -464,6 +488,7 @@
$(".job-status").each((index, job) => { $(".job-status").each((index, job) => {
const jobID = job.dataset.jobid; const jobID = job.dataset.jobid;
const repoPath = job.dataset.repopath; const repoPath = job.dataset.repopath;
if (job.textContent.trim() == 'IMAGE_FAILED' || job.textContent.trim() == 'SUBMIT_FAILED' || job.textContent.trim() == 'DELETE_FAILED' if (job.textContent.trim() == 'IMAGE_FAILED' || job.textContent.trim() == 'SUBMIT_FAILED' || job.textContent.trim() == 'DELETE_FAILED'
|| job.textContent.trim() == 'KILLED' || job.textContent.trim() == 'COMPLETED' || job.textContent.trim() == 'FAILED' || job.textContent.trim() == 'KILLED' || job.textContent.trim() == 'COMPLETED' || job.textContent.trim() == 'FAILED'
|| job.textContent.trim() == 'CANCELED' || job.textContent.trim() == 'LOST') { || job.textContent.trim() == 'CANCELED' || job.textContent.trim() == 'LOST') {
@@ -473,32 +498,17 @@
$.get(`/api/v1/repos/${repoPath}/modelarts/train-job/${jobID}`, (data) => { $.get(`/api/v1/repos/${repoPath}/modelarts/train-job/${jobID}`, (data) => {
const jobID = data.JobID const jobID = data.JobID
const status = data.JobStatus const status = data.JobStatus
function runtime(){
if(time){
let hours = time/3600000<10 ? time/3600000+"0":time/3600000
let miuns = time%3600000/60000<10 ? time%3600000/60000+"0":time%3600000/60000
let seconds = time%60000/1000<10 ? time%60000/1000<10+"0":time%60000/1000<10
return hours + ":" + miuns + ":" + seconds
}else{
return "00:00:00"
}
}
const duration = data.JobDuration
if (status != job.textContent.trim()) { if (status != job.textContent.trim()) {
$('#' + jobID+'-icon').removeClass().addClass(status) $('#' + jobID+'-icon').removeClass().addClass(status)
$('#' + jobID+ '-text').text(status) $('#' + jobID+ '-text').text(status)
//if (status == 'STOPPED') {
// window.location.reload()
//}

} }
if(status==="RUNNING"){ if(status==="RUNNING"){
$('#model-debug-'+jobID).removeClass('disabled') $('#model-debug-'+jobID).removeClass('disabled')
$('#model-debug-'+jobID).addClass('blue') $('#model-debug-'+jobID).addClass('blue')
// let TrainDuration = runtime(time)
// $('#model-duration').text(TrainDuration)

let train_duration = runtime(duration)
$('#duration-'+jobID).text(train_duration)


} }
if(status!=="RUNNING"){ if(status!=="RUNNING"){


Loading…
Cancel
Save