| @@ -69,6 +69,7 @@ type CreateCloudBrainInferencForm struct { | |||||
| ModelName string `form:"model_name" binding:"Required"` | ModelName string `form:"model_name" binding:"Required"` | ||||
| ModelVersion string `form:"model_version" binding:"Required"` | ModelVersion string `form:"model_version" binding:"Required"` | ||||
| CkptName string `form:"ckpt_name" binding:"Required"` | CkptName string `form:"ckpt_name" binding:"Required"` | ||||
| LabelName string `form:"label_names" binding:"Required"` | |||||
| } | } | ||||
| func (f *CreateCloudBrainForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | func (f *CreateCloudBrainForm) Validate(ctx *macaron.Context, errs binding.Errors) binding.Errors { | ||||
| @@ -78,6 +78,7 @@ type GenerateCloudBrainTaskReq struct { | |||||
| ModelName string | ModelName string | ||||
| ModelVersion string | ModelVersion string | ||||
| CkptName string | CkptName string | ||||
| LabelName string | |||||
| } | } | ||||
| func GetCloudbrainDebugCommand() string { | func GetCloudbrainDebugCommand() string { | ||||
| @@ -400,6 +401,7 @@ func GenerateTask(req GenerateCloudBrainTaskReq) error { | |||||
| ModelVersion: req.ModelVersion, | ModelVersion: req.ModelVersion, | ||||
| CkptName: req.CkptName, | CkptName: req.CkptName, | ||||
| ResultUrl: req.ResultPath, | ResultUrl: req.ResultPath, | ||||
| LabelName: req.LabelName, | |||||
| CreatedUnix: createTime, | CreatedUnix: createTime, | ||||
| UpdatedUnix: createTime, | UpdatedUnix: createTime, | ||||
| CommitID: req.CommitID, | CommitID: req.CommitID, | ||||
| @@ -157,15 +157,15 @@ func DelCloudBrainJob(ctx *context.APIContext) { | |||||
| if errStr != "" { | if errStr != "" { | ||||
| ctx.JSON(http.StatusOK, map[string]interface{}{ | ctx.JSON(http.StatusOK, map[string]interface{}{ | ||||
| "message": ctx.Tr(errStr), | |||||
| "Message": ctx.Tr(errStr), | |||||
| "VersionName": "1", | "VersionName": "1", | ||||
| "code": 1, | |||||
| "Code": 1, | |||||
| }) | }) | ||||
| } else { | } else { | ||||
| ctx.JSON(http.StatusOK, map[string]interface{}{ | ctx.JSON(http.StatusOK, map[string]interface{}{ | ||||
| "message": "", | |||||
| "Message": "", | |||||
| "VersionName": "1", | "VersionName": "1", | ||||
| "code": 0, | |||||
| "Code": 0, | |||||
| }) | }) | ||||
| } | } | ||||
| @@ -380,6 +380,7 @@ func CloudBrainInferenceJobCreate(ctx *context.Context, form auth.CreateCloudBra | |||||
| codePath := setting.JobPath + jobName + cloudbrain.CodeMountPath | codePath := setting.JobPath + jobName + cloudbrain.CodeMountPath | ||||
| resourceSpecId := form.ResourceSpecId | resourceSpecId := form.ResourceSpecId | ||||
| branchName := form.BranchName | branchName := form.BranchName | ||||
| labelName := form.LabelName | |||||
| repo := ctx.Repo.Repository | repo := ctx.Repo.Repository | ||||
| ckptUrl := setting.Attachment.Minio.RealPath + form.TrainUrl + form.CkptName | ckptUrl := setting.Attachment.Minio.RealPath + form.TrainUrl + form.CkptName | ||||
| @@ -475,6 +476,7 @@ func CloudBrainInferenceJobCreate(ctx *context.Context, form auth.CreateCloudBra | |||||
| ModelVersion: form.ModelVersion, | ModelVersion: form.ModelVersion, | ||||
| CkptName: form.CkptName, | CkptName: form.CkptName, | ||||
| TrainUrl: form.TrainUrl, | TrainUrl: form.TrainUrl, | ||||
| LabelName: labelName, | |||||
| } | } | ||||
| err = cloudbrain.GenerateTask(req) | err = cloudbrain.GenerateTask(req) | ||||
| @@ -830,6 +832,8 @@ func cloudBrainShow(ctx *context.Context, tpName base.TplName, jobType models.Jo | |||||
| } | } | ||||
| ctx.Data["task"] = task | ctx.Data["task"] = task | ||||
| labelName := strings.Fields(task.LabelName) | |||||
| ctx.Data["LabelName"] = labelName | |||||
| ctx.Data["jobName"] = task.JobName | ctx.Data["jobName"] = task.JobName | ||||
| ctx.Data["displayJobName"] = task.DisplayJobName | ctx.Data["displayJobName"] = task.DisplayJobName | ||||
| version_list_task := make([]*models.Cloudbrain, 0) | version_list_task := make([]*models.Cloudbrain, 0) | ||||
| @@ -266,7 +266,7 @@ | |||||
| onclick="javascript:parseInfo()">{{$.i18n.Tr "repo.cloudbrain.runinfo"}}</a> | onclick="javascript:parseInfo()">{{$.i18n.Tr "repo.cloudbrain.runinfo"}}</a> | ||||
| <a class="item load-model-file" data-tab="four" | <a class="item load-model-file" data-tab="four" | ||||
| data-path="{{$.RepoLink}}/cloudbrain/inference-job/{{.JobID}}/result_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a> | |||||
| data-gpu-flag="true" data-download-flag="{{$.canDownload}}" data-path="{{$.RepoLink}}/cloudbrain/inference-job/{{.JobID}}/result_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a> | |||||
| </div> | </div> | ||||
| <div class="ui tab active" data-tab="first" style="height:400px"> | <div class="ui tab active" data-tab="first" style="height:400px"> | ||||
| <div style="padding-top: 10px;"> | <div style="padding-top: 10px;"> | ||||
| @@ -420,9 +420,8 @@ | |||||
| <td class="ti-text-form-content"> | <td class="ti-text-form-content"> | ||||
| <div class="text-span text-span-w" id="{{.VersionName}}-labels"> | <div class="text-span text-span-w" id="{{.VersionName}}-labels"> | ||||
| {{if .LabelName}} | {{if .LabelName}} | ||||
| {{range $.labelName}} | |||||
| {{range $.LabelName}} | |||||
| <a class="ui label" title="{{.}}">{{.}}</a> | <a class="ui label" title="{{.}}">{{.}}</a> | ||||
| {{end}} | {{end}} | ||||
| {{else}} | {{else}} | ||||
| @@ -288,7 +288,7 @@ | |||||
| onclick="javascript:parseInfo()">{{$.i18n.Tr "repo.cloudbrain.runinfo"}}</a> | onclick="javascript:parseInfo()">{{$.i18n.Tr "repo.cloudbrain.runinfo"}}</a> | ||||
| <a class="item" data-tab="third{{$k}}" | <a class="item" data-tab="third{{$k}}" | ||||
| onclick="loadLog({{.VersionName}})">{{$.i18n.Tr "repo.modelarts.log"}}</a> | onclick="loadLog({{.VersionName}})">{{$.i18n.Tr "repo.modelarts.log"}}</a> | ||||
| <a class="item load-model-file" data-tab="four{{$k}}" data-path="{{$.RepoLink}}/cloudbrain/train-job/{{.JobID}}/model_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a> | |||||
| <a class="item load-model-file" data-tab="four{{$k}}" data-gpu-flag="true" data-download-flag="{{$.canDownload}}" data-path="{{$.RepoLink}}/cloudbrain/train-job/{{.JobID}}/model_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a> | |||||
| </div> | </div> | ||||
| <div class="ui tab active" data-tab="first{{$k}}"> | <div class="ui tab active" data-tab="first{{$k}}"> | ||||
| <div style="padding-top: 10px;"> | <div style="padding-top: 10px;"> | ||||
| @@ -298,7 +298,7 @@ | |||||
| data-tab="first{{$k}}">{{$.i18n.Tr "repo.modelarts.train_job.config"}}</a> | data-tab="first{{$k}}">{{$.i18n.Tr "repo.modelarts.train_job.config"}}</a> | ||||
| <a class="item" data-tab="second{{$k}}" | <a class="item" data-tab="second{{$k}}" | ||||
| onclick="loadLog({{.VersionName}})">{{$.i18n.Tr "repo.modelarts.log"}}</a> | onclick="loadLog({{.VersionName}})">{{$.i18n.Tr "repo.modelarts.log"}}</a> | ||||
| <a class="item load-model-file" data-tab="third{{$k}}" 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> | |||||
| <a class="item load-model-file" data-tab="third{{$k}}" 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> | ||||
| <div class="ui tab active" data-tab="first{{$k}}"> | <div class="ui tab active" data-tab="first{{$k}}"> | ||||
| <div style="padding-top: 10px;"> | <div style="padding-top: 10px;"> | ||||
| @@ -214,7 +214,7 @@ td, th { | |||||
| <a class="active item" data-tab="first">{{$.i18n.Tr "repo.modelarts.train_job.config"}}</a> | <a class="active item" data-tab="first">{{$.i18n.Tr "repo.modelarts.train_job.config"}}</a> | ||||
| <a class="item log_bottom" data-tab="second" data-version="{{.VersionName}}">{{$.i18n.Tr "repo.modelarts.log"}}</a> | <a class="item log_bottom" data-tab="second" data-version="{{.VersionName}}">{{$.i18n.Tr "repo.modelarts.log"}}</a> | ||||
| <a class="item load-model-file" data-tab="third" data-path="{{$.RepoLink}}/modelarts/inference-job/{{.JobID}}/result_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a> | |||||
| <a class="item load-model-file" data-tab="third" data-download-flag="{{$.canDownload}}" data-path="{{$.RepoLink}}/modelarts/inference-job/{{.JobID}}/result_list" data-version="{{.VersionName}}" data-parents="" data-filename="" data-init="init" >{{$.i18n.Tr "repo.model_download"}}</a> | |||||
| </div> | </div> | ||||
| <div class="ui tab active" data-tab="first" style="height:400px"> | <div class="ui tab active" data-tab="first" style="height:400px"> | ||||
| @@ -451,10 +451,10 @@ td, th { | |||||
| <div class="ui tab" data-tab="second"> | <div class="ui tab" data-tab="second"> | ||||
| <div> | <div> | ||||
| <a id="{{.VersionName}}-log-down" | <a id="{{.VersionName}}-log-down" | ||||
| class='{{if and (.CanModify) (eq .Status "KILLED" "FAILED" "START_FAILED" "STOPPED" "COMPLETED") }}ti-download-file{{else}}disabled{{end}}' | |||||
| class='{{if and ($.canDownload) (eq .Status "KILLED" "FAILED" "START_FAILED" "STOPPED" "COMPLETED") }}ti-download-file{{else}}disabled{{end}}' | |||||
| href="{{$.RepoLink}}/modelarts/train-job/{{.JobID}}/download_log_file?version_name={{.VersionName}}"> | href="{{$.RepoLink}}/modelarts/train-job/{{.JobID}}/download_log_file?version_name={{.VersionName}}"> | ||||
| <i class="ri-download-cloud-2-line"></i> | <i class="ri-download-cloud-2-line"></i> | ||||
| <span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.download_log"}}</span>{{.CanModify}} | |||||
| <span style="margin-left: 0.3rem;">{{$.i18n.Tr "repo.modelarts.download_log"}}</span> | |||||
| </a> | </a> | ||||
| </div> | </div> | ||||
| @@ -507,7 +507,7 @@ td, th { | |||||
| </div> | </div> | ||||
| {{template "base/footer" .}} | {{template "base/footer" .}} | ||||
| <script> | <script> | ||||
| console.log('{{.CanModify}}') | |||||
| console.log('{{$.canDownload}}') | |||||
| $(document).ready(function(){ | $(document).ready(function(){ | ||||
| $('.secondary.menu .item').tab(); | $('.secondary.menu .item').tab(); | ||||
| }); | }); | ||||
| @@ -327,7 +327,7 @@ | |||||
| <a class="item log_bottom" data-tab="second{{$k}}" | <a class="item log_bottom" data-tab="second{{$k}}" | ||||
| data-version="{{.VersionName}}">{{$.i18n.Tr "repo.modelarts.log"}}</a> | data-version="{{.VersionName}}">{{$.i18n.Tr "repo.modelarts.log"}}</a> | ||||
| <a class="item metric_chart" data-tab="four{{$k}}" data-version="{{.VersionName}}">资源占用情况</a> | <a class="item metric_chart" data-tab="four{{$k}}" data-version="{{.VersionName}}">资源占用情况</a> | ||||
| <a class="item load-model-file" data-tab="third{{$k}}" 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> | |||||
| <a class="item load-model-file" data-tab="third{{$k}}" 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> | ||||
| <div class="ui tab active" data-tab="first{{$k}}"> | <div class="ui tab active" data-tab="first{{$k}}"> | ||||
| <div style="padding-top: 10px;"> | <div style="padding-top: 10px;"> | ||||
| @@ -16,7 +16,6 @@ export default async function initCloudrainSow() { | |||||
| function logScroll(version_name) { | function logScroll(version_name) { | ||||
| let container = document.querySelector(`#log${version_name}`); | let container = document.querySelector(`#log${version_name}`); | ||||
| console.log(container); | |||||
| let scrollTop = container.scrollTop; | let scrollTop = container.scrollTop; | ||||
| let scrollHeight = container.scrollHeight; | let scrollHeight = container.scrollHeight; | ||||
| let clientHeight = container.clientHeight; | let clientHeight = container.clientHeight; | ||||
| @@ -126,6 +125,11 @@ export default async function initCloudrainSow() { | |||||
| $.get( | $.get( | ||||
| `/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=&lines=50&order=desc`, | `/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=&lines=50&order=desc`, | ||||
| (data) => { | (data) => { | ||||
| if (!data.CanLogDownload) { | |||||
| $(`#${version_name}-log-down`) | |||||
| .removeClass("ti-download-file") | |||||
| .addClass("disabled"); | |||||
| } | |||||
| $(`#log${version_name} input[name=end_line]`).val(data.EndLine); //如果变动就改变所对应的值 | $(`#log${version_name} input[name=end_line]`).val(data.EndLine); //如果变动就改变所对应的值 | ||||
| $(`#log${version_name} input[name=start_line]`).val(data.StartLine); | $(`#log${version_name} input[name=start_line]`).val(data.StartLine); | ||||
| $(`#log${version_name}`).append("<pre>" + data.Content); | $(`#log${version_name}`).append("<pre>" + data.Content); | ||||
| @@ -161,17 +165,17 @@ export default async function initCloudrainSow() { | |||||
| // | // | ||||
| $(".content-pad").on("click", ".load-model-file", function () { | $(".content-pad").on("click", ".load-model-file", function () { | ||||
| console.log("11111111111"); | |||||
| let downloadFlag = $(this).data("download-flag") || ""; | |||||
| let gpuFlag = $(this).data("gpu-flag") || ""; | |||||
| let version_name = $(this).data("version"); | let version_name = $(this).data("version"); | ||||
| let parents = $(this).data("parents") || ""; | let parents = $(this).data("parents") || ""; | ||||
| let filename = $(this).data("filename") || ""; | let filename = $(this).data("filename") || ""; | ||||
| let init = $(this).data("init") || ""; | let init = $(this).data("init") || ""; | ||||
| let path = $(this).data("path"); | let path = $(this).data("path"); | ||||
| let url = `/api/v1/repos${path}?version_name=${version_name}&parentDir=${parents}`; | let url = `/api/v1/repos${path}?version_name=${version_name}&parentDir=${parents}`; | ||||
| console.log(url); | |||||
| $.get(url, (data) => { | $.get(url, (data) => { | ||||
| $(`#dir_list${version_name}`).empty(); | $(`#dir_list${version_name}`).empty(); | ||||
| renderDir(path, data, version_name); | |||||
| renderDir(path, data, version_name, downloadFlag, gpuFlag); | |||||
| if (init === "init") { | if (init === "init") { | ||||
| $(`input[name=model${version_name}]`).val(""); | $(`input[name=model${version_name}]`).val(""); | ||||
| $(`input[name=modelback${version_name}]`).val(version_name); | $(`input[name=modelback${version_name}]`).val(version_name); | ||||
| @@ -251,7 +255,7 @@ export default async function initCloudrainSow() { | |||||
| } | } | ||||
| } | } | ||||
| function renderDir(path, data, version_name) { | |||||
| function renderDir(path, data, version_name, downloadFlag, gpuFlag) { | |||||
| let html = ""; | let html = ""; | ||||
| html += "<div class='ui grid' style='margin:0;'>"; | html += "<div class='ui grid' style='margin:0;'>"; | ||||
| html += "<div class='row' style='padding: 0;'>"; | html += "<div class='row' style='padding: 0;'>"; | ||||
| @@ -274,8 +278,20 @@ export default async function initCloudrainSow() { | |||||
| data.Dirs[i].FileName + | data.Dirs[i].FileName + | ||||
| "</span>"; | "</span>"; | ||||
| } else { | } else { | ||||
| if (downlaodFlag) { | |||||
| html += `<a href="${location.href}/result_download?version_name=${version_name}&file_name=${data.Dirs[i].FileName}&parent_dir=${data.Dirs[i].ParenDir}">`; | |||||
| if (downloadFlag) { | |||||
| if (gpuFlag) { | |||||
| if (path.includes("model_list")) { | |||||
| html += `<a href="${location.href}/download_model?version_name=${version_name}&fileName=${data.Dirs[i].FileName}&parentDir=${data.Dirs[i].ParenDir}&jobName=${data.task.JobName}">`; | |||||
| } else { | |||||
| html += `<a href="${location.href}/result_download?version_name=${version_name}&fileName=${data.Dirs[i].FileName}&parentDir=${data.Dirs[i].ParenDir}&jobName=${data.task.JobName}">`; | |||||
| } | |||||
| } else { | |||||
| if (path.includes("model_list")) { | |||||
| html += `<a href="${location.href}/model_download?version_name=${version_name}&file_name=${data.Dirs[i].FileName}&parent_dir=${data.Dirs[i].ParenDir}">`; | |||||
| } else { | |||||
| html += `<a href="${location.href}/result_download?version_name=${version_name}&file_name=${data.Dirs[i].FileName}&parent_dir=${data.Dirs[i].ParenDir}">`; | |||||
| } | |||||
| } | |||||
| } else { | } else { | ||||
| html += `<a class="disabled">`; | html += `<a class="disabled">`; | ||||
| } | } | ||||