| @@ -891,7 +891,8 @@ modelarts.train_job_para_admin=train_job_para_admin | |||||
| modelarts.train_job_para.edit=train_job_para.edit | modelarts.train_job_para.edit=train_job_para.edit | ||||
| modelarts.train_job_para.connfirm=train_job_para.connfirm | modelarts.train_job_para.connfirm=train_job_para.connfirm | ||||
| modelarts.infer_job_model = Model | |||||
| modelarts.infer_job_model_file = Model File | |||||
| modelarts.infer_job = Inference Job | modelarts.infer_job = Inference Job | ||||
| modelarts.infer_job.model_version = Model/Version | modelarts.infer_job.model_version = Model/Version | ||||
| modelarts.infer_job.select_model = Select Model | modelarts.infer_job.select_model = Select Model | ||||
| @@ -841,7 +841,7 @@ modelarts.train_job.new_train=新建训练任务 | |||||
| modelarts.train_job.new_infer=新建推理任务 | modelarts.train_job.new_infer=新建推理任务 | ||||
| modelarts.train_job.config=配置信息 | modelarts.train_job.config=配置信息 | ||||
| modelarts.train_job.new=新建训练任务 | modelarts.train_job.new=新建训练任务 | ||||
| modelarts.train_job.new_place=描述字数不超过256个字符 | |||||
| modelarts.train_job.new_place=描述字数不超过255个字符 | |||||
| modelarts.model_name=模型名称 | modelarts.model_name=模型名称 | ||||
| modelarts.model_size=模型大小 | modelarts.model_size=模型大小 | ||||
| modelarts.import_model=导入模型 | modelarts.import_model=导入模型 | ||||
| @@ -891,7 +891,7 @@ modelarts.train_job.NAS_mount_path=NAS挂载路径 | |||||
| modelarts.train_job.query_whether_save_parameter=保存作业参数 | modelarts.train_job.query_whether_save_parameter=保存作业参数 | ||||
| modelarts.train_job.save_helper=保存当前作业的配置参数,后续您可以使用已保存的配置参数快速创建训练作业。 | modelarts.train_job.save_helper=保存当前作业的配置参数,后续您可以使用已保存的配置参数快速创建训练作业。 | ||||
| modelarts.train_job.common_frame=常用框架 | modelarts.train_job.common_frame=常用框架 | ||||
| modelarts.train_job.amount_of_compute_node=计算节点个数 | |||||
| modelarts.train_job.amount_of_compute_node=计算节点数 | |||||
| modelarts.train_job.job_parameter_name=任务参数名称 | modelarts.train_job.job_parameter_name=任务参数名称 | ||||
| modelarts.train_job.parameter_description=任务参数描述 | modelarts.train_job.parameter_description=任务参数描述 | ||||
| modelarts.log=日志 | modelarts.log=日志 | ||||
| @@ -901,9 +901,12 @@ modelarts.train_job_para_admin=任务参数管理 | |||||
| modelarts.train_job_para.edit=编辑 | modelarts.train_job_para.edit=编辑 | ||||
| modelarts.train_job_para.connfirm=确定 | modelarts.train_job_para.connfirm=确定 | ||||
| modelarts.infer_job_model = 模型 | |||||
| modelarts.infer_job_model_file = 模型文件 | |||||
| modelarts.infer_job = 推理任务 | modelarts.infer_job = 推理任务 | ||||
| modelarts.infer_job.model_version = 模型/版本 | modelarts.infer_job.model_version = 模型/版本 | ||||
| modelarts.infer_job.select_model = 选择模型 | modelarts.infer_job.select_model = 选择模型 | ||||
| modelarts.infer_job.boot_file_helper=启动文件是您程序执行的入口文件,必须是以.py结尾的文件。比如inferenece.py、main.py、example/nferenec.py、case/main.py。 | |||||
| model.manage.import_new_model=导入新模型 | model.manage.import_new_model=导入新模型 | ||||
| model.manage.create_error=相同的名称和版本的模型已经存在。 | model.manage.create_error=相同的名称和版本的模型已经存在。 | ||||
| @@ -607,7 +607,7 @@ | |||||
| const jobID = job.dataset.jobid; | const jobID = job.dataset.jobid; | ||||
| const repoPath = job.dataset.repopath; | const repoPath = job.dataset.repopath; | ||||
| const computeResource = job.dataset.resource | const computeResource = job.dataset.resource | ||||
| const initArray = ['STOPPED','FAILED','START_FAILED','CREATE_FAILED','SUCCEEDED'] | |||||
| const initArray = ['STOPPED','FAILED','START_FAILED','CREATE_FAILED','SUCCEEDED','UNAVAILABLE','DELETED','RESIZE_FAILED'] | |||||
| if (initArray.includes(job.textContent.trim())) { | if (initArray.includes(job.textContent.trim())) { | ||||
| return | return | ||||
| @@ -111,7 +111,7 @@ | |||||
| </div> | </div> | ||||
| <!-- 模型版本 --> | <!-- 模型版本 --> | ||||
| <div class="three wide column text center padding0"> | <div class="three wide column text center padding0"> | ||||
| <a >{{.ModelName}} </a>/ <span style="font-size: 12px;">{{.ModelVersion}} </span> | |||||
| <a href="{{$.RepoLink}}/modelmanage/show_model_info?name={{.ModelName}}">{{.ModelName}}</a>/ <span style="font-size: 12px;">{{.ModelVersion}} </span> | |||||
| </div> | </div> | ||||
| <!-- 任务状态 --> | <!-- 任务状态 --> | ||||
| <div class="two wide column text center padding0" > | <div class="two wide column text center padding0" > | ||||
| @@ -145,11 +145,11 @@ | |||||
| <div class="ui compact buttons"> | <div class="ui compact buttons"> | ||||
| {{$.CsrfTokenHtml}} | {{$.CsrfTokenHtml}} | ||||
| {{if .CanDel}} | {{if .CanDel}} | ||||
| <a style="padding: 0.5rem 1rem;" id="{{.VersionName}}-stop" class="ui basic {{if eq .Status "KILLED" "FAILED" "START_FAILED" "KILLING" "COMPLETED"}}disabled {{else}} blue {{end}}button" onclick="stopVersion({{.VersionName}},{{.JobID}})"> | |||||
| <a style="padding: 0.5rem 1rem;" id="{{.JobID}}-stop" class="ui basic {{if eq .Status "KILLED" "FAILED" "START_FAILED" "KILLING" "COMPLETED"}}disabled {{else}} blue {{end}}button" onclick="stopVersion({{.VersionName}},{{.JobID}})"> | |||||
| {{$.i18n.Tr "repo.stop"}} | {{$.i18n.Tr "repo.stop"}} | ||||
| </a> | </a> | ||||
| {{else}} | {{else}} | ||||
| <a style="padding: 0.5rem 1rem;" id="{{.VersionName}}-stop" class="ui basic disabled button"> | |||||
| <a style="padding: 0.5rem 1rem;" id="{{.JobID}}-stop" class="ui basic disabled button"> | |||||
| {{$.i18n.Tr "repo.stop"}} | {{$.i18n.Tr "repo.stop"}} | ||||
| </a> | </a> | ||||
| {{end}} | {{end}} | ||||
| @@ -232,7 +232,8 @@ function loadJobStatus() { | |||||
| const repoPath = job.dataset.repopath | const repoPath = job.dataset.repopath | ||||
| const versionname = job.dataset.version | const versionname = job.dataset.version | ||||
| const status_text = $(`#${jobID}-text`).text() | const status_text = $(`#${jobID}-text`).text() | ||||
| if(['IMAGE_FAILED','SUBMIT_FAILED','DELETE_FAILED','KILLED','COMPLETED','FAILED','CANCELED','LOST','START_FAILED'].includes(status_text)){ | |||||
| const finalState = ['IMAGE_FAILED','SUBMIT_FAILED','DELETE_FAILED','KILLED','COMPLETED','FAILED','CANCELED','LOST','START_FAILED','SUBMIT_MODEL_FAILED','DEPLOY_SERVICE_FAILED','CHECK_FAILED'] | |||||
| if(finalState.includes(status_text)){ | |||||
| return | return | ||||
| } | } | ||||
| $.get(`/api/v1/repos/${repoPath}/modelarts/inference-job/${jobID}?version_name=${versionname}`, (data) => { | $.get(`/api/v1/repos/${repoPath}/modelarts/inference-job/${jobID}?version_name=${versionname}`, (data) => { | ||||
| @@ -243,7 +244,7 @@ function loadJobStatus() { | |||||
| 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) | ||||
| finalState.includes(status) && $('#' + jobID + '-stop').removeClass('blue').addClass('disabled') | |||||
| } | } | ||||
| }).fail(function(err) { | }).fail(function(err) { | ||||
| @@ -45,7 +45,7 @@ | |||||
| <div class="ui container"> | <div class="ui container"> | ||||
| {{template "base/alert" .}} | {{template "base/alert" .}} | ||||
| <h4 class="ui top attached header"> | <h4 class="ui top attached header"> | ||||
| {{.i18n.Tr "repo.modelarts.train_job.new"}} | |||||
| {{.i18n.Tr "repo.modelarts.train_job.new_infer"}} | |||||
| </h4> | </h4> | ||||
| <div class="ui attached segment"> | <div class="ui attached segment"> | ||||
| <!-- equal width --> | <!-- equal width --> | ||||
| @@ -65,7 +65,7 @@ | |||||
| <div class="unite min_title inline field"> | <div class="unite min_title inline field"> | ||||
| <label style="font-weight: normal;" for="description">{{.i18n.Tr "repo.modelarts.train_job.description"}}</label> | <label style="font-weight: normal;" for="description">{{.i18n.Tr "repo.modelarts.train_job.description"}}</label> | ||||
| <textarea style="width: 80%;" id="description" name="description" rows="3" maxlength="254" 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, 255)"></textarea> | |||||
| <textarea style="width: 80%;" 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, 255)"></textarea> | |||||
| </div> | </div> | ||||
| <div class="ui divider"></div> | <div class="ui divider"></div> | ||||
| @@ -74,7 +74,7 @@ | |||||
| <div class="required unite inline min_title fields" style="width: 91.8%;"> | <div class="required unite inline min_title fields" style="width: 91.8%;"> | ||||
| <div class="required eight wide field"> | <div class="required eight wide field"> | ||||
| <label style="font-weight: normal;white-space: nowrap;">{{.i18n.Tr "repo.modelarts.infer_job.select_model"}}</label> | <label style="font-weight: normal;white-space: nowrap;">{{.i18n.Tr "repo.modelarts.infer_job.select_model"}}</label> | ||||
| <div class="ui fluid search selection dropdown loading" id="select_model"> | |||||
| <div class="ui fluid search selection dropdown {{if ne 0 $.MODEL_COUNT}} loading {{end}}" id="select_model"> | |||||
| {{if $.ckpt_name}} | {{if $.ckpt_name}} | ||||
| <input type="hidden" name="model_name" value="{{$.model_name}}" required> | <input type="hidden" name="model_name" value="{{$.model_name}}" required> | ||||
| <div class="text">{{$.model_name}}</div> | <div class="text">{{$.model_name}}</div> | ||||
| @@ -118,7 +118,7 @@ | |||||
| </div> | </div> | ||||
| <span > | <span > | ||||
| <i class="question circle icon" data-content="模型文件位置存储在环境变量ckpt_path中。" data-position="top center" data-variation="inverted mini"></i> | |||||
| <i class="question circle icon" data-content="模型文件位置存储在环境变量ckpt_url中。" data-position="top center" data-variation="inverted mini"></i> | |||||
| </span> | </span> | ||||
| </div> | </div> | ||||
| <!-- AI引擎 --> | <!-- AI引擎 --> | ||||
| @@ -175,7 +175,6 @@ | |||||
| <span> | <span> | ||||
| <i class="question circle icon" data-content="数据集位置存储在环境变量data_url中。" data-position="top center" data-variation="inverted mini"></i> | <i class="question circle icon" data-content="数据集位置存储在环境变量data_url中。" data-position="top center" data-variation="inverted mini"></i> | ||||
| </span> | </span> | ||||
| <span class="tooltips" style="display: block;">数据集位置存储在环境变量data_url中,推理输出路径存储在环境变量result_url中。</span> | |||||
| </div> | </div> | ||||
| <!-- 启动文件 --> | <!-- 启动文件 --> | ||||
| <div class="inline unite min_title field required"> | <div class="inline unite min_title field required"> | ||||
| @@ -186,7 +185,7 @@ | |||||
| <input style="width: 35.5%;" name="boot_file" id="trainjob_boot_file" value="" tabindex="3" autofocus required maxlength="254" > | <input style="width: 35.5%;" name="boot_file" id="trainjob_boot_file" value="" tabindex="3" autofocus required maxlength="254" > | ||||
| {{end}} | {{end}} | ||||
| <span > | <span > | ||||
| <i class="question circle icon" data-content={{.i18n.Tr "repo.modelarts.train_job.boot_file_helper"}} data-position="top center" data-variation="inverted mini"></i> | |||||
| <i class="question circle icon" data-content={{.i18n.Tr "repo.modelarts.infer_job.boot_file_helper"}} data-position="top center" data-variation="inverted mini"></i> | |||||
| </span> | </span> | ||||
| <a href="https://git.openi.org.cn/OpenIOSSG/MINIST_Example" target="_blank">查看样例</a> | <a href="https://git.openi.org.cn/OpenIOSSG/MINIST_Example" target="_blank">查看样例</a> | ||||
| </div> | </div> | ||||
| @@ -240,6 +239,7 @@ | |||||
| <div class="ui labeled input" style="width: 5%;"> | <div class="ui labeled input" style="width: 5%;"> | ||||
| <input style="border-radius: 0;text-align: center;" name="work_server_number" id="trainjob_work_server_num" tabindex="3" autofocus required maxlength="254" value="1" readonly> | <input style="border-radius: 0;text-align: center;" name="work_server_number" id="trainjob_work_server_num" tabindex="3" autofocus required maxlength="254" value="1" readonly> | ||||
| </div> | </div> | ||||
| <span class="tooltips" style="display: block;">推理输出路径存储在环境变量result_url中。</span> | |||||
| </div> | </div> | ||||
| <!-- 表单操作 --> | <!-- 表单操作 --> | ||||
| <div class="inline unite min_title field"> | <div class="inline unite min_title field"> | ||||
| @@ -214,7 +214,7 @@ td, th { | |||||
| </div> | </div> | ||||
| </td> | </td> | ||||
| </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.run_version"}} | {{$.i18n.Tr "repo.modelarts.run_version"}} | ||||
| </td> | </td> | ||||
| @@ -224,7 +224,7 @@ td, th { | |||||
| {{.VersionName}} | {{.VersionName}} | ||||
| </div> | </div> | ||||
| </td> | </td> | ||||
| </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.train_job.start_time"}} | {{$.i18n.Tr "repo.modelarts.train_job.start_time"}} | ||||
| @@ -321,13 +321,23 @@ td, th { | |||||
| <tbody class="ti-text-form"> | <tbody class="ti-text-form"> | ||||
| <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.infer_job_model"}} | |||||
| </td> | </td> | ||||
| <td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
| <div class="text-span text-span-w"> | <div class="text-span text-span-w"> | ||||
| <span style="color: #8a8e99">名称:</span><span>testTrainJob1_model_5d21</span> | <span style="color: #8a8e99">名称:</span><span>testTrainJob1_model_5d21</span> | ||||
| <span style="color: #8a8e99">版本:</span><span>asdasdasd</span> | <span style="color: #8a8e99">版本:</span><span>asdasdasd</span> | ||||
| <span style="color: #8a8e99">权重:</span><span title="{{.CkptName}}">{{.CkptName}}</span> | |||||
| </div> | |||||
| </td> | |||||
| </tr> | |||||
| <tr class="ti-no-ng-animate"> | |||||
| <td class="ti-no-ng-animate ti-text-form-label text-width80"> | |||||
| {{$.i18n.Tr "repo.modelarts.infer_job_model_file"}} | |||||
| </td> | |||||
| <td class="ti-text-form-content"> | |||||
| <div class="text-span text-span-w"> | |||||
| {{.CkptName}} | |||||
| </div> | </div> | ||||
| </td> | </td> | ||||
| </tr> | </tr> | ||||
| @@ -439,7 +449,7 @@ td, th { | |||||
| <input type="hidden" name="model{{.VersionName}}" value="-1"> | <input type="hidden" name="model{{.VersionName}}" value="-1"> | ||||
| <input type="hidden" name="modelback{{.VersionName}}" value="-1"> | <input type="hidden" name="modelback{{.VersionName}}" value="-1"> | ||||
| <div class='ui breadcrumb model_file_bread' id='file_breadcrumb{{.VersionName}}'> | <div class='ui breadcrumb model_file_bread' id='file_breadcrumb{{.VersionName}}'> | ||||
| <div class="active section">{{.VersionName}}</div> | |||||
| <div class="active section">result</div> | |||||
| <div class="divider"> / </div> | <div class="divider"> / </div> | ||||
| </div> | </div> | ||||
| @@ -559,7 +569,7 @@ function renderSize(value){ | |||||
| var srcsize = parseFloat(value); | var srcsize = parseFloat(value); | ||||
| index=Math.floor(Math.log(srcsize)/Math.log(1024)); | index=Math.floor(Math.log(srcsize)/Math.log(1024)); | ||||
| var size =srcsize/Math.pow(1024,index); | var size =srcsize/Math.pow(1024,index); | ||||
| size=size.toFixed(2);//保留的小数位数 | |||||
| size=size.toFixed(0);//保留的小数位数 | |||||
| return size+unitArr[index]; | return size+unitArr[index]; | ||||
| } | } | ||||
| function loadModelFile(version_name,parents,filename,init){ | function loadModelFile(version_name,parents,filename,init){ | ||||
| @@ -574,7 +584,7 @@ function loadModelFile(version_name,parents,filename,init){ | |||||
| $(`input[name=modelback${version_name}]`).val(version_name) | $(`input[name=modelback${version_name}]`).val(version_name) | ||||
| $(`#file_breadcrumb${version_name}`).empty() | $(`#file_breadcrumb${version_name}`).empty() | ||||
| let htmlBread = "" | let htmlBread = "" | ||||
| htmlBread += `<div class='active section'>${version_name}</div>` | |||||
| htmlBread += `<div class='active section'>result</div>` | |||||
| htmlBread += "<div class='divider'> / </div>" | htmlBread += "<div class='divider'> / </div>" | ||||
| $(`#file_breadcrumb${version_name}`).append(htmlBread) | $(`#file_breadcrumb${version_name}`).append(htmlBread) | ||||
| }else{ | }else{ | ||||
| @@ -142,11 +142,11 @@ | |||||
| <div class="ui compact buttons"> | <div class="ui compact buttons"> | ||||
| {{$.CsrfTokenHtml}} | {{$.CsrfTokenHtml}} | ||||
| {{if .CanDel}} | {{if .CanDel}} | ||||
| <a style="padding: 0.5rem 1rem;" id="{{.VersionName}}-stop" class="ui basic {{if eq .Status "KILLED" "FAILED" "START_FAILED" "KILLING" "COMPLETED"}}disabled {{else}} blue {{end}}button" onclick="stopVersion({{.VersionName}},{{.JobID}})"> | |||||
| <a style="padding: 0.5rem 1rem;" id="{{.JobID}}-stop" class="ui basic {{if eq .Status "KILLED" "FAILED" "START_FAILED" "KILLING" "COMPLETED"}}disabled {{else}} blue {{end}}button" onclick="stopVersion({{.VersionName}},{{.JobID}})"> | |||||
| {{$.i18n.Tr "repo.stop"}} | {{$.i18n.Tr "repo.stop"}} | ||||
| </a> | </a> | ||||
| {{else}} | {{else}} | ||||
| <a style="padding: 0.5rem 1rem;" id="{{.VersionName}}-stop" class="ui basic disabled button"> | |||||
| <a style="padding: 0.5rem 1rem;" id="{{.JobID}}-stop" class="ui basic disabled button"> | |||||
| {{$.i18n.Tr "repo.stop"}} | {{$.i18n.Tr "repo.stop"}} | ||||
| </a> | </a> | ||||
| {{end}} | {{end}} | ||||
| @@ -263,7 +263,8 @@ | |||||
| const repoPath = job.dataset.repopath | const repoPath = job.dataset.repopath | ||||
| const versionname = job.dataset.version | const versionname = job.dataset.version | ||||
| const status_text = $(`#${jobID}-text`).text() | const status_text = $(`#${jobID}-text`).text() | ||||
| if(['IMAGE_FAILED','SUBMIT_FAILED','DELETE_FAILED','KILLED','COMPLETED','FAILED','CANCELED','LOST','START_FAILED'].includes(status_text)){ | |||||
| const finalState = ['IMAGE_FAILED','SUBMIT_FAILED','DELETE_FAILED','KILLED','COMPLETED','FAILED','CANCELED','LOST','START_FAILED','SUBMIT_MODEL_FAILED','DEPLOY_SERVICE_FAILED','CHECK_FAILED'] | |||||
| if(finalState.includes(status_text)){ | |||||
| return | return | ||||
| } | } | ||||
| $.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) => { | ||||
| @@ -274,6 +275,7 @@ | |||||
| 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) | ||||
| finalState.includes(status) && $('#' + jobID + '-stop').removeClass('blue').addClass('disabled') | |||||
| } | } | ||||
| @@ -489,7 +489,7 @@ td, th { | |||||
| var srcsize = parseFloat(value); | var srcsize = parseFloat(value); | ||||
| index=Math.floor(Math.log(srcsize)/Math.log(1024)); | index=Math.floor(Math.log(srcsize)/Math.log(1024)); | ||||
| var size =srcsize/Math.pow(1024,index); | var size =srcsize/Math.pow(1024,index); | ||||
| size=size.toFixed(2);//保留的小数位数 | |||||
| size=size.toFixed(0);//保留的小数位数 | |||||
| return size+unitArr[index]; | return size+unitArr[index]; | ||||
| } | } | ||||
| function loadJobStatus() { | function loadJobStatus() { | ||||