| @@ -883,7 +883,19 @@ modelarts.train_job_para_admin=train_job_para_admin | |||
| modelarts.train_job_para.edit=train_job_para.edit | |||
| modelarts.train_job_para.connfirm=train_job_para.connfirm | |||
| model.manage.import_new_model=Import New Model | |||
| model.manage.create_error=Equal Name and Version has existed. | |||
| model.manage.model_name = Model Name | |||
| model.manage.version = Version | |||
| model.manage.label = Label | |||
| model.manage.size = Size | |||
| model.manage.create_time = Create Time | |||
| model.manage.Description = Description | |||
| model.manage.Accuracy = Accuracy | |||
| model.manage.F1 = F1 | |||
| model.manage.Precision = Precision | |||
| model.manage.Recall = Recall | |||
| template.items = Template Items | |||
| template.git_content = Git Content (Default Branch) | |||
| @@ -895,7 +895,18 @@ modelarts.train_job_para_admin=任务参数管理 | |||
| modelarts.train_job_para.edit=编辑 | |||
| modelarts.train_job_para.connfirm=确定 | |||
| model.manage.import_new_model=导入新模型 | |||
| model.manage.create_error=相同的名称和版本的模型已经存在。 | |||
| model.manage.model_name = 模型名称 | |||
| model.manage.version = 版本 | |||
| model.manage.label = 标签 | |||
| model.manage.size = 大小 | |||
| model.manage.create_time = 创建时间 | |||
| model.manage.description = 描述 | |||
| model.manage.Accuracy = 准确率 | |||
| model.manage.F1 = F1值 | |||
| model.manage.Precision = 精确率 | |||
| model.manage.Recall = 召回率 | |||
| template.items=模板选项 | |||
| template.git_content=Git数据(默认分支) | |||
| @@ -28,112 +28,24 @@ | |||
| <div class="repository release dataset-list view"> | |||
| {{template "repo/header" .}} | |||
| <!-- 列表容器 --> | |||
| <div class="ui container loading"> | |||
| <div class="ui container"> | |||
| {{template "base/alert" .}} | |||
| <div class="ui two column stackable grid "> | |||
| <div class="column"></div> | |||
| <div class="column right aligned"> | |||
| {{if .Permission.CanWrite $.UnitTypeCloudBrain}} | |||
| <a class="ui green button" onclick="showcreate(this)">{{$.i18n.Tr "repo.modelarts.train_job.new_train"}}</a>{{end}} | |||
| <!-- --> | |||
| <a class="ui button {{if .Permission.CanWrite $.UnitTypeCloudBrain}} green {{else}} disabled {{end}}" onclick="showcreate(this)">{{$.i18n.Tr "repo.model.manage.import_new_model"}}</a> | |||
| </div> | |||
| </div> | |||
| <!-- 中下列表展示区 --> | |||
| <div class="ui grid"> | |||
| <div class="row"> | |||
| <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">{{$.i18n.Tr "repo.modelarts.model_name"}}</span> | |||
| </div> | |||
| <div class="one wide column text center padding0"> | |||
| <span style="margin:0 6px">{{$.i18n.Tr "repo.modelarts.version"}}</span> | |||
| </div> | |||
| <div class="one wide column text center padding0" style="width: 7.25%!important;"> | |||
| <span style="margin:0 6px">{{$.i18n.Tr "repo.modelarts.version_nums"}}</span> | |||
| </div> | |||
| <div class="two wide column text center padding0" style="width: 11.5%!important;"> | |||
| <span>{{$.i18n.Tr "repo.modelarts.model_size"}}</span> | |||
| </div> | |||
| <div class="two wide column text center padding0" style="width: 8.5%!important;"> | |||
| <span>{{$.i18n.Tr "repo.modelarts.train_job.AI_driver"}}</span> | |||
| </div> | |||
| <div class="two wide column text center padding0" style="width: 11.5%!important;"> | |||
| <span>{{$.i18n.Tr "repo.modelarts.computing_resources"}}</span> | |||
| </div> | |||
| <div class="two wide column text center padding0"> | |||
| <span>{{$.i18n.Tr "repo.modelarts.createtime"}}</span> | |||
| </div> | |||
| <div class="one wide column text center padding0"> | |||
| <span>{{$.i18n.Tr "repo.cloudbrain_creator"}}</span> | |||
| </div> | |||
| <div class="two wide column text center padding0" style="width: 17.5%!important;"> | |||
| <span>{{$.i18n.Tr "repo.cloudbrain_operate"}}</span> | |||
| </div> | |||
| </div> | |||
| </div> --> | |||
| <!-- <div class="ui grid stackable item"> | |||
| <div class="row"> | |||
| <div class="three wide column padding0"> | |||
| <a class="title" href="{{$.Link}}/{{.JobID}}" title="{{.JobName}}" style="font-size: 12px;"> | |||
| <span class="fitted" style="vertical-align: middle;">{{svg "octicon-tasklist" 16}}</span> | |||
| <span class="fitted" style="width: 90%;vertical-align: middle;margin-left: 0.4rem;">Model-abcd</span> | |||
| </a> | |||
| </div> | |||
| <div class="one wide column text center padding0"> | |||
| <span>0.0.3</span> | |||
| </div> | |||
| <div class="one wide column text center padding0" style="width: 7.25%!important;"> | |||
| <span>20</span> | |||
| </div> | |||
| <div class="two wide column padding0 text center" style="width: 11.5%!important;"> | |||
| <span>20.28MB</span> | |||
| </div> | |||
| <div class="two wide column padding0 text center" style="width: 8.5%!important;"> | |||
| <span>Mindspore</span> | |||
| </div> | |||
| <div class="two wide column text center padding0" style="width: 11.5%!important;"> | |||
| <span style="font-size: 12px;">CPU</span> | |||
| </div> | |||
| <div class="two wide column text center padding0"> | |||
| <span style="font-size: 12px;">2021/09/20 12:06:13</span> | |||
| </div> | |||
| <div class="one wide column text center padding0"> | |||
| {{if .User.Name}} | |||
| <a href="{{AppSubUrl}}/{{.User.Name}}" title="{{.User.Name}}"><img class="ui avatar image" src="{{.User.RelAvatarLink}}"></a> | |||
| {{else}} | |||
| <a title="Ghost"><img class="ui avatar image" src="{{AppSubUrl}}/user/avatar/Ghost/-1"></a> | |||
| {{end}} | |||
| </div> | |||
| <div class="two wide column text center padding0" style="width: 17.5%!important;"> | |||
| <div style="display: flex;justify-content: space-between;"> | |||
| <a>创建新版本</a> | |||
| <a>下载</a> | |||
| <a onclick="assertDelete(this)">删除</a> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> --> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| @@ -227,7 +139,7 @@ | |||
| </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> | |||
| <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;"> | |||
| @@ -16,7 +16,7 @@ | |||
| padding-bottom: 20px; | |||
| padding-right: 20px; | |||
| color: #8a8e99; | |||
| font-size: 12px; | |||
| font-size: 14px; | |||
| white-space: nowrap !important; | |||
| width: 80px; | |||
| line-height: 30px; | |||
| @@ -25,54 +25,154 @@ | |||
| line-height: 30px; | |||
| padding-bottom: 20px; | |||
| } | |||
| .change-version{ | |||
| min-width: auto !important; | |||
| border: 1px solid rgba(187, 187, 187, 100) !important; | |||
| border-radius: .38571429rem !important; | |||
| margin-left: 1.5em; | |||
| } | |||
| .word-elipsis{ | |||
| overflow: hidden; | |||
| text-overflow: ellipsis; | |||
| white-space: nowrap; | |||
| } | |||
| .half-table{ | |||
| width: 50%; | |||
| float: left; | |||
| } | |||
| .text-width80 { | |||
| width: 100px; | |||
| line-height: 30px; | |||
| } | |||
| .tableStyle{ | |||
| width:100%; | |||
| table-layout: fixed; | |||
| } | |||
| </style> | |||
| <div class="ui container"> | |||
| <h4 class="ui header" id="vertical-segment"> | |||
| <!-- <a href="javascript:window.history.back();"><i class="arrow left icon"></i>返回</a> --> | |||
| <div class="ui breadcrumb"> | |||
| <a class="section" href="{{$.RepoLink}}/modelmanage/show_model"> | |||
| 模型管理 | |||
| 模型管理 | |||
| </a> | |||
| <div class="divider"> / </div> | |||
| <div class="active section">{{.name}}</div> | |||
| </div> | |||
| <select class="ui dropdown tiny change-version" id="dropdown" onchange="changeInfo(this.value)"> | |||
| </select> | |||
| </h4> | |||
| <div style="border:1px solid #e2e2e2;padding: 20px 60px;margin-top:24px"> | |||
| <div style="width: 50%;float: left;"> | |||
| <span class="model_header_text">基本信息</span> | |||
| <table style="margin-top:20px;"> | |||
| <tbody> | |||
| <tr style="font-size: 12px;"> | |||
| <td class="ti-text-form-label"> | |||
| 模型名称: | |||
| </td> | |||
| <td class="ti-text-form-content"> | |||
| Model_asasdas | |||
| </td> | |||
| </tr> | |||
| </tbody> | |||
| </table> | |||
| </div> | |||
| <div style="width: 50%;float: left;"> | |||
| <span class="model_header_text">模型精度</span> | |||
| </div> | |||
| <div style="clear: both;"></div> | |||
| <div id="showInfo" style="border:1px solid #e2e2e2;padding: 20px 60px;margin-top:24px"> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| {{template "base/footer" .}} | |||
| <script> | |||
| let url = location.href.split('show_model')[0] | |||
| let ID = location.search.slice(6,8) | |||
| let ID = location.search.split('?name=').pop() | |||
| console.log("-----------",ID) | |||
| $(document).ready(loadInfo); | |||
| function loadInfo(version){ | |||
| $.get(`${url}show_model_info_api?ID=${ID}`,(data)=>{ | |||
| console.log("data",data) | |||
| function changeInfo(version){ | |||
| $.get(`${url}show_model_info_api?name=${ID}`,(data)=>{ | |||
| let versionData = data.filter((item)=>{ | |||
| return item.Version === version | |||
| }) | |||
| let initObj = transObj(versionData)[0] | |||
| let initModelAcc = transObj(versionData)[1] | |||
| console.log("=======",initObj,initModelAcc) | |||
| $('#showInfo').empty() | |||
| renderInfo(initObj,initModelAcc) | |||
| }) | |||
| } | |||
| function loadInfo(){ | |||
| $.get(`${url}show_model_info_api?name=${ID}`,(data)=>{ | |||
| let html = '' | |||
| for (let i=0;i<data.length;i++){ | |||
| html += `<option value="${data[i].Version}">${data[i].Version}</option>` | |||
| } | |||
| $('#dropdown').append(html) | |||
| let initObj = transObj(data)[0] | |||
| let initModelAcc = transObj(data)[1] | |||
| renderInfo(initObj,initModelAcc) | |||
| }) | |||
| } | |||
| function transObj(data){ | |||
| let {Name,Version,Label,Size,Description,CreatedUnix,Accuracy} = data[0] | |||
| let modelAcc = JSON.parse(Accuracy) | |||
| let size = tranSize(Size) | |||
| let time = transTime(CreatedUnix) | |||
| let initObj = { | |||
| ModelName:Name || '--', | |||
| Version:Version, | |||
| Label:Label || '--', | |||
| Size:size, | |||
| CreateTime:time, | |||
| Description:Description || '--', | |||
| } | |||
| let initModelAcc = { | |||
| Accuracy: modelAcc.Accuracy || '--', | |||
| F1: modelAcc.F1 || '--', | |||
| Precision:modelAcc.Precision || '--', | |||
| Recall: modelAcc.Recall || '--' | |||
| } | |||
| return [initObj,initModelAcc] | |||
| } | |||
| function transTime(time){ | |||
| let date = new Date(time * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000 | |||
| let Y = date.getFullYear() + '-'; | |||
| let M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1):date.getMonth()+1) + '-'; | |||
| let D = (date.getDate()< 10 ? '0'+date.getDate():date.getDate())+ ' '; | |||
| let h = (date.getHours() < 10 ? '0'+date.getHours():date.getHours())+ ':'; | |||
| let m = (date.getMinutes() < 10 ? '0'+date.getMinutes():date.getMinutes()) + ':'; | |||
| let s = date.getSeconds() < 10 ? '0'+date.getSeconds():date.getSeconds(); | |||
| return Y+M+D+h+m+s; | |||
| } | |||
| function tranSize(value){ | |||
| if(null==value||value==''){ | |||
| return "0 Bytes"; | |||
| } | |||
| var unitArr = new Array("Bytes","KB","MB","GB","TB","PB","EB","ZB","YB"); | |||
| var index=0; | |||
| var srcsize = parseFloat(value); | |||
| index=Math.floor(Math.log(srcsize)/Math.log(1024)); | |||
| var size =srcsize/Math.pow(1024,index); | |||
| size=size.toFixed(2);//保留的小数位数 | |||
| return size+unitArr[index]; | |||
| } | |||
| function renderInfo(obj,accObj){ | |||
| let html = '' | |||
| html += '<div class="half-table">' | |||
| html += '<span class="model_header_text">基本信息</span>' | |||
| html += '<table class="tableStyle" style="margin-top:20px;">' | |||
| html += '<tbody>' | |||
| for(let key in obj){ | |||
| html += '<tr style="font-size: 12px;">' | |||
| html += `<td class="ti-text-form-label text-width80">${key}</td>` | |||
| html += `<td class="ti-text-form-content word-elipsis">${obj[key]}</td>` | |||
| html += '</tr>' | |||
| } | |||
| html += '</tbody>' | |||
| html += '</table>' | |||
| html += '</div>' | |||
| html += '<div class="half-table">' | |||
| html += '<span class="model_header_text">模型精度</span>' | |||
| html += '<table class="tableStyle" style="margin-top:20px;">' | |||
| html += '<tbody>' | |||
| for(let key in accObj){ | |||
| html += '<tr style="font-size: 12px;">' | |||
| html += `<td class="ti-text-form-label text-width80">${key}</td>` | |||
| html += `<td class="ti-text-form-content">${accObj[key]}</td>` | |||
| html += '</tr>' | |||
| } | |||
| html += '</tbody>' | |||
| html += '</table>' | |||
| html += '</div>' | |||
| html += '<div style="clear: both;"></div>' | |||
| $('#showInfo').append(html) | |||
| } | |||
| </script> | |||
| @@ -118,6 +118,7 @@ | |||
| @size-change="handleSizeChange" | |||
| @current-change="handleCurrentChange" | |||
| :current-page="currentPage" | |||
| :page-sizes="[10]" | |||
| :page-size="pageSize" | |||
| layout="total, sizes, prev, pager, next, jumper" | |||
| :total="totalNum"> | |||
| @@ -164,7 +165,7 @@ export default { | |||
| tableData= res.data | |||
| console.log("-----tableData---",tableData) | |||
| for(let i=0;i<tableData.length;i++){ | |||
| TrainTaskInfo = JSON.parse(res.data[i].TrainTaskInfo) | |||
| TrainTaskInfo = JSON.parse(tableData[i].TrainTaskInfo) | |||
| tableData[i].EngineName = TrainTaskInfo.EngineName.split('-')[0] | |||
| tableData[i].ComputeResource = TrainTaskInfo.ComputeResource | |||
| tableData[i].Name='' | |||
| @@ -184,11 +185,11 @@ export default { | |||
| }, | |||
| handleSizeChange(val){ | |||
| this.params.size = val | |||
| this.getImageList() | |||
| this.getModelList() | |||
| }, | |||
| handleCurrentChange(val){ | |||
| this.params.page = val | |||
| this.getImageList() | |||
| this.getModelList() | |||
| }, | |||
| showcreateVue(name,version){ | |||
| $('.ui.modal.second') | |||
| @@ -222,20 +223,22 @@ export default { | |||
| }) | |||
| }, | |||
| getModelList(){ | |||
| this.fullscreenLoading = true | |||
| this.fullscreenLoading = false | |||
| this.$axios.get(location.href+'_api',{ | |||
| params:this.params | |||
| }).then((res)=>{ | |||
| console.log("res",res) | |||
| let TrainTaskInfo | |||
| this.tableData = res.data.data | |||
| for(let i=0;i<res.data.count;i++){ | |||
| TrainTaskInfo = JSON.parse(res.data.data[i].TrainTaskInfo) | |||
| console.log("this.tableData",this.tableData) | |||
| for(let i=0;i<this.tableData.length;i++){ | |||
| TrainTaskInfo = JSON.parse(this.tableData[i].TrainTaskInfo) | |||
| this.tableData[i].EngineName = TrainTaskInfo.EngineName.split('-')[0] | |||
| this.tableData[i].ComputeResource = TrainTaskInfo.ComputeResource | |||
| this.tableData[i].hasChildren = res.data.data[i].VersionCount===1 ? false : true | |||
| } | |||
| this.totalNum = this.tableData.length | |||
| this.totalNum = res.data.count | |||
| console.log("this.tableData.",this.tableData) | |||
| this.fullscreenLoading = false | |||
| }) | |||
| @@ -359,6 +362,7 @@ export default { | |||
| margin-right: 3px; | |||
| font-size: 12px; | |||
| } | |||
| /deep/ .el-table_1_column_1.is-left .cell {padding-right: 0px !important;} | |||
| /deep/ .el-table__expand-icon .el-icon-arrow-right{ | |||
| font-family: element-icons!important; | |||
| speak: none; | |||