|
|
@@ -1,861 +1 @@ |
|
|
|
{{template "base/head" .}} |
|
|
|
<link rel="stylesheet" href="/self/ztree/css/zTreeStyle/zTreeStyle.css?v={{MD5 AppVer}}" type="text/css"> |
|
|
|
<style> |
|
|
|
.model_file_bread { |
|
|
|
margin-bottom: -0.5rem !important; |
|
|
|
padding-left: 1rem; |
|
|
|
padding-top: 0.5rem; |
|
|
|
} |
|
|
|
.menuContent{ |
|
|
|
position: absolute; |
|
|
|
background: #ffffff; |
|
|
|
left: 0; |
|
|
|
right: 26px; |
|
|
|
top: 36px; |
|
|
|
z-index:999; |
|
|
|
border: 1px solid #96c8da; |
|
|
|
border-top: 0; |
|
|
|
border-bottom-right-radius: 4px; |
|
|
|
border-bottom-left-radius: 4px; |
|
|
|
box-shadow: 0 2px 3px 0 rgb(34 36 38 / 15%); |
|
|
|
} |
|
|
|
</style> |
|
|
|
{{template "custom/global_mask" .}} |
|
|
|
<div class="repository"> |
|
|
|
{{template "repo/header" .}} |
|
|
|
<div class="ui container"> |
|
|
|
<h4 class="ui header" id="vertical-segment"> |
|
|
|
<div class="ui breadcrumb"> |
|
|
|
<a class="section" href="{{.RepoLink}}/debugjob?debugListType=all"> |
|
|
|
{{.i18n.Tr "repo.cloudbrain"}} |
|
|
|
</a> |
|
|
|
<div class="divider"> / </div> |
|
|
|
<a class="section" href="{{$.RepoLink}}/modelarts/train-job"> |
|
|
|
{{$.i18n.Tr "repo.modelarts.train_job"}} |
|
|
|
</a> |
|
|
|
<div class="divider"> / </div> |
|
|
|
<div class="active section">{{.displayJobName}}</div> |
|
|
|
</div> |
|
|
|
</h4> |
|
|
|
{{range $k ,$v := .version_list_task}} |
|
|
|
<div class="ui accordion border-according" id="accordion{{.VersionName}}" |
|
|
|
data-repopath="{{$.RepoRelPath}}/grampus/train-job" data-jobid="{{.JobID}}" |
|
|
|
data-version="{{.VersionName}}"> |
|
|
|
<div class="{{if eq $k 0}}active{{end}} title padding0"> |
|
|
|
<div class="according-panel-heading"> |
|
|
|
<div class="accordion-panel-title"> |
|
|
|
<i class="dropdown icon"></i> |
|
|
|
<span class="accordion-panel-title-content"> |
|
|
|
<span> |
|
|
|
<div style="float: right;"> |
|
|
|
{{$.CsrfTokenHtml}} |
|
|
|
</div> |
|
|
|
<div class="ac-display-inblock title_text acc-margin-bottom"> |
|
|
|
<span class="cti-mgRight-sm">{{TimeSinceUnix1 .CreatedUnix}}</span> |
|
|
|
<span class="cti-mgRight-sm"> |
|
|
|
{{$.i18n.Tr "repo.modelarts.current_version"}}:{{.VersionName}}</span> |
|
|
|
<span class="cti-mgRight-sm"> |
|
|
|
{{$.i18n.Tr "repo.modelarts.parent_version"}}:{{.PreVersionName}}</span> |
|
|
|
<span class="cti-mgRight-sm">{{$.i18n.Tr "repo.modelarts.status"}}: |
|
|
|
<span id="{{.VersionName}}-status-span"><i id="icon" |
|
|
|
style="vertical-align: middle;" class="{{.Status}}"></i><span id="text" |
|
|
|
style="margin-left: 0.4em;font-size: 12px;">{{.Status}}</span></span> |
|
|
|
</span> |
|
|
|
<span |
|
|
|
class="cti-mgRight-sm">{{$.i18n.Tr "repo.modelarts.train_job.dura_time"}}:</span> |
|
|
|
<span class="cti-mgRight-sm uc-accordionTitle-black" |
|
|
|
id="{{.VersionName}}-duration-span">{{.TrainJobDuration}}</span> |
|
|
|
<span class="refresh-status" data-tooltip="刷新" style="cursor: pointer;" data-inverted="" data-version="{{.VersionName}}"> |
|
|
|
<i class="redo icon redo-color"></i> |
|
|
|
</span> |
|
|
|
</div> |
|
|
|
<div style="float: right;"> |
|
|
|
{{if and ($.canDownload) (ne .Status "WAITING")}} |
|
|
|
<a class="ti-action-menu-item" id="{{.VersionName}}-create-model" |
|
|
|
onclick="showcreate({DisplayJobName:{{.DisplayJobName}},JobName:{{.JobName}},JobID:{{.JobID}},VersionName:{{.VersionName}},EngineName:{{.EngineName}},ComputeResource:{{.ComputeResource}},Type:{{.Type}}})">{{$.i18n.Tr "repo.modelarts.create_model"}}</a> |
|
|
|
{{else}} |
|
|
|
<a class="ti-action-menu-item disabled" id="{{.VersionName}}-create-model">{{$.i18n.Tr "repo.modelarts.create_model"}}</a> |
|
|
|
{{end}} |
|
|
|
{{if and ($.canDownload) (ne .Status "WAITING")}} |
|
|
|
<a class="ti-action-menu-item export-dataset" style="position:relative" id="{{.VersionName}}-export-dataset" data-version="{{.VersionName}}" data-jobid="{{.JobID}}" data-repopath="/{{$.RepoRelPath}}/datasets/model"> |
|
|
|
{{$.i18n.Tr "repo.export_result_to_dataset"}} |
|
|
|
<div class="export-popup" id="{{.VersionName}}-popup"> |
|
|
|
<div class="ui active centered inline loader" style="width: 100%;display: flex;align-items: center;">{{$.i18n.Tr "repo.loader_result_file"}}</div> |
|
|
|
</div> |
|
|
|
</a> |
|
|
|
{{else}} |
|
|
|
<a class="ti-action-menu-item disabled" id="{{.VersionName}}-export-dataset">{{$.i18n.Tr "repo.export_result_to_dataset"}}</a> |
|
|
|
{{end}} |
|
|
|
</div> |
|
|
|
</span> |
|
|
|
</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="{{if eq $k 0}}active{{end}} content"> |
|
|
|
<div class="content-pad"> |
|
|
|
<div class="ui pointing secondary menu" style="border-bottom: 1px solid rgba(34,36,38,.15);"> |
|
|
|
|
|
|
|
<a class="active item" data-tab="first{{$k}}">{{$.i18n.Tr "repo.modelarts.train_job.config"}}</a> |
|
|
|
<a class="item detail-log-tab" data-tab="second{{$k}}" data-version="{{.VersionName}}">{{$.i18n.Tr "repo.modelarts.log"}}</a> |
|
|
|
{{if ne .ComputeResource "GCU"}} |
|
|
|
<a class="item metric_chart" data-tab="four{{$k}}" data-version="{{.VersionName}}" data-path="{{$.RepoRelPath}}/grampus/train-job/{{.JobID}}/metrics">{{$.i18n.Tr "cloudbrain.resource_use"}}</a> |
|
|
|
{{end}} |
|
|
|
{{if eq .ComputeResource "CPU/GPU"}} |
|
|
|
<a class="item run_info" data-tab="five{{$k}}" data-version="{{.VersionName}}">{{$.i18n.Tr "repo.cloudbrain.runinfo"}}</a> |
|
|
|
{{end}} |
|
|
|
<a class="item load-model-file" data-tab="third{{$k}}" data-can-reschedule="{{$.canReschedule}}" data-retry-path="{{$.RepoLink}}/cloudbrain/train-job/{{.JobID}}/model/reschedule" data-download-flag="{{$.canDownload}}" data-path="{{$.RepoLink}}/modelarts/train-job/{{.JobID}}/model_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a> |
|
|
|
</div> |
|
|
|
<div class="ui tab active" data-tab="first{{$k}}"> |
|
|
|
<div style="padding-top: 10px;"> |
|
|
|
<div class="tab_2_content"> |
|
|
|
<div class="ac-grid ac-grid-col2"> |
|
|
|
<div class="ac-grid-col"> |
|
|
|
<table class="ti-form"> |
|
|
|
<tbody class="ti-text-form"> |
|
|
|
<tr class="ti-no-ng-animate"> |
|
|
|
<td class="ti-no-ng-animate ti-text-form-label text-width80"> |
|
|
|
{{$.i18n.Tr "repo.cloudbrain_task"}} |
|
|
|
</td> |
|
|
|
<td class="ti-text-form-content"> |
|
|
|
<div class="text-span text-span-w"> |
|
|
|
{{.DisplayJobName}} |
|
|
|
</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.status"}} |
|
|
|
</td> |
|
|
|
|
|
|
|
<td class="ti-text-form-content"> |
|
|
|
<div class="text-span text-span-w" id="{{.VersionName}}-status"> |
|
|
|
{{.Status}} |
|
|
|
</div> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
<tr class="ti-no-ng-animate"> |
|
|
|
<td class="ti-no-ng-animate ti-text-form-label text-width80"> |
|
|
|
{{$.i18n.Tr "repo.cloudbrain_creator"}} |
|
|
|
</td> |
|
|
|
|
|
|
|
<td class="ti-text-form-content"> |
|
|
|
<div class="text-span text-span-w" id="{{.VersionName}}-mirror"> |
|
|
|
{{.User.Name}} |
|
|
|
</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.run_version"}} |
|
|
|
</td> |
|
|
|
|
|
|
|
<td class="ti-text-form-content"> |
|
|
|
<div class="text-span text-span-w"> |
|
|
|
{{if .VersionName}}{{.VersionName}}{{else}}--{{end}} |
|
|
|
</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.train_job.start_time"}} |
|
|
|
</td> |
|
|
|
|
|
|
|
<td class="ti-text-form-content"> |
|
|
|
<div class="text-span text-span-w"> |
|
|
|
<span style="font-size: 12px;" id="{{.VersionName}}-startTime"> |
|
|
|
{{if not (eq .StartTime 0)}} |
|
|
|
{{TimeSinceUnix1 .StartTime}} |
|
|
|
{{else}} |
|
|
|
-- |
|
|
|
{{end}}</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.train_job.dura_time"}} |
|
|
|
</td> |
|
|
|
|
|
|
|
<td class="ti-text-form-content"> |
|
|
|
<div class="text-span text-span-w" |
|
|
|
id="{{.VersionName}}-duration"> |
|
|
|
{{.TrainJobDuration}} |
|
|
|
</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.model_name"}} |
|
|
|
</td> |
|
|
|
|
|
|
|
<td class="ti-text-form-content"> |
|
|
|
<div class="text-span text-span-w">{{if .ModelName}}{{.ModelName}}{{else}}--{{end}}</div> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
<tr class="ti-no-ng-animate"> |
|
|
|
<td class="ti-no-ng-animate ti-text-form-label text-width80"> |
|
|
|
{{$.i18n.Tr "repo.modelconvert.modelversion"}} |
|
|
|
</td> |
|
|
|
|
|
|
|
<td class="ti-text-form-content"> |
|
|
|
<div class="text-span text-span-w">{{if .ModelVersion}}{{.ModelVersion}}{{else}}--{{end}}</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" {{if .CkptName}}title="{{.CkptName}}"{{end}}>{{if .CkptName}}{{.CkptName}}{{else}}--{{end}}</div> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
</tbody> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
<div class="ac-grid-col"> |
|
|
|
<table class="ti-form"> |
|
|
|
<tbody class="ti-text-form"> |
|
|
|
{{ if eq $.Spec.ComputeResource "GPU"}} |
|
|
|
<tr class="ti-no-ng-animate"> |
|
|
|
<td class="ti-no-ng-animate ti-text-form-label text-width80"> |
|
|
|
{{$.i18n.Tr "cloudbrain.mirror"}} |
|
|
|
</td> |
|
|
|
<td class="ti-text-form-content"> |
|
|
|
<div class="text-span text-span-w"> |
|
|
|
<span class="ui poping up clipboard" data-position="top center" id="clipboard-btn-image" style="cursor:pointer" |
|
|
|
data-clipboard-text="{{.EngineName}}" |
|
|
|
data-success="{{$.i18n.Tr "repo.copy_link_success"}}" |
|
|
|
data-error="{{$.i18n.Tr "repo.copy_link_error"}}" |
|
|
|
data-content="{{$.i18n.Tr "repo.copy_link"}}" |
|
|
|
data-variation="inverted tiny" |
|
|
|
> |
|
|
|
<span title="{{.EngineName}}">{{.EngineName}}</span> |
|
|
|
</span> |
|
|
|
</div> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
{{else}} |
|
|
|
<tr class="ti-no-ng-animate"> |
|
|
|
<td class="ti-no-ng-animate ti-text-form-label text-width80"> |
|
|
|
{{$.i18n.Tr "repo.modelarts.train_job.AI_driver"}} |
|
|
|
</td> |
|
|
|
<td class="ti-text-form-content"> |
|
|
|
<div class="text-span text-span-w"> |
|
|
|
{{.EngineName}} |
|
|
|
</div> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
{{end}} |
|
|
|
<tr class="ti-no-ng-animate"> |
|
|
|
<td class="ti-no-ng-animate ti-text-form-label text-width80"> |
|
|
|
{{$.i18n.Tr "repo.modelarts.code_version"}} |
|
|
|
</td> |
|
|
|
|
|
|
|
<td class="ti-text-form-content"> |
|
|
|
<div class="text-span text-span-w"> |
|
|
|
{{.BranchName}} |
|
|
|
<span style="margin-left:1rem" class="ui label">{{SubStr .CommitID 0 10}}</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.train_job.start_file"}} |
|
|
|
</td> |
|
|
|
|
|
|
|
<td class="ti-text-form-content"> |
|
|
|
<div class="text-span text-span-w"> |
|
|
|
{{.BootFile}} |
|
|
|
</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.train_job.run_parameter"}} |
|
|
|
</td> |
|
|
|
|
|
|
|
<td class="ti-text-form-content"> |
|
|
|
<div class="text-span text-span-w" title="{{.Parameters}}"> |
|
|
|
{{if .Parameters}}{{.Parameters}}{{else}}--{{end}} |
|
|
|
</div> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
<tr class="ti-no-ng-animate"> |
|
|
|
<td class="ti-no-ng-animate ti-text-form-label text-width80"> |
|
|
|
{{$.i18n.Tr "repo.grampus.train_job.ai_center"}} |
|
|
|
</td> |
|
|
|
|
|
|
|
<td class="ti-text-form-content"> |
|
|
|
<div class="text-span text-span-w" id="{{.VersionName}}-ai_center"> |
|
|
|
{{if $.ai_center}}{{$.ai_center}}{{else}}--{{end}} |
|
|
|
</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.train_job.standard"}} |
|
|
|
</td> |
|
|
|
|
|
|
|
<td class="ti-text-form-content spec"> |
|
|
|
<div class="text-span text-span-w"></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.train_job.compute_node"}} |
|
|
|
</td> |
|
|
|
<td class="ti-text-form-content"> |
|
|
|
<div class="text-span text-span-w"> |
|
|
|
{{.WorkServerNumber}} |
|
|
|
</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.train_job.description"}} |
|
|
|
</td> |
|
|
|
|
|
|
|
<td class="ti-text-form-content"> |
|
|
|
<div class="text-span text-span-w" |
|
|
|
title="{{.Description}}"> |
|
|
|
{{if .Description}}{{.Description}}{{else}}--{{end}} |
|
|
|
</div> |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
</tbody> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div style="clear:both"> |
|
|
|
<table style="border:none" class="ui fixed small stackable table"> |
|
|
|
<thead> |
|
|
|
<tr><th style="color: #8a8e99;font-size:12px" class="three wide left aligned">{{$.i18n.Tr "dataset.file"}}</th> |
|
|
|
</tr></thead> |
|
|
|
<tbody> |
|
|
|
{{range $m ,$n := $.datasetDownload}} |
|
|
|
<tr> |
|
|
|
<td style="word-wrap: break-word;word-break: break-all;"> |
|
|
|
{{if eq .IsDelete true}} |
|
|
|
{{.DatasetName}}({{$.i18n.Tr "dataset.file_deleted"}}) |
|
|
|
{{else}} |
|
|
|
<a href="{{.RepositoryLink}}" target="_blank">{{.DatasetName}}</a> |
|
|
|
{{end}} |
|
|
|
</td> |
|
|
|
</tr> |
|
|
|
{{end}} |
|
|
|
</tbody> |
|
|
|
</table> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="ui tab" data-tab="second{{$k}}"> |
|
|
|
<div class="detail-log-content detail-log-content-{{.VersionName}}" |
|
|
|
{{if eq .ComputeResource "NPU"}} |
|
|
|
data-multiplenode="true" |
|
|
|
{{end}} |
|
|
|
data-noscroll="true" |
|
|
|
data-logapiurl="{{$.RepoLink}}/grampus/train-job/{{.JobID}}/log" |
|
|
|
data-logdownloadurl="/api/v1/repos{{$.RepoLink}}/grampus/train-job/{{.JobID}}/download_log" |
|
|
|
data-workservernumber="{{.WorkServerNumber}}" |
|
|
|
data-version="{{.VersionName}}"> |
|
|
|
{{template "custom/task_log" Dict "$" $ "i18n" $.i18n }} |
|
|
|
</div> |
|
|
|
<div class="ui modal full-log-dlg-{{.VersionName}} container" style="height:90%;margin:3rem auto;"> |
|
|
|
<div id="log-file-title" style="font-size: 16px;font-weight:600;padding:20px 30px 16px;">{{$.i18n.Tr "repo.modelarts.log_file"}}</div> |
|
|
|
<div style="padding:0 50px 10px 30px;height:100%"> |
|
|
|
<div class="detail-log-fullscreen-content detail-log-fullscreen-content-{{.VersionName}}" style="height:100%;" |
|
|
|
{{if eq .ComputeResource "NPU"}} |
|
|
|
data-multiplenode="true" |
|
|
|
{{end}} |
|
|
|
data-noscroll="true" |
|
|
|
data-logapiurl="{{$.RepoLink}}/grampus/train-job/{{.JobID}}/log" |
|
|
|
data-logdownloadurl="/api/v1/repos{{$.RepoLink}}/grampus/train-job/{{.JobID}}/download_log" |
|
|
|
data-workservernumber="{{.WorkServerNumber}}" |
|
|
|
data-version="{{.VersionName}}"> |
|
|
|
{{template "custom/task_log" Dict "$" $ "i18n" $.i18n "Full" true }} |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="ui tab" data-tab="five{{$k}}"> |
|
|
|
<div style="position: relative;border: 1px solid rgba(0,0,0,.2);padding: 0 10px;margin-top: 10px;"> |
|
|
|
<div class="ui attached info" id="info{{.VersionName}}" |
|
|
|
style="height: 300px !important; overflow: auto;"> |
|
|
|
<div class="ui inverted active dimmer"> |
|
|
|
<div class="ui loader"></div> |
|
|
|
</div> |
|
|
|
<span class="info_text"> |
|
|
|
|
|
|
|
</span> |
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
<div class="ui tab" data-tab="four{{$k}}" style="position: relative;"> |
|
|
|
<i class="ri-refresh-line metric_chart" |
|
|
|
style="position: absolute;right: 25%;color:#3291f8;z-index:99;cursor: pointer;" |
|
|
|
data-version="{{.VersionName}}"></i> |
|
|
|
<div class="node-select" style="display:none;"> |
|
|
|
<select class="ui dropdown"></select> |
|
|
|
</div> |
|
|
|
<div class="ui inverted active dimmer" style="display: none;"> |
|
|
|
<div class="ui loader"></div> |
|
|
|
</div> |
|
|
|
<div id="metric-{{.VersionName}}" style="height: 260px;width: 870px;" |
|
|
|
{{if eq .ComputeResource "NPU"}} |
|
|
|
data-multiplenode="true" |
|
|
|
{{end}} |
|
|
|
data-workservernumber="{{.WorkServerNumber}}" |
|
|
|
></div> |
|
|
|
</div> |
|
|
|
<div class="ui tab" data-tab="third{{$k}}"> |
|
|
|
<input type="hidden" name="model{{.VersionName}}" value="-1"> |
|
|
|
<input type="hidden" name="modelback{{.VersionName}}" value="-1"> |
|
|
|
<div style="display: flex;justify-content: space-between;"> |
|
|
|
<div class='ui breadcrumb model_file_bread' id='file_breadcrumb{{.VersionName}}'> |
|
|
|
<div class="active section">{{.VersionName}}</div> |
|
|
|
<div class="divider"> / </div> |
|
|
|
|
|
|
|
</div> |
|
|
|
<a id="{{.VersionName}}-result-down" style="padding-right: 1%;display: none;" |
|
|
|
class='{{if $.canDownload}}ti-download-file{{else}}disabled{{end}} file-info' |
|
|
|
href="{{$.RepoLink}}/grampus/train-job/{{.JobID}}/download_multi_model?version_name={{.VersionName}}"> |
|
|
|
<i class="ri-download-cloud-2-line"></i> |
|
|
|
<span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.all_result_download"}}</span> |
|
|
|
</a> |
|
|
|
</div> |
|
|
|
<div id="dir_list{{.VersionName}}"> |
|
|
|
</div> |
|
|
|
{{if eq .ComputeResource "CPU/GPU"}} |
|
|
|
<div style="display:flex;align-items: center;justify-content: end;color: #f2711c;"> |
|
|
|
<i class="ri-error-warning-line" style="margin-right:0.5rem;"></i> |
|
|
|
<span>{{$.i18n.Tr "repo.file_limit_100"}}</span> |
|
|
|
</div> |
|
|
|
{{end}} |
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<!-- {{template "custom/max_log" .}} --> |
|
|
|
{{end}} {{template "base/paginate" .}} |
|
|
|
</div> |
|
|
|
<!-- 确认模态框 --> |
|
|
|
<div id="deletemodel"> |
|
|
|
<div class="ui basic modal"> |
|
|
|
<div class="ui icon header"> |
|
|
|
<i class="trash icon"></i> {{.i18n.Tr "cloudbrain.delete_task"}} |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="content"> |
|
|
|
<p>{{.i18n.Tr "cloudbrain.task_delete_confirm"}}</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="newmodel"> |
|
|
|
<div class="ui modal second"> |
|
|
|
<div class="header" style="padding: 1rem;background-color: rgba(240, 240, 240, 100);"> |
|
|
|
<h4 id="model_header">{{.i18n.Tr "repo.model.manage.import_new_model"}}</h4> |
|
|
|
</div> |
|
|
|
<div class="content content-padding"> |
|
|
|
<form id="formId" method="POST" class="ui form"> |
|
|
|
<div class="ui error message"> |
|
|
|
</div> |
|
|
|
{{$.CsrfTokenHtml}} |
|
|
|
<input type="hidden" name="trainTaskCreate" value="true"> |
|
|
|
|
|
|
|
<div class="required inline field"> |
|
|
|
<label>{{.i18n.Tr "repo.modelarts.train_job"}}</label> |
|
|
|
<input type="hidden" class="width83" id="jobId" name="jobId" readonly required> |
|
|
|
<input type="hidden" id="versionName" name="versionName" value="V0001"> |
|
|
|
<input style="width: 45%;" id="JobName" readonly required> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="required inline field" id="modelname"> |
|
|
|
<label>{{.i18n.Tr "repo.model.manage.model_name"}}</label> |
|
|
|
<input style="width: 45%;" id="name" name="name" required maxlength="25" |
|
|
|
onkeyup="this.value=this.value.replace(/[, ]/g,'')"> |
|
|
|
</div> |
|
|
|
<div class="required inline field" id="verionname"> |
|
|
|
<label>{{.i18n.Tr "repo.modelconvert.modelversion"}}</label> |
|
|
|
<input style="width: 45%;" id="version" name="version" value="" readonly required maxlength="255"> |
|
|
|
</div> |
|
|
|
<div class="unite min_title inline field required"> |
|
|
|
<label>{{.i18n.Tr "repo.model.manage.engine"}}</label> |
|
|
|
<div class="ui dropdown selection search width70" id="choice_Engine"> |
|
|
|
<input type="hidden" id="engine" name="engine" required> |
|
|
|
<div class="default text">{{.i18n.Tr "repo.model.manage.select.engine"}}</div> |
|
|
|
<i class="dropdown icon"></i> |
|
|
|
<div class="menu" id="job-Engine"> |
|
|
|
<option class="active item" data-value="0">PyTorch</option> |
|
|
|
<option class="item" data-value="1">TensorFlow</option> |
|
|
|
<option class="item" data-value="2">MindSpore</option> |
|
|
|
<option class="item" data-value="4">PaddlePaddle</option> |
|
|
|
<option class="item" data-value="5">OneFlow</option> |
|
|
|
<option class="item" data-value="6">MXNet</option> |
|
|
|
<option class="item" data-value="3">Other</option> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
<div class="unite min_title inline fields required"> |
|
|
|
<div class="field required"> |
|
|
|
<label for="modelSelectedFile">{{.i18n.Tr "repo.model.manage.modelfile"}}</label> |
|
|
|
</div> |
|
|
|
<div class="thirteen wide field" style="position:relative"> |
|
|
|
<input id="modelSelectedFile" type="text" readonly required onclick="showMenu();" name="modelSelectedFile" > |
|
|
|
<div id="menuContent" class="menuContent" style="display:none;"> |
|
|
|
<ul id="treeDemo" class="ztree"></ul> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="inline field"> |
|
|
|
<label>{{.i18n.Tr "repo.model.manage.modellabel"}}</label> |
|
|
|
<input style="width: 83%;margin-left: 7px;" id="label" name="label" maxlength="255" |
|
|
|
placeholder='{{.i18n.Tr "repo.modelarts.train_job.label_place"}}'> |
|
|
|
</div> |
|
|
|
{{if eq $.Repository.IsPrivate false}} |
|
|
|
<div class="inline fields"> |
|
|
|
<label>{{.i18n.Tr "repo.model.manage.modelaccess"}} </label> |
|
|
|
<div class="field"> |
|
|
|
<div class="ui radio checkbox"> |
|
|
|
<input type="radio" name="isPrivate" checked="checked" value="false"> |
|
|
|
<label>{{.i18n.Tr "repo.model.manage.modelaccess.public"}}</label> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="field"> |
|
|
|
<div class="ui radio checkbox"> |
|
|
|
<input type="radio" name="isPrivate" value="true"> |
|
|
|
<label>{{.i18n.Tr "repo.model.manage.modelaccess.private"}}</label> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
{{end}} |
|
|
|
<div class="inline field"> |
|
|
|
<label for="description">{{.i18n.Tr "repo.model.manage.modeldesc"}}</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 onclick="createModel()" 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> |
|
|
|
</div> |
|
|
|
{{template "custom/export_dataset" .}} |
|
|
|
</div> |
|
|
|
{{template "base/footer" .}} |
|
|
|
<script type="text/javascript" src="/self/ztree/js/jquery.ztree.core.js?v={{MD5 AppVer}}"></script> |
|
|
|
<script type="text/javascript" src="/self/ztree/js/jquery.ztree.excheck.js?v={{MD5 AppVer}}"></script> |
|
|
|
<script src="{{StaticUrlPrefix}}/js/specsuse.js?v={{MD5 AppVer}}" type="text/javascript"></script> |
|
|
|
<script> |
|
|
|
;(function() { |
|
|
|
var SPEC = {{ .Spec }}; |
|
|
|
var showPoint = false; |
|
|
|
var specStr = window.renderSpecStr(SPEC, showPoint, { |
|
|
|
gpu_memory: {{$.i18n.Tr "cloudbrain.gpu_memory"}}, |
|
|
|
free: {{$.i18n.Tr "cloudbrain.free"}}, |
|
|
|
point_hr: {{$.i18n.Tr "cloudbrain.point_hr"}}, |
|
|
|
memory: {{$.i18n.Tr "cloudbrain.memory"}}, |
|
|
|
shared_memory: {{$.i18n.Tr "cloudbrain.shared_memory"}}, |
|
|
|
no_use_resource:{{$.i18n.Tr "cloudbrain.no_use_resource"}}, |
|
|
|
}); |
|
|
|
$('td.ti-text-form-content.spec').text(specStr); |
|
|
|
})(); |
|
|
|
var setting = { |
|
|
|
check: { |
|
|
|
enable: true, |
|
|
|
chkboxType: {"Y":"ps", "N":"ps"} |
|
|
|
}, |
|
|
|
view: { |
|
|
|
dblClickExpand: false |
|
|
|
}, |
|
|
|
callback: { |
|
|
|
beforeClick: beforeClick, |
|
|
|
onCheck: onCheck |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
function beforeClick(treeId, treeNode) { |
|
|
|
var zTree = $.fn.zTree.getZTreeObj("treeDemo"); |
|
|
|
zTree.checkNode(treeNode, !treeNode.checked, null, true); |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
function onCheck(e, treeId, treeNode) { |
|
|
|
var zTree = $.fn.zTree.getZTreeObj("treeDemo"), |
|
|
|
nodes = zTree.getCheckedNodes(true), |
|
|
|
v = ""; |
|
|
|
for (var i=0, l=nodes.length; i<l; i++) { |
|
|
|
if(nodes[i].isParent){ |
|
|
|
continue; |
|
|
|
} |
|
|
|
var pathNodes = nodes[i].getPath(); |
|
|
|
var path =""; |
|
|
|
for(var j=0;j<pathNodes.length;j++){ |
|
|
|
if(j ==0){ |
|
|
|
path += pathNodes[j].name; |
|
|
|
}else{ |
|
|
|
path += "/" + pathNodes[j].name; |
|
|
|
} |
|
|
|
} |
|
|
|
v += path + ";"; |
|
|
|
} |
|
|
|
if (v.length > 0 ) v = v.substring(0, v.length-1); |
|
|
|
var cityObj = $("#modelSelectedFile"); |
|
|
|
cityObj.attr("value", v); |
|
|
|
} |
|
|
|
|
|
|
|
function showMenu() { |
|
|
|
var cityObj = $("#modelSelectedFile"); |
|
|
|
var cityOffset = $("#modelSelectedFile").offset(); |
|
|
|
$("#menuContent").slideDown("fast"); |
|
|
|
$("body").bind("mousedown", onBodyDown); |
|
|
|
} |
|
|
|
function hideMenu() { |
|
|
|
$("#menuContent").fadeOut("fast"); |
|
|
|
$("body").unbind("mousedown", onBodyDown); |
|
|
|
} |
|
|
|
function onBodyDown(event) { |
|
|
|
if (!(event.target.id == "menuBtn" || event.target.id == "modelSelectedFile" || event.target.id == "menuContent" || $(event.target).parents("#menuContent").length>0)) { |
|
|
|
hideMenu(); |
|
|
|
} |
|
|
|
} |
|
|
|
let dirKey="isOnlyDir--:&"; |
|
|
|
function loadSelectedModelFile(trainJob){ |
|
|
|
$('#choice_file').dropdown('clear') |
|
|
|
$("#model-file").empty() |
|
|
|
if(trainJob ==null || trainJob ==""){ |
|
|
|
}else{ |
|
|
|
let type = trainJob.Type; |
|
|
|
if(type == 2){ |
|
|
|
if(trainJob.ComputeResource=="NPU"){ |
|
|
|
type=1; |
|
|
|
}else{ |
|
|
|
type=0; |
|
|
|
} |
|
|
|
} |
|
|
|
$.get(`/${userName}/${repoPath}/modelmanage/query_train_model?jobName=${trainJob.JobName}&type=${type}&VersionName=${trainJob.VersionName}`, (data) => { |
|
|
|
const n_length = data.length |
|
|
|
let file_html='' |
|
|
|
let firstFileName ='' |
|
|
|
var zNodes=[]; |
|
|
|
var nodesMap={}; |
|
|
|
for (let i=0;i<n_length;i++){ |
|
|
|
var parentNodeMap = nodesMap; |
|
|
|
var fileSplits = data[i].FileName.split("/"); |
|
|
|
for(let j=0;j < fileSplits.length;j++){ |
|
|
|
if(fileSplits[j] == ""){ |
|
|
|
break; |
|
|
|
} |
|
|
|
if(parentNodeMap[fileSplits[j]] == null){ |
|
|
|
parentNodeMap[fileSplits[j]] = {}; |
|
|
|
} |
|
|
|
parentNodeMap = parentNodeMap[fileSplits[j]]; |
|
|
|
} |
|
|
|
} |
|
|
|
for (let i=0;i<n_length;i++){ |
|
|
|
var parentNodeMap = nodesMap; |
|
|
|
var fileSplits = data[i].FileName.split("/"); |
|
|
|
for(let j=0;j < fileSplits.length;j++){ |
|
|
|
if(fileSplits[j] == ""){ |
|
|
|
if(data[i].FileName[data[i].FileName.length -1] =="/"){ |
|
|
|
if(Object.keys(parentNodeMap).length ==0){ |
|
|
|
parentNodeMap[dirKey]="true"; |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
parentNodeMap = parentNodeMap[fileSplits[j]]; |
|
|
|
} |
|
|
|
} |
|
|
|
convertToNode(zNodes,nodesMap); |
|
|
|
$.fn.zTree.init($("#treeDemo"), setting, zNodes); |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
function convertToNode(nodeList,nodesMap){ |
|
|
|
var keyList = Object.keys(nodesMap); |
|
|
|
keyList.sort(function(a,b){ |
|
|
|
return a-b; |
|
|
|
}); |
|
|
|
var isFirst = true; |
|
|
|
for(var i=0; i<keyList.length;i++){ |
|
|
|
var node = {}; |
|
|
|
node["name"] = keyList[i]; |
|
|
|
nodeList.push(node); |
|
|
|
if(nodesMap[keyList[i]] != null && Object.keys(nodesMap[keyList[i]]).length >0){ |
|
|
|
if(nodesMap[keyList[i]][dirKey] != null){ |
|
|
|
node["open"] = false; |
|
|
|
node["isParent"] = true; |
|
|
|
}else{ |
|
|
|
node["children"]=[]; |
|
|
|
if(isFirst){ |
|
|
|
node["open"] = true; |
|
|
|
isFirst= false; |
|
|
|
} |
|
|
|
convertToNode(node["children"],nodesMap[keyList[i]]); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
function showcreate(obj) { |
|
|
|
$('.ui.modal.second') |
|
|
|
.modal({ |
|
|
|
centered: false, |
|
|
|
onShow: function () { |
|
|
|
$('input[name="version"]').addClass('model_disabled') |
|
|
|
$('#JobName').val(obj.DisplayJobName).addClass('model_disabled') |
|
|
|
$('input[name="jobId"]').val(obj.JobID) |
|
|
|
$('input[name="versionName"]').val("V0001") |
|
|
|
|
|
|
|
if(obj.ComputeResource=="NPU"){ |
|
|
|
if (obj.EngineName != null && obj.EngineName != "") { |
|
|
|
srcEngine = obj.EngineName.split('-')[0] |
|
|
|
srcEngine = srcEngine.trim().toLowerCase(); |
|
|
|
if (srcEngine == 'tensorflow') { |
|
|
|
$('#choice_Engine .default.text').text("TensorFlow"); |
|
|
|
$('#choice_Engine input[name="engine"]').val(1) |
|
|
|
} |
|
|
|
if (srcEngine == 'mindspore') { |
|
|
|
$('#choice_Engine .default.text').text("MindSpore"); |
|
|
|
$('#choice_Engine input[name="engine"]').val(2) |
|
|
|
} |
|
|
|
} |
|
|
|
}else{ |
|
|
|
$('#choice_Engine .default.text').text("PyTorch"); |
|
|
|
$('#choice_Engine input[name="engine"]').val(0) |
|
|
|
} |
|
|
|
$('#choice_Engine .default.text').css({ "color": "rgb(0, 0, 0,0.87)" }) |
|
|
|
$('.ui.dimmer').css({ "background-color": "rgb(136, 136, 136,0.7)" }) |
|
|
|
createModelName(); |
|
|
|
loadSelectedModelFile(obj); |
|
|
|
}, |
|
|
|
onHide: function () { |
|
|
|
$('.ui.dimmer').css({ "background-color": "" }) |
|
|
|
$('.ui.error.message').text() |
|
|
|
$('.ui.error.message').css('display', 'none') |
|
|
|
} |
|
|
|
}) |
|
|
|
.modal('show') |
|
|
|
} |
|
|
|
function createModel() { |
|
|
|
if(!$('input#modelSelectedFile').val()){ |
|
|
|
$('input#modelSelectedFile').parent().addClass('error') |
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
let url_href = `/${userName}/${repoPath}/modelmanage/create_new_model` |
|
|
|
let data = $("#formId").serialize() |
|
|
|
var radio = document.getElementsByName("isPrivate"); |
|
|
|
if(radio == null || radio.length == 0){ |
|
|
|
data +="&isPrivate=true"; |
|
|
|
} |
|
|
|
$("#mask").css({ "display": "block", "z-index": "9999" }) |
|
|
|
$.ajax({ |
|
|
|
url: url_href, |
|
|
|
type: 'POST', |
|
|
|
data: data, |
|
|
|
success: function (res) { |
|
|
|
const modelName = $('#formId #name').val(); |
|
|
|
$('input[name="engine_name"]').val(""); |
|
|
|
$('input[name="engine"]').val(""); |
|
|
|
$('input[name="jobId"]').val(""); |
|
|
|
$('input[name="label"]').val(""); |
|
|
|
$('input[name="description"]').val(""); |
|
|
|
var cityObj = $("#modelSelectedFile"); |
|
|
|
cityObj.attr("value", ""); |
|
|
|
document.getElementById("formId").reset(); |
|
|
|
location.href = `/${userName}/${repoPath}/modelmanage/model_readme_tmpl?name=${encodeURIComponent(modelName)}` |
|
|
|
$('.ui.modal.second').modal('hide') |
|
|
|
}, |
|
|
|
error: function (xhr) { |
|
|
|
// 隐藏 loading |
|
|
|
// 只有请求不正常(状态码不为200)才会执行 |
|
|
|
$('.ui.error.message').text(xhr.responseText) |
|
|
|
$('.ui.error.message').css('display', 'block') |
|
|
|
}, |
|
|
|
complete: function (xhr) { |
|
|
|
$("#mask").css({ "display": "none", "z-index": "1" }) |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
} |
|
|
|
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") |
|
|
|
} |
|
|
|
|
|
|
|
$('.menu .item').tab() |
|
|
|
$(document).ready(function () { |
|
|
|
$('.ui.accordion').accordion({ selector: { trigger: '.icon' } }); |
|
|
|
}); |
|
|
|
$(document).ready(function () { |
|
|
|
$('.secondary.menu .item').tab(); |
|
|
|
}); |
|
|
|
|
|
|
|
let userName |
|
|
|
let repoPath |
|
|
|
let jobID |
|
|
|
let downlaodFlag = {{ $.canDownload }} |
|
|
|
$(document).ready(function () { |
|
|
|
let url = window.location.href; |
|
|
|
let urlArr = url.split('/') |
|
|
|
userName = urlArr.slice(-5)[0] |
|
|
|
repoPath = urlArr.slice(-4)[0] |
|
|
|
jobID = urlArr.slice(-1)[0] |
|
|
|
}) |
|
|
|
function stopBubbling(e) { |
|
|
|
e = window.event || e; |
|
|
|
if (e.stopPropagation) { |
|
|
|
e.stopPropagation(); //阻止事件 冒泡传播 |
|
|
|
} else { |
|
|
|
e.cancelBubble = true; //ie兼容 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
function renderSize(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(0);//保留的小数位数 |
|
|
|
return size + unitArr[index]; |
|
|
|
} |
|
|
|
</script> |
|
|
|
{{ template "repo/cloudbrain/cloudbraindetail" .}} |