Browse Source

bread modelload

pull/883/head
zhoupzh 3 years ago
parent
commit
c4e9610929
5 changed files with 163 additions and 18 deletions
  1. +1
    -0
      options/locale/locale_en-US.ini
  2. +3
    -1
      options/locale/locale_zh-CN.ini
  3. +1
    -1
      templates/repo/modelarts/trainjob/new.tmpl
  4. +152
    -16
      templates/repo/modelarts/trainjob/show.tmpl
  5. +6
    -0
      templates/repo/modelarts/trainjob/version_new.tmpl

+ 1
- 0
options/locale/locale_en-US.ini View File

@@ -846,6 +846,7 @@ modelarts.train_job.start_file=Start File
modelarts.train_job.boot_file_helper=The startup file is the entry file that your program executes, and it must be a file ending in .py modelarts.train_job.boot_file_helper=The startup file is the entry file that your program executes, and it must be a file ending in .py
modelarts.train_job.dataset=Dataset modelarts.train_job.dataset=Dataset
modelarts.code_version = Code Version modelarts.code_version = Code Version
modelarts.parents_version = Parents Version
modelarts.train_job.run_parameter=Run Parameter modelarts.train_job.run_parameter=Run Parameter
modelarts.train_job.add_run_parameter=Add Run Parameter modelarts.train_job.add_run_parameter=Add Run Parameter
modelarts.train_job.parameter_name=Parameter Name modelarts.train_job.parameter_name=Parameter Name


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

@@ -849,7 +849,9 @@ modelarts.train_job.start_file=启动文件
modelarts.train_job.boot_file_helper=启动文件是您程序执行的入口文件,必须是以.py结尾的文件。 modelarts.train_job.boot_file_helper=启动文件是您程序执行的入口文件,必须是以.py结尾的文件。
modelarts.train_job.boot_file_place=填写启动文件路径,默认为train.py modelarts.train_job.boot_file_place=填写启动文件路径,默认为train.py
modelarts.train_job.dataset=数据集 modelarts.train_job.dataset=数据集
modelarts.code_version=代码版本
modelarts.code_version=代码分支
modelarts.parents_version=基于版本

modelarts.train_job.run_parameter=运行参数 modelarts.train_job.run_parameter=运行参数
modelarts.train_job.add_run_parameter=增加运行参数 modelarts.train_job.add_run_parameter=增加运行参数
modelarts.train_job.parameter_name=参数名 modelarts.train_job.parameter_name=参数名


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

@@ -172,7 +172,7 @@


<div class="required unite min_title inline field"> <div class="required unite min_title inline field">
<label>{{.i18n.Tr "repo.modelarts.code_version"}}</label> <label>{{.i18n.Tr "repo.modelarts.code_version"}}</label>
<select class="ui dropdown width80" id="code_version" name="branch_name">
<select class="ui dropdown width80 " style="margin-left: -2px;" id="code_version" name="branch_name">
{{range $k, $v :=.Branches}} {{range $k, $v :=.Branches}}
<option name="branch_name" value="{{$v}}">{{$v}}</option> <option name="branch_name" value="{{$v}}">{{$v}}</option>
{{end}} {{end}}


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

@@ -149,7 +149,16 @@ td, th {
pointer-events: none; pointer-events: none;
color: rgba(0,0,0,.6) !important; color: rgba(0,0,0,.6) !important;
opacity: .45 !important; opacity: .45 !important;
}
}
.pad20{
border:0px !important;
}
.model_file_bread{
margin-bottom: -0.5rem !important;
padding-left: 1rem;
padding-top: 0.5rem ;
}
</style> </style>
<div class="repository"> <div class="repository">
{{template "repo/header" .}} {{template "repo/header" .}}
@@ -195,7 +204,7 @@ td, th {
<div class="ui pointing secondary menu"> <div class="ui pointing secondary menu">
<a class="active item" data-tab="first{{$k}}">配置信息</a> <a class="active item" data-tab="first{{$k}}">配置信息</a>
<a class="item" data-tab="second{{$k}}" onclick="loadLog({{.VersionName}})">日志文件</a> <a class="item" data-tab="second{{$k}}" onclick="loadLog({{.VersionName}})">日志文件</a>
<!-- <a class="item" data-tab="third{{$k}}" href="{{$.Link}}/models?version_name={{.VersionName}}" target="_blank">模型下载</a> -->
<a class="item" data-tab="third{{$k}}" onclick="loadModelFile({{.VersionName}},'','true')" target="_blank">模型下载</a>
</div> </div>
<div class="ui tab active" data-tab="first{{$k}}"> <div class="ui tab active" data-tab="first{{$k}}">
<div style="padding-top: 10px;"> <div style="padding-top: 10px;">
@@ -300,7 +309,7 @@ td, th {
</tr> </tr>
<tr class="ti-no-ng-animate"> <tr class="ti-no-ng-animate">
<td class="ti-no-ng-animate ti-text-form-label text-width80"> <td class="ti-no-ng-animate ti-text-form-label text-width80">
代码分支
{{$.i18n.Tr "repo.modelarts.code_version"}}
</td> </td>
<td class="ti-text-form-content"> <td class="ti-text-form-content">
@@ -397,11 +406,15 @@ td, th {
</div> </div>
</div> </div>
<!-- <div class="ui tab" data-tab="third{{$k}}">
<div>
<div class="ui tab" data-tab="third{{$k}}">
<div class='ui breadcrumb model_file_bread' id='file_breadcrumb'>


</div>
<div id="dir_list">
</div> </div>
</div> -->
</div>


</div> </div>
</div> </div>
@@ -464,9 +477,12 @@ td, th {
} }
// var timeid = window.setInterval(refreshStatus(version_name), 30000); // var timeid = window.setInterval(refreshStatus(version_name), 30000);
// document.ready(refreshStatus(version_name)) // document.ready(refreshStatus(version_name))
var timeid = window.setInterval(loadJobStatus, 10000);
$(document).ready(loadJobStatus);


function loadJobStatus() { function loadJobStatus() {
$(".ui.accordion.border-according").each((index, job) => { $(".ui.accordion.border-according").each((index, job) => {
const jobID = job.dataset.jobid; const jobID = job.dataset.jobid;
const repoPath = job.dataset.repopath; const repoPath = job.dataset.repopath;
const versionname = job.dataset.version const versionname = job.dataset.version
@@ -477,9 +493,15 @@ td, th {
} }


$.get(`/api/v1/repos/${repoPath}/modelarts/train-job/${jobID}?version_name=${versionname}`, (data) => { $.get(`/api/v1/repos/${repoPath}/modelarts/train-job/${jobID}?version_name=${versionname}`, (data) => {
const jobID = data.JobID
const status = data.JobStatus
const duration = data.JobDuration
// const jobID = data.JobID
// const status = data.JobStatus
// const duration = data.JobDuration
$(`#${versionname}-duration-span`).text(data.JobDuration)
$(`#${versionname}-status-span span`).text(data.JobStatus)
$(`#${versionname}-status-span i`).attr("class",data.JobStatus)
// detail status and duration
$('#'+versionname+'-duration').text(data.JobDuration)
$('#'+versionname+'-status').text(data.JobStatus)
// $('#duration-'+jobID).text(duration) // $('#duration-'+jobID).text(duration)
// if (status != job.textContent.trim()) { // if (status != job.textContent.trim()) {
// $('#' + jobID+'-icon').removeClass().addClass(status) // $('#' + jobID+'-icon').removeClass().addClass(status)
@@ -553,13 +575,127 @@ td, th {
console.log(err); console.log(err);
}); });
} }
// function loadModelFile(version_name){
// $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/model_list?version_name=${version_name}&lines=20&order=asc`, (data) => {
// console.log(data)
// }).fail(function(err) {
// console.log(err);
// });
// }
function loadModelFile(version_name,parents,filename){
console.log("")
parents = parents || ''
filename = filename || ''
$.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/model_list?version_name=${version_name}&parentDir=${parents}`, (data) => {
console.log("=====parents======",data,version_name,parents)
if(!filename){
console.log("bread")
$("#dir_list").empty()
renderDir(data,version_name)
renderBrend(version_name,parents,filename,false)
}else{
$("#dir_list").empty()
renderDir(data,version_name)
renderBrend(version_name,parents,filename,true)
}
}).fail(function(err) {
console.log(err,version_name);
});
// if(!parents){
// $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/model_list?version_name=${version_name}`, (data) => {
// console.log("===========",data,version_name)
// $("#dir_list").empty()
// renderDir(data,version_name)
// }).fail(function(err) {
// console.log(err);
// });
// }else{
// console.log("-----else-----",version_name)
// }
}
let parentsArr=[]
function renderBrend(version_name,parents,filename,flag){
if(flag){
parentsArr.push(parents)
console.log("parents parentsARR",parents,parentsArr)
let htmlBrend = ""
if($('#file_breadcrumb .active').length>0){
let parents1 = parentsArr.shift()
let sectionName=$('#file_breadcrumb .active.section').html()
$('#file_breadcrumb .active.section').replaceWith(`<a class='section' onclick="loadModelFile('${version_name}','${parents1}')">${sectionName}</a>`)
htmlBrend += `<div class='active section'>${filename}</div>`


}else{
htmlBrend += `<div class='active section'>${version_name}</div>`
}
console.log("parentsARR",parentsArr)
htmlBrend += "<div class='divider'> / </div>"
$('#file_breadcrumb').append(htmlBrend)

}else{
if(!parents){
$('#file_breadcrumb').empty()
let htmlBread = ""
htmlBread += `<div class='active section'>${version_name}</div>`
htmlBread += "<div class='divider'> / </div>"
$('#file_breadcrumb').append(htmlBread)
}else{
$(`a.section:contains(${parents})`).nextAll().remove()
$(`a.section:contains(${parents})`).replaceWith(`<div class='active section'>${parents}</div>`)
$(`a.section:contains(${parents})`).append("<div class='divider'> / </div>")

}
}
}
function renderDir(data,version_name){
let html=""
html += "<div class='ui grid' style='margin:0;'>"
html += "<div class='row' style='padding: 0;'>"
html += "<div class='ui sixteen wide column' style='padding:1rem;'>"
html += "<div class='dir list'>"
html += "<table id='repo-files-table' class='ui single line table pad20'>"
html += '<tbody>'
// html += "</tbody>"
for(let i=0;i<data.Dirs.length;i++){
html += "<tr>"
html += "<td class='name six wid'>"
html += "<span class='truncate'>"
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].FileName}')">`
html += "<span class='fitted'><i class='folder icon' width='16' height='16' aria-hidden='true'></i>" + data.Dirs[i].FileName + "</span>"
}else{
html += `<a href='${location.href}/download_model?parentDir=&fileName=${data.Dirs[i].FileName}&jobName=${data.task.JobName}'>`
html += "<span class='fitted'><i class='file icon' width='16' height='16' aria-hidden='true'></i>" + data.Dirs[i].FileName + "</span>"
}
html += '</a>'
html += "</span>"
html += "</td>"
html += "<td class='message seven wide'>"
html += "<span class='truncate has-emoji'>" + data.Dirs[i].Size + "</span>"
html += "</td>"

html += "<td class='text right age three wide'>"
html += "<span class='truncate has-emoji'>" + data.Dirs[i].ModTime + "</span>"
html += "</td>"
html += "</tr>"
}
html += "</tbody>"
html += "</table>"
html += "</div>"
html += "</div>"
html += "</div>"
html += "</div>"
$("#dir_list").append(html)
}
$(".log").scroll(function () { $(".log").scroll(function () {
var scrollTop = $(this)[0].scrollTop; // 滚动距离 var scrollTop = $(this)[0].scrollTop; // 滚动距离
var scrollHeight = $(this)[0].scrollHeight; // 文档高度 var scrollHeight = $(this)[0].scrollHeight; // 文档高度


+ 6
- 0
templates/repo/modelarts/trainjob/version_new.tmpl View File

@@ -165,6 +165,11 @@
<input type="hidden" style="width: 60%;" name="job_name" id="trainjob_job_name" value="{{.job_name}}"> <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 > <input style="width: 60%;" value="{{.job_name}}" tabindex="3" disabled >
</div> </div>
<div class="required unite min_title inline field">
<label>{{.i18n.Tr "repo.modelarts.parents_version"}}</label>
<input id="parents_version" style="width: 60%;" value="" tabindex="3" disabled >
</div>
<div class="unite min_title inline field"> <div class="unite min_title inline field">
<label for="description">{{.i18n.Tr "repo.modelarts.train_job.description"}}&nbsp;&nbsp;</label> <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> <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>
@@ -336,6 +341,7 @@
let url_href = {{.RepoLink}}+'/modelarts/train-job' let url_href = {{.RepoLink}}+'/modelarts/train-job'
let url_post = location.pathname let url_post = location.pathname
let version_name = location.search.split('?version_name=')[1] let version_name = location.search.split('?version_name=')[1]
$("#parents_version").val(version_name)
$(".ui.button").attr('href',url_href) $(".ui.button").attr('href',url_href)
$(".ui.form").attr('action',url_post) $(".ui.form").attr('action',url_post)
$("input[name=version_name]").attr('value',version_name) $("input[name=version_name]").attr('value',version_name)


Loading…
Cancel
Save