|
|
|
@@ -0,0 +1,285 @@ |
|
|
|
<!-- 头部导航栏 --> |
|
|
|
{{template "base/head" .}} |
|
|
|
<!-- 弹窗 --> |
|
|
|
<div id="mask"> |
|
|
|
<div id="loadingPage"> |
|
|
|
<div class="rect1"></div> |
|
|
|
<div class="rect2"></div> |
|
|
|
<div class="rect3"></div> |
|
|
|
<div class="rect4"></div> |
|
|
|
<div class="rect5"></div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
{{$repository := .Repository.ID}} |
|
|
|
<!-- 提示框 --> |
|
|
|
<div class="alert"></div> |
|
|
|
|
|
|
|
<div class="repository release dataset-list view"> |
|
|
|
{{template "repo/header" .}} |
|
|
|
<!-- 列表容器 --> |
|
|
|
<div class="ui container {{if ne $.MODEL_COUNT 0}}active loader {{end}}" id="loadContainer"> |
|
|
|
{{template "base/alert" .}} |
|
|
|
<div class="ui two column stackable grid"> |
|
|
|
<div class="column"> |
|
|
|
<div class="ui blue small menu compact selectcloudbrain"> |
|
|
|
<a class="item" href="{{.RepoLink}}/modelmanage/show_model">{{$.i18n.Tr "repo.model.list"}}</a> |
|
|
|
<a class="active item" href="{{.RepoLink}}/modelmanage/convert_model">{{$.i18n.Tr "repo.model.convert"}}</a> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="column right aligned"> |
|
|
|
<!-- --> |
|
|
|
<a class="ui button {{if .Permission.CanWrite $.UnitTypeModelManage}} green {{else}} disabled {{end}}" onclick="showcreate(this)">{{$.i18n.Tr "repo.model.manage.create_new_convert_task"}}</a> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 中下列表展示区 --> |
|
|
|
<div class="ui grid" style="display: none;"> |
|
|
|
<div class="row" style="padding-top: 0;"> |
|
|
|
<div class="ui sixteen wide column"> |
|
|
|
<!-- 任务展示 --> |
|
|
|
<div class="dataset list" id="model_list"> |
|
|
|
|
|
|
|
<div class="ui grid stackable" style="background: #f0f0f0;;"> |
|
|
|
<div class="row"> |
|
|
|
<div class="three wide column padding0"> |
|
|
|
<span style="margin:0 6px">任务名称</span> |
|
|
|
</div> |
|
|
|
<div class="two wide column text center padding0"> |
|
|
|
<span>状态</span> |
|
|
|
</div> |
|
|
|
<div class="two wide column text center padding0"> |
|
|
|
<span>原模型框架</span> |
|
|
|
</div> |
|
|
|
<div class="two wide column text center padding0"> |
|
|
|
<span>转换后格式</span> |
|
|
|
</div> |
|
|
|
<div class="one wide column text center padding0"> |
|
|
|
<span>创建时间</span> |
|
|
|
</div> |
|
|
|
<div class="two wide column text center padding0"> |
|
|
|
<span>运行时长</span> |
|
|
|
</div> |
|
|
|
<div class="one wide column text center padding0"> |
|
|
|
<span>{{$.i18n.Tr "repo.cloudbrain_creator"}}</span> |
|
|
|
</div> |
|
|
|
<div class="three wide column text center padding0"> |
|
|
|
<span>{{$.i18n.Tr "repo.cloudbrain_operate"}}</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<!-- 表头 --> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- div full height--> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<!-- 确认模态框 --> |
|
|
|
<div id="deletemodel"> |
|
|
|
<div class="ui basic modal first"> |
|
|
|
<div class="ui icon header"> |
|
|
|
<i class="trash icon"></i> 删除模型 |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="content"> |
|
|
|
<p>你确认删除该模型转换任务么?一旦删除不可恢复。</p> |
|
|
|
</div> |
|
|
|
<div class="actions"> |
|
|
|
<div class="ui red basic inverted cancel button"> |
|
|
|
<i class="remove icon"></i> {{.i18n.Tr "cloudbrain.operate_cancel"}} |
|
|
|
</div> |
|
|
|
<div class="ui green basic inverted ok button"> |
|
|
|
<i class="checkmark icon"></i> {{.i18n.Tr "cloudbrain.operate_confirm"}} |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div id="newmodelconvert"> |
|
|
|
<div class="ui modal second"> |
|
|
|
<div class="header" style="padding: 1rem;background-color: rgba(240, 240, 240, 100);"> |
|
|
|
<h4 id="model_header"></h4> |
|
|
|
</div> |
|
|
|
<div class="content content-padding"> |
|
|
|
<form id="formId" method="POST" class="ui form"> |
|
|
|
<input type="hidden" name="initModel" value="{{$.MODEL_COUNT}}"> |
|
|
|
<div class="ui error message"> |
|
|
|
<!-- <p>asdasdasd</p> --> |
|
|
|
</div> |
|
|
|
<input type="hidden" name="_csrf" value=""> |
|
|
|
<div class="required inline field" id="task_name"> |
|
|
|
<label>任务名称</label> |
|
|
|
<input style="width: 45%;" id="name" name="Name" required maxlength="25" onkeyup="this.value=this.value.replace(/[, ]/g,'')"> |
|
|
|
</div> |
|
|
|
<div class="inline field"> |
|
|
|
<label for="description">任务描述</label> |
|
|
|
<textarea style="width: 83%;margin-left: 7px;" id="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> |
|
|
|
</div> |
|
|
|
<div class="inline fields "> |
|
|
|
<div class="required ten wide field"> |
|
|
|
<label style="margin-left: -23px;">模型</label> |
|
|
|
<div class="ui dropdown selection search width83 loading" id="choice_model"> |
|
|
|
<input type="hidden" id="ModelId" name="ModelId" required> |
|
|
|
<div class="default text">选择模型</div> |
|
|
|
<i class="dropdown icon"></i> |
|
|
|
<div class="menu" id="model-name"> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="inline fields "> |
|
|
|
<div class="required six widde field"> |
|
|
|
<label>模型版本</label> |
|
|
|
<div class="ui dropdown selection search width70" id="choice_version"> |
|
|
|
<input type="hidden" id="ModelVersion" name="ModelVersion" required> |
|
|
|
<div class="default text">选择版本</div> |
|
|
|
<i class="dropdown icon"></i> |
|
|
|
<div class="menu" id="model-version"> |
|
|
|
|
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="inline fields "> |
|
|
|
<div class="required six widde field"> |
|
|
|
<label>原模型框架</label> |
|
|
|
<div class="ui dropdown selection search width70" id="choice_engine"> |
|
|
|
<input type="hidden" id="SrcEngine" name="SrcEngine" required> |
|
|
|
<div class="default text">原模型框架</div> |
|
|
|
<i class="dropdown icon"></i> |
|
|
|
<div class="menu" id="src-engine"> |
|
|
|
|
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="required inline field" id="inputshape_div"> |
|
|
|
<label>输入张量形状</label> |
|
|
|
<input style="width: 45%;" id="inputshape" name="inputshape" required maxlength="25" onkeyup="this.value=this.value.replace(/[, ]/g,'')"> |
|
|
|
</div> |
|
|
|
<div class="required inline field" id="verionname"> |
|
|
|
<label>模型版本</label> |
|
|
|
<input style="width: 45%;" id="version" name="Version" value="" readonly required maxlength="255"> |
|
|
|
</div> |
|
|
|
<div class="inline field"> |
|
|
|
<label>模型标签</label> |
|
|
|
<input style="width: 83%;margin-left: 7px;" id="label" name="Label" maxlength="255" placeholder='{{.i18n.Tr "repo.modelarts.train_job.label_place"}}'> |
|
|
|
</div> |
|
|
|
<div class="inline field"> |
|
|
|
<label for="description">模型描述</label> |
|
|
|
<textarea style="width: 83%;margin-left: 7px;" id="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> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="inline field" style="margin-left: 75px;"> |
|
|
|
<button id="submitId" type="button" class="ui create_train_job green button" style="position: absolute;"> |
|
|
|
{{.i18n.Tr "repo.model.manage.sava_model"}} |
|
|
|
</button> |
|
|
|
</div> |
|
|
|
</form> |
|
|
|
<div class="actions" style="display: inline-block;margin-left: 180px;"> |
|
|
|
<button class="ui button cancel" >{{.i18n.Tr "repo.cloudbrain.cancel"}}</button> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
{{template "base/footer" .}} |
|
|
|
|
|
|
|
<script> |
|
|
|
let repolink = {{.RepoLink}} |
|
|
|
let repoId = {{$repository}} |
|
|
|
const {_AppSubUrl, _StaticUrlPrefix, csrf} = window.config; |
|
|
|
$('input[name="_csrf"]').val(csrf) |
|
|
|
|
|
|
|
function createModelName(){ |
|
|
|
let repoName = location.pathname.split('/')[2] |
|
|
|
let modelName = repoName + '_model_' + Math.random().toString(36).substr(2, 4) |
|
|
|
$('#name').val(modelName) |
|
|
|
$('#version').val("0.0.1") |
|
|
|
} |
|
|
|
function showcreate(obj){ |
|
|
|
$('.ui.modal.second') |
|
|
|
.modal({ |
|
|
|
centered: false, |
|
|
|
onShow:function(){ |
|
|
|
$('#model_header').text("导入新模型") |
|
|
|
$('input[name="Version"]').addClass('model_disabled') |
|
|
|
$('.ui.dimmer').css({"background-color":"rgb(136, 136, 136,0.7)"}) |
|
|
|
$("#job-name").empty() |
|
|
|
createModelName() |
|
|
|
loadTrainList() |
|
|
|
|
|
|
|
}, |
|
|
|
onHide:function(){ |
|
|
|
document.getElementById("formId").reset(); |
|
|
|
$('#choice_model').dropdown('clear') |
|
|
|
$('#choice_version').dropdown('clear') |
|
|
|
$('.ui.dimmer').css({"background-color":""}) |
|
|
|
$('.ui.error.message').text() |
|
|
|
$('.ui.error.message').css('display','none') |
|
|
|
|
|
|
|
} |
|
|
|
}) |
|
|
|
.modal('show') |
|
|
|
} |
|
|
|
|
|
|
|
$(function(){ |
|
|
|
$('#choice_model').dropdown({ |
|
|
|
onChange:function(value){ |
|
|
|
$(".ui.dropdown.selection.search.width70").addClass("loading") |
|
|
|
$('#choice_version').dropdown('clear') |
|
|
|
$("#job-version").empty() |
|
|
|
loadTrainVersion(value) |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
function loadTrainList(){ |
|
|
|
$.get(`${repolink}/modelmanage/query_train_job?repoId=${repoId}`, (data) => { |
|
|
|
|
|
|
|
const n_length = data.length |
|
|
|
let train_html='' |
|
|
|
for (let i=0;i<n_length;i++){ |
|
|
|
train_html += `<div class="item" data-value="${data[i].JobID}">${data[i].DisplayJobName}</div>` |
|
|
|
train_html += '</div>' |
|
|
|
} |
|
|
|
$("#job-name").append(train_html) |
|
|
|
$(".ui.dropdown.selection.search.width83").removeClass("loading") |
|
|
|
$('#choice_model .default.text').text(data[0].DisplayJobName) |
|
|
|
$('#choice_model input[name="JobId"]').val(data[0].JobID) |
|
|
|
loadTrainVersion() |
|
|
|
|
|
|
|
}) |
|
|
|
} |
|
|
|
function loadTrainVersion(value){ |
|
|
|
let JobID = !value ?$('#choice_model input[name="JobId"]').val(): value |
|
|
|
$.get(`${repolink}/modelmanage/query_train_job_version?JobID=${JobID}`, (data) => { |
|
|
|
const n_length = data.length |
|
|
|
let train_html='' |
|
|
|
for (let i=0;i<n_length;i++){ |
|
|
|
train_html += `<div class="item" data-value="${data[i].VersionName}">${data[i].VersionName}</div>` |
|
|
|
train_html += '</div>' |
|
|
|
} |
|
|
|
if(data.length){ |
|
|
|
$("#job-version").append(train_html) |
|
|
|
$(".ui.dropdown.selection.search.width70").removeClass("loading") |
|
|
|
var versionName = data[0].VersionName; |
|
|
|
if(versionName==null || versionName==""){ |
|
|
|
versionName="V0001"; |
|
|
|
} |
|
|
|
$('#choice_version .default.text').text(versionName) |
|
|
|
$('#choice_version input[name="VersionName"]').val(versionName) |
|
|
|
} |
|
|
|
|
|
|
|
}) |
|
|
|
} |
|
|
|
</script> |
|
|
|
|