Reviewed-on: https://git.openi.org.cn/OpenI/aiforge/pulls/2926 Reviewed-by: zhoupzh <zhoupzh@pcl.ac.cn>res-api
@@ -1,6 +1,10 @@ | |||||
package dataset | package dataset | ||||
import "code.gitea.io/gitea/models" | |||||
import ( | |||||
"strings" | |||||
"code.gitea.io/gitea/models" | |||||
) | |||||
func GetResourceType(cloudbrainType int) string { | func GetResourceType(cloudbrainType int) string { | ||||
if cloudbrainType == 0 { | if cloudbrainType == 0 { | ||||
@@ -33,3 +37,23 @@ func IsShowDataSetOfCurrentRepo(repoID int64) bool { | |||||
return true | return true | ||||
} | } | ||||
func GetFilterDeletedAttachments(uuids string) (string, string) { | |||||
attachments, err := models.GetAttachmentsByUUIDs(strings.Split(uuids, ";")) | |||||
if err != nil { | |||||
return "", "" | |||||
} | |||||
uuidR := "" | |||||
filenames := "" | |||||
for i, attachment := range attachments { | |||||
if i == 0 { | |||||
uuidR += attachment.UUID | |||||
filenames += attachment.Name | |||||
} else { | |||||
uuidR += ";" + attachment.UUID | |||||
filenames += ";" + attachment.Name | |||||
} | |||||
} | |||||
return uuidR, filenames | |||||
} |
@@ -15,6 +15,8 @@ import ( | |||||
"time" | "time" | ||||
"unicode/utf8" | "unicode/utf8" | ||||
"code.gitea.io/gitea/modules/dataset" | |||||
"code.gitea.io/gitea/services/cloudbrain/resource" | "code.gitea.io/gitea/services/cloudbrain/resource" | ||||
"code.gitea.io/gitea/services/reward/point/account" | "code.gitea.io/gitea/services/reward/point/account" | ||||
@@ -158,16 +160,10 @@ func cloudBrainNewDataPrepare(ctx *context.Context) error { | |||||
ctx.Data["model_version"] = ctx.Cloudbrain.ModelVersion | ctx.Data["model_version"] = ctx.Cloudbrain.ModelVersion | ||||
ctx.Data["pre_train_model_url"] = ctx.Cloudbrain.PreTrainModelUrl | ctx.Data["pre_train_model_url"] = ctx.Cloudbrain.PreTrainModelUrl | ||||
ctx.Data["compute_resource"] = ctx.Cloudbrain.ComputeResource | ctx.Data["compute_resource"] = ctx.Cloudbrain.ComputeResource | ||||
ctx.Data["attachment"] = ctx.Cloudbrain.Uuid | |||||
uuids, datasetNames := dataset.GetFilterDeletedAttachments(ctx.Cloudbrain.Uuid) | |||||
ctx.Data["attachment"] = uuids | |||||
ctx.Data["dataset_name"] = datasetNames | |||||
ctx.Data["cluster_type"] = models.OpenICluster | ctx.Data["cluster_type"] = models.OpenICluster | ||||
_, _, datasetNames, _, err := getDatasUrlListByUUIDS(ctx.Cloudbrain.Uuid) | |||||
if err != nil { | |||||
log.Info("query dataset error," + err.Error()) | |||||
ctx.Data["dataset_name"] = "" | |||||
} else { | |||||
ctx.Data["dataset_name"] = datasetNames | |||||
} | |||||
} | } | ||||
return nil | return nil | ||||
@@ -12,6 +12,8 @@ import ( | |||||
"strings" | "strings" | ||||
"time" | "time" | ||||
"code.gitea.io/gitea/modules/dataset" | |||||
"code.gitea.io/gitea/services/cloudbrain/resource" | "code.gitea.io/gitea/services/cloudbrain/resource" | ||||
"code.gitea.io/gitea/services/reward/point/account" | "code.gitea.io/gitea/services/reward/point/account" | ||||
@@ -141,20 +143,21 @@ func grampusTrainJobNewDataPrepare(ctx *context.Context, processType string) err | |||||
} | } | ||||
if ctx.Cloudbrain != nil { | if ctx.Cloudbrain != nil { | ||||
ctx.Data["attachment"] = ctx.Cloudbrain.Uuid | |||||
uuids, datasetNames := dataset.GetFilterDeletedAttachments(ctx.Cloudbrain.Uuid) | |||||
ctx.Data["attachment"] = uuids | |||||
ctx.Data["boot_file"] = ctx.Cloudbrain.BootFile | ctx.Data["boot_file"] = ctx.Cloudbrain.BootFile | ||||
ctx.Data["image_id"] = ctx.Cloudbrain.ImageID | ctx.Data["image_id"] = ctx.Cloudbrain.ImageID | ||||
ctx.Data["run_para_list"] = ctx.Cloudbrain.Parameters | ctx.Data["run_para_list"] = ctx.Cloudbrain.Parameters | ||||
ctx.Data["description"] = ctx.Cloudbrain.Description | ctx.Data["description"] = ctx.Cloudbrain.Description | ||||
ctx.Data["branch_name"] = ctx.Cloudbrain.BranchName | ctx.Data["branch_name"] = ctx.Cloudbrain.BranchName | ||||
ctx.Data["engine_name"] = ctx.Cloudbrain.EngineName | ctx.Data["engine_name"] = ctx.Cloudbrain.EngineName | ||||
ctx.Data["WorkServerNumber"] = ctx.Cloudbrain.WorkServerNumber | |||||
ctx.Data["work_server_number"] = ctx.Cloudbrain.WorkServerNumber | |||||
if ctx.Cloudbrain.Image != "" { | if ctx.Cloudbrain.Image != "" { | ||||
ctx.Data["image"] = ctx.Cloudbrain.Image | ctx.Data["image"] = ctx.Cloudbrain.Image | ||||
} else { | } else { | ||||
ctx.Data["image"] = ctx.Cloudbrain.EngineName | ctx.Data["image"] = ctx.Cloudbrain.EngineName | ||||
} | } | ||||
ctx.Data["dataset_name"] = ctx.Cloudbrain.DatasetName | |||||
ctx.Data["dataset_name"] = datasetNames | |||||
ctx.Data["model_name"] = ctx.Cloudbrain.ModelName | ctx.Data["model_name"] = ctx.Cloudbrain.ModelName | ||||
ctx.Data["model_version"] = ctx.Cloudbrain.ModelVersion | ctx.Data["model_version"] = ctx.Cloudbrain.ModelVersion | ||||
@@ -15,6 +15,8 @@ import ( | |||||
"time" | "time" | ||||
"unicode/utf8" | "unicode/utf8" | ||||
"code.gitea.io/gitea/modules/dataset" | |||||
"code.gitea.io/gitea/modules/modelarts_cd" | "code.gitea.io/gitea/modules/modelarts_cd" | ||||
"code.gitea.io/gitea/services/cloudbrain/resource" | "code.gitea.io/gitea/services/cloudbrain/resource" | ||||
"code.gitea.io/gitea/services/reward/point/account" | "code.gitea.io/gitea/services/reward/point/account" | ||||
@@ -931,14 +933,11 @@ func trainJobNewVersionDataPrepare(ctx *context.Context) error { | |||||
ctx.ServerError("GetBranches error:", err) | ctx.ServerError("GetBranches error:", err) | ||||
return err | return err | ||||
} | } | ||||
_, _, datasetNames, _, err := getDatasUrlListByUUIDS(task.Uuid) | |||||
if err != nil { | |||||
log.Info("query dataset error," + err.Error()) | |||||
//ctx.ServerError("GetAllUserAttachments failed:", err) | |||||
//return err | |||||
} else { | |||||
ctx.Data["dataset_name"] = datasetNames | |||||
} | |||||
uuids, datasetNames := dataset.GetFilterDeletedAttachments(task.Uuid) | |||||
ctx.Data["dataset_name"] = datasetNames | |||||
ctx.Data["branches"] = branches | ctx.Data["branches"] = branches | ||||
ctx.Data["branch_name"] = task.BranchName | ctx.Data["branch_name"] = task.BranchName | ||||
ctx.Data["description"] = task.Description | ctx.Data["description"] = task.Description | ||||
@@ -947,7 +946,7 @@ func trainJobNewVersionDataPrepare(ctx *context.Context) error { | |||||
ctx.Data["work_server_number"] = task.WorkServerNumber | ctx.Data["work_server_number"] = task.WorkServerNumber | ||||
ctx.Data["flavor_name"] = task.FlavorName | ctx.Data["flavor_name"] = task.FlavorName | ||||
ctx.Data["engine_name"] = task.EngineName | ctx.Data["engine_name"] = task.EngineName | ||||
ctx.Data["attachment"] = task.Uuid | |||||
ctx.Data["attachment"] = uuids | |||||
ctx.Data["flavor_code"] = task.FlavorCode | ctx.Data["flavor_code"] = task.FlavorCode | ||||
ctx.Data["engine_id"] = task.EngineID | ctx.Data["engine_id"] = task.EngineID | ||||
ctx.Data["datasetType"] = models.TypeCloudBrainTwo | ctx.Data["datasetType"] = models.TypeCloudBrainTwo | ||||
@@ -355,23 +355,32 @@ | |||||
</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.resource_type"}} | |||||
{{$.i18n.Tr "repo.modelarts.model_name"}} | |||||
</td> | </td> | ||||
<td class="ti-text-form-content resorce_type"> | |||||
<div class="text-span text-span-w"></div> | |||||
<td class="ti-text-form-content"> | |||||
<div class="text-span text-span-w">{{if .ModelName}}{{.ModelName}}{{else}}--{{end}}</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.standard"}} | |||||
{{$.i18n.Tr "repo.modelconvert.modelversion"}} | |||||
</td> | </td> | ||||
<td class="ti-text-form-content spec"> | |||||
<div class="text-span text-span-w"></div> | |||||
<td class="ti-text-form-content"> | |||||
<div class="text-span text-span-w">{{if .ModelVersion}}{{.ModelVersion}}{{else}}--{{end}}</div> | |||||
</td> | </td> | ||||
</tr> | </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}}{{.CkptName}}{{else}}--{{end}}</div> | |||||
</td> | |||||
</tr> | |||||
</tbody> | </tbody> | ||||
</table> | </table> | ||||
</div> | </div> | ||||
@@ -431,10 +440,28 @@ | |||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
<div class="text-span text-span-w" title="{{.Parameters}}"> | <div class="text-span text-span-w" title="{{.Parameters}}"> | ||||
{{.Parameters}} | |||||
{{if .Parameters}}{{.Parameters}}{{else}}--{{end}} | |||||
</div> | </div> | ||||
</td> | </td> | ||||
</tr> | </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.resource_type"}} | |||||
</td> | |||||
<td class="ti-text-form-content resorce_type"> | |||||
<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.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"> | <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"> | ||||
@@ -443,7 +470,7 @@ | |||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
<div class="text-span text-span-w" title="{{.Description}}"> | <div class="text-span text-span-w" title="{{.Description}}"> | ||||
{{.Description}} | |||||
{{if .Description}}{{.Description}}{{else}}--{{end}} | |||||
</div> | </div> | ||||
</td> | </td> | ||||
</tr> | </tr> | ||||
@@ -319,7 +319,7 @@ | |||||
<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"> | ||||
{{.VersionName}} | |||||
{{if .VersionName}}{{.VersionName}}{{else}}--{{end}} | |||||
</div> | </div> | ||||
</td> | </td> | ||||
</tr> | </tr> | ||||
@@ -351,23 +351,32 @@ | |||||
</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.standard"}} | |||||
{{$.i18n.Tr "repo.modelarts.model_name"}} | |||||
</td> | </td> | ||||
<td class="ti-text-form-content spec"> | |||||
<div class="text-span text-span-w"></div> | |||||
<td class="ti-text-form-content"> | |||||
<div class="text-span text-span-w">{{if .ModelName}}{{.ModelName}}{{else}}--{{end}}</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.compute_node"}} | |||||
{{$.i18n.Tr "repo.modelconvert.modelversion"}} | |||||
</td> | </td> | ||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
<div class="text-span text-span-w"> | |||||
{{.WorkServerNumber}} | |||||
</div> | |||||
<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}}{{.CkptName}}{{else}}--{{end}}</div> | |||||
</td> | </td> | ||||
</tr> | </tr> | ||||
</tbody> | </tbody> | ||||
@@ -408,47 +417,48 @@ | |||||
</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.train_dataset"}} | |||||
{{$.i18n.Tr "repo.modelarts.train_job.run_parameter"}} | |||||
</td> | </td> | ||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
<div class="text-span text-span-w"> | |||||
{{range $m ,$n := $.datasetDownload}} | |||||
{{if eq .IsDelete true}} | |||||
{{.DatasetName}}({{$.i18n.Tr "dataset.file_deleted"}}) | |||||
{{else}} | |||||
<a href="{{.RepositoryLink}}" target="_blank">{{.DatasetName}}</a> | |||||
{{end}} | |||||
{{end}} | |||||
<div class="text-span text-span-w" title="{{.Parameters}}"> | |||||
{{if .Parameters}}{{.Parameters}}{{else}}--{{end}} | |||||
</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.run_parameter"}} | |||||
{{$.i18n.Tr "repo.grampus.train_job.ai_center"}} | |||||
</td> | </td> | ||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
<div class="text-span text-span-w" title="{{.Parameters}}"> | |||||
{{.Parameters}} | |||||
<div class="text-span text-span-w" id="{{.VersionName}}-ai_center"> | |||||
{{if $.ai_center}}{{$.ai_center}}{{else}}--{{end}} | |||||
</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.grampus.train_job.ai_center"}} | |||||
{{$.i18n.Tr "repo.modelarts.train_job.standard"}} | |||||
</td> | </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"> | <td class="ti-text-form-content"> | ||||
<div class="text-span text-span-w" id="{{.VersionName}}-ai_center"> | |||||
{{$.ai_center}} | |||||
<div class="text-span text-span-w"> | |||||
{{.WorkServerNumber}} | |||||
</div> | </div> | ||||
</td> | </td> | ||||
</tr> | </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.description"}} | {{$.i18n.Tr "repo.modelarts.train_job.description"}} | ||||
@@ -457,7 +467,7 @@ | |||||
<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" | ||||
title="{{.Description}}"> | title="{{.Description}}"> | ||||
{{.Description}} | |||||
{{if .Description}}{{.Description}}{{else}}--{{end}} | |||||
</div> | </div> | ||||
</td> | </td> | ||||
</tr> | </tr> | ||||
@@ -466,7 +476,26 @@ | |||||
</div> | </div> | ||||
</div> | </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> | </div> | ||||
<div class="ui tab" data-tab="second{{$k}}"> | <div class="ui tab" data-tab="second{{$k}}"> | ||||
@@ -393,28 +393,31 @@ | |||||
</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.standard"}} | |||||
{{$.i18n.Tr "repo.modelarts.model_name"}} | |||||
</td> | </td> | ||||
<td class="ti-text-form-content spec{{$k}}"> | |||||
<div class="text-span text-span-w"></div> | |||||
<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}}{{.CkptName}}{{else}}--{{end}}</div> | |||||
</td> | </td> | ||||
<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"}}, | |||||
}); | |||||
$('td.ti-text-form-content.spec{{$k}} div').text(specStr); | |||||
})(); | |||||
</script> | |||||
</tr> | </tr> | ||||
</tbody> | </tbody> | ||||
</table> | </table> | ||||
</div> | </div> | ||||
@@ -461,22 +464,34 @@ | |||||
<td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
<div class="text-span text-span-w" title="{{.Parameters}}"> | <div class="text-span text-span-w" title="{{.Parameters}}"> | ||||
{{.Parameters}} | |||||
{{if .Parameters}}{{.Parameters}}{{else}}--{{end}} | |||||
</div> | </div> | ||||
</td> | </td> | ||||
</tr> | </tr> | ||||
</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.description"}} | |||||
{{$.i18n.Tr "repo.modelarts.train_job.standard"}} | |||||
</td> | </td> | ||||
<td class="ti-text-form-content"> | |||||
<div class="text-span text-span-w" | |||||
title="{{.Cloudbrain.Description}}"> | |||||
{{.Cloudbrain.Description}} | |||||
</div> | |||||
<td class="ti-text-form-content spec{{$k}}"> | |||||
<div class="text-span text-span-w"></div> | |||||
</td> | </td> | ||||
<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"}}, | |||||
}); | |||||
$('td.ti-text-form-content.spec{{$k}} div').text(specStr); | |||||
})(); | |||||
</script> | |||||
</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"> | ||||
@@ -488,6 +503,18 @@ | |||||
</div> | </div> | ||||
</td> | </td> | ||||
</tr> | </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="{{.Cloudbrain.Description}}"> | |||||
{{if .Cloudbrain.Description}}{{.Cloudbrain.Description}}{{else}}--{{end}} | |||||
</div> | |||||
</td> | |||||
</tr> | |||||
</tbody> | </tbody> | ||||
</table> | </table> | ||||
</div> | </div> | ||||
@@ -693,7 +720,6 @@ | |||||
<script type="text/javascript" src="/self/ztree/js/jquery.ztree.core.js"></script> | <script type="text/javascript" src="/self/ztree/js/jquery.ztree.core.js"></script> | ||||
<script type="text/javascript" src="/self/ztree/js/jquery.ztree.excheck.js"></script> | <script type="text/javascript" src="/self/ztree/js/jquery.ztree.excheck.js"></script> | ||||
<script> | <script> | ||||
var setting = { | var setting = { | ||||
check: { | check: { | ||||
@@ -1,161 +1,163 @@ | |||||
let form = document.getElementById("form_id"); | |||||
let createFlag = false; | |||||
let flag; | |||||
form.onsubmit = function (e) { | |||||
if (createFlag) return false; | |||||
createFlag = true; | |||||
}; | |||||
$("select.dropdown").dropdown(); | |||||
$(document).keydown(function (event) { | |||||
switch (event.keyCode) { | |||||
case 13: | |||||
return false; | |||||
} | |||||
}); | |||||
$(".menu .item").tab(); | |||||
$(document).ready(createParamter()); | |||||
function createParamter() { | |||||
let params = $(".dynamic.field").data("params"); | |||||
params && | |||||
params.parameter.forEach((item, index) => { | |||||
Add_parameter(index, (flag = true), item); | |||||
}); | |||||
} | |||||
// 参数增加、删除、修改、保存 | |||||
function Add_parameter(i, flag = false, paramsObject = {}) { | |||||
let value = ""; | |||||
value += `<div class="two fields width85" id= "para${i}">`; | |||||
value += '<div class="field">'; | |||||
let placeholder_value = $(".dynamic.field").data("params-value"); | |||||
let placeholder_name = $(".dynamic.field").data("params-name"); | |||||
if (flag) { | |||||
value += `<input type="text" class="shipping_first-name" value="${paramsObject.label}">`; | |||||
} else { | |||||
value += | |||||
'<input type="text" class="shipping_first-name" required placeholder="' + | |||||
placeholder_name + | |||||
'">'; | |||||
(function () { | |||||
let form = document.getElementById("form_id"); | |||||
let createFlag = false; | |||||
let flag; | |||||
form.onsubmit = function (e) { | |||||
if (createFlag) return false; | |||||
createFlag = true; | |||||
}; | |||||
$("select.dropdown").dropdown(); | |||||
$(document).keydown(function (event) { | |||||
switch (event.keyCode) { | |||||
case 13: | |||||
return false; | |||||
} | |||||
}); | |||||
$(".menu .item").tab(); | |||||
$(document).ready(createParamter()); | |||||
function createParamter() { | |||||
let params = $(".dynamic.field").data("params"); | |||||
params && | |||||
params.parameter.forEach((item, index) => { | |||||
Add_parameter(index, (flag = true), item); | |||||
}); | |||||
} | } | ||||
value += "</div>"; | |||||
value += '<div class="field">'; | |||||
if (flag) { | |||||
value += `<input type="text" class="shipping_last-name" value="${paramsObject.value}">`; | |||||
} else { | |||||
value += | |||||
'<input type="text" class="shipping_last-name" required placeholder="' + | |||||
placeholder_value + | |||||
'">'; | |||||
// 参数增加、删除、修改、保存 | |||||
function Add_parameter(i, flag = false, paramsObject = {}) { | |||||
let value = ""; | |||||
value += `<div class="two fields width85" id= "para${i}">`; | |||||
value += '<div class="field">'; | |||||
let placeholder_value = $(".dynamic.field").data("params-value"); | |||||
let placeholder_name = $(".dynamic.field").data("params-name"); | |||||
if (flag) { | |||||
value += `<input type="text" class="shipping_first-name" value="${paramsObject.label}">`; | |||||
} else { | |||||
value += | |||||
'<input type="text" class="shipping_first-name" required placeholder="' + | |||||
placeholder_name + | |||||
'">'; | |||||
} | |||||
value += "</div>"; | |||||
value += '<div class="field">'; | |||||
if (flag) { | |||||
value += `<input type="text" class="shipping_last-name" value="${paramsObject.value}">`; | |||||
} else { | |||||
value += | |||||
'<input type="text" class="shipping_last-name" required placeholder="' + | |||||
placeholder_value + | |||||
'">'; | |||||
} | |||||
value += "</div>"; | |||||
value += '<span><i class="trash icon"></i></span>'; | |||||
value += "</div>"; | |||||
$(".dynamic.field").append(value); | |||||
} | } | ||||
value += "</div>"; | |||||
value += '<span><i class="trash icon"></i></span>'; | |||||
value += "</div>"; | |||||
$(".dynamic.field").append(value); | |||||
} | |||||
$("#add_run_para").click(function () { | |||||
var len = $(".dynamic.field .two.fields").length; | |||||
Add_parameter(len); | |||||
}); | |||||
$("#add_run_para").click(function () { | |||||
var len = $(".dynamic.field .two.fields").length; | |||||
Add_parameter(len); | |||||
}); | |||||
$(".dynamic.field").on("click", ".trash.icon", function () { | |||||
var index = $(this).parent().parent().index(); | |||||
$(this).parent().parent().remove(); | |||||
var len = $(".dynamic.field .two.fields").length; | |||||
$(".dynamic.field .two.fields").each(function () { | |||||
var cur_index = $(this).index(); | |||||
$(this).attr("id", "para" + cur_index); | |||||
$(".dynamic.field").on("click", ".trash.icon", function () { | |||||
var index = $(this).parent().parent().index(); | |||||
$(this).parent().parent().remove(); | |||||
var len = $(".dynamic.field .two.fields").length; | |||||
$(".dynamic.field .two.fields").each(function () { | |||||
var cur_index = $(this).index(); | |||||
$(this).attr("id", "para" + cur_index); | |||||
}); | |||||
}); | }); | ||||
}); | |||||
$(".question.circle.icon").hover(function () { | |||||
$(this).popup("show"); | |||||
}); | |||||
$(".question.circle.icon").hover(function () { | |||||
$(this).popup("show"); | |||||
}); | |||||
var isValidate = false; | |||||
function validate() { | |||||
$(".ui.form").form({ | |||||
on: "blur", | |||||
inline: true, | |||||
fields: { | |||||
boot_file: { | |||||
identifier: "boot_file", | |||||
rules: [ | |||||
{ | |||||
type: "regExp[/.+.py$/g]", | |||||
prompt: "启动文件必须为.py结尾", | |||||
}, | |||||
], | |||||
}, | |||||
job_name: { | |||||
identifier: "job_name", | |||||
rules: [ | |||||
{ | |||||
type: "regExp[/^[a-zA-Z0-9-_]{1,36}$/]", | |||||
prompt: "只包含大小写字母、数字、_和-,最长36个字符。", | |||||
}, | |||||
], | |||||
}, | |||||
display_job_name: { | |||||
identifier: "display_job_name", | |||||
rules: [ | |||||
{ | |||||
type: "regExp[/^[a-zA-Z0-9-_]{1,36}$/]", | |||||
prompt: "只包含大小写字母、数字、_和-,最长36个字符。", | |||||
}, | |||||
], | |||||
var isValidate = false; | |||||
function validate() { | |||||
$(".ui.form").form({ | |||||
on: "blur", | |||||
inline: true, | |||||
fields: { | |||||
boot_file: { | |||||
identifier: "boot_file", | |||||
rules: [ | |||||
{ | |||||
type: "regExp[/.+.py$/g]", | |||||
prompt: "启动文件必须为.py结尾", | |||||
}, | |||||
], | |||||
}, | |||||
job_name: { | |||||
identifier: "job_name", | |||||
rules: [ | |||||
{ | |||||
type: "regExp[/^[a-zA-Z0-9-_]{1,36}$/]", | |||||
prompt: "只包含大小写字母、数字、_和-,最长36个字符。", | |||||
}, | |||||
], | |||||
}, | |||||
display_job_name: { | |||||
identifier: "display_job_name", | |||||
rules: [ | |||||
{ | |||||
type: "regExp[/^[a-zA-Z0-9-_]{1,36}$/]", | |||||
prompt: "只包含大小写字母、数字、_和-,最长36个字符。", | |||||
}, | |||||
], | |||||
}, | |||||
attachment: { | |||||
identifier: "attachment", | |||||
rules: [ | |||||
{ | |||||
type: "empty", | |||||
prompt: "选择一个数据集", | |||||
}, | |||||
], | |||||
}, | |||||
spec_id: { | |||||
identifier: "spec_id", | |||||
rules: [{ type: "empty" }], | |||||
}, | |||||
}, | }, | ||||
attachment: { | |||||
identifier: "attachment", | |||||
rules: [ | |||||
{ | |||||
type: "empty", | |||||
prompt: "选择一个数据集", | |||||
}, | |||||
], | |||||
onSuccess: function () { | |||||
// $('.ui.page.dimmer').dimmer('show') | |||||
document.getElementById("mask").style.display = "block"; | |||||
isValidate = true; | |||||
}, | }, | ||||
spec_id: { | |||||
identifier: "spec_id", | |||||
rules: [{ type: "empty" }], | |||||
onFailure: function (e) { | |||||
isValidate = false; | |||||
return false; | |||||
}, | }, | ||||
}, | |||||
onSuccess: function () { | |||||
// $('.ui.page.dimmer').dimmer('show') | |||||
document.getElementById("mask").style.display = "block"; | |||||
isValidate = true; | |||||
}, | |||||
onFailure: function (e) { | |||||
isValidate = false; | |||||
return false; | |||||
}, | |||||
}); | |||||
} | |||||
document.onreadystatechange = function () { | |||||
if (document.readyState === "complete") { | |||||
document.getElementById("mask").style.display = "none"; | |||||
}); | |||||
} | |||||
document.onreadystatechange = function () { | |||||
if (document.readyState === "complete") { | |||||
document.getElementById("mask").style.display = "none"; | |||||
} | |||||
}; | |||||
function send_run_para() { | |||||
var run_parameters = []; | |||||
var msg = {}; | |||||
$(".dynamic.field .two.fields").each(function () { | |||||
var para_name = $(this).find("input.shipping_first-name").val(); | |||||
var para_value = $(this).find("input.shipping_last-name").val(); | |||||
run_parameters.push({ label: para_name, value: para_value }); | |||||
}); | |||||
msg["parameter"] = run_parameters; | |||||
msg = JSON.stringify(msg); | |||||
$("#store_run_para").val(msg); | |||||
} | |||||
function get_name() { | |||||
let name1 = $("#engine_name .text").text(); | |||||
let name2 = $("#flaver_name .text").text(); | |||||
$("input#ai_engine_name").val(name1); | |||||
$("input#ai_flaver_name").val(name2); | |||||
} | } | ||||
}; | |||||
function send_run_para() { | |||||
var run_parameters = []; | |||||
var msg = {}; | |||||
$(".dynamic.field .two.fields").each(function () { | |||||
var para_name = $(this).find("input.shipping_first-name").val(); | |||||
var para_value = $(this).find("input.shipping_last-name").val(); | |||||
run_parameters.push({ label: para_name, value: para_value }); | |||||
}); | |||||
msg["parameter"] = run_parameters; | |||||
msg = JSON.stringify(msg); | |||||
$("#store_run_para").val(msg); | |||||
} | |||||
function get_name() { | |||||
let name1 = $("#engine_name .text").text(); | |||||
let name2 = $("#flaver_name .text").text(); | |||||
$("input#ai_engine_name").val(name1); | |||||
$("input#ai_flaver_name").val(name2); | |||||
} | |||||
validate(); | |||||
$(".ui.create_train_job.green.button").click(function (e) { | |||||
get_name(); | |||||
send_run_para(); | |||||
validate(); | validate(); | ||||
}); | |||||
$(".ui.create_train_job.green.button").click(function (e) { | |||||
get_name(); | |||||
send_run_para(); | |||||
validate(); | |||||
}); | |||||
})(); |