Reviewed-on: https://git.openi.org.cn/OpenI/aiforge/pulls/2926 Reviewed-by: zhoupzh <zhoupzh@pcl.ac.cn>tags/v1.22.9.2^2
| @@ -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(); | |||||
| }); | |||||
| })(); | |||||