1111
+diff --git a/modules/storage/minio_ext.go b/modules/storage/minio_ext.go index 05b692335..4b738c068 100755 --- a/modules/storage/minio_ext.go +++ b/modules/storage/minio_ext.go @@ -214,47 +214,6 @@ func GetOneLevelAllObjectUnderDirMinio(bucket string, prefixRootPath string, rel ParenDir: ParenDir, } fileInfos = append(fileInfos, fileInfo) - - // log.Info("val key=" + val.Key) - // var isDir bool - // var fileName string - // if val.Key == Prefix { - // continue - // } - - // fileName = val.Key[prefixLen:] - // log.Info("fileName =" + fileName) - // files := strings.Split(fileName, "/") - // if fileMap[files[0]] { - // continue - // } else { - // fileMap[files[0]] = true - // } - // ParenDir := relativePath - // fileName = files[0] - // if len(files) > 1 { - // isDir = true - // ParenDir += fileName + "/" - // } else { - // isDir = false - // } - - // // if strings.HasSuffix(val.Key, "/") { - // // isDir = true - // // fileName = val.Key[prefixLen : len(val.Key)-1] - // // relativePath += val.Key[prefixLen:] - // // } else { - // // isDir = false - // // fileName = val.Key[prefixLen:] - // // } - // fileInfo := FileInfo{ - // ModTime: val.LastModified.Local().Format("2006-01-02 15:04:05"), - // FileName: fileName, - // Size: val.Size, - // IsDir: isDir, - // ParenDir: relativePath, - // } - // fileInfos = append(fileInfos, fileInfo) } return fileInfos, err } else { diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini index c4b59f501..0d35cc326 100755 --- a/options/locale/locale_en-US.ini +++ b/options/locale/locale_en-US.ini @@ -3117,7 +3117,8 @@ dataset_path_rule = The dataset location is stored in the environment variable d view_sample = View sample inference_output_path_rule = The inference output path is stored in the environment variable result_url. model_file_path_rule=The model file location is stored in the environment variable ckpt_url - +model_file_postfix_rule = The supported format of the model file is [ckpt, pb, h5, json, pkl, pth, t7, pdparams, onnx, pbtxt, keras, mlmodel, cfg, pt] +model_convert_postfix_rule = The supported format of the model file is [.pth, .pkl, .onnx, .mindir, .ckpt, .pb] delete_task = Delete task task_delete_confirm = Are you sure you want to delete this task? Once this task is deleted, it cannot be recovered. operate_confirm = confirm diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini index 8006bf1fe..d34a18cc1 100755 --- a/options/locale/locale_zh-CN.ini +++ b/options/locale/locale_zh-CN.ini @@ -3132,7 +3132,8 @@ dataset_path_rule = 数据集位置存储在环境变量data_url中,训练输 view_sample = 查看样例 inference_output_path_rule = 推理输出路径存储在环境变量result_url中。 model_file_path_rule = 模型文件位置存储在环境变量ckpt_url中。 - +model_file_postfix_rule = 模型文件支持的格式为 [ckpt, pb, h5, json, pkl, pth, t7, pdparams, onnx, pbtxt, keras, mlmodel, cfg, pt] +model_convert_postfix_rule = 模型文件支持的格式为 [.pth, .pkl, .onnx, .mindir, .ckpt, .pb] delete_task = 删除任务 task_delete_confirm = 你确认删除该任务么?此任务一旦删除不可恢复。 operate_confirm = 确定操作 diff --git a/routers/repo/grampus.go b/routers/repo/grampus.go index c31143a33..3e9f64f3b 100755 --- a/routers/repo/grampus.go +++ b/routers/repo/grampus.go @@ -805,7 +805,13 @@ func generateCommand(repoName, processorType, codeRemotePath, dataRemotePath, bo } } - commandCode := "cd " + workDir + "code/" + strings.ToLower(repoName) + ";python " + bootFile + paramCode + ";" + var commandCode string + if processorType == grampus.ProcessorTypeNPU { + commandCode = "/bin/bash /home/work/run_train_for_openi.sh " + workDir + "code/" + strings.ToLower(repoName) + "/" + bootFile + " /tmp/log/train.log" + paramCode + ";" + } else if processorType == grampus.ProcessorTypeGPU { + commandCode = "cd " + workDir + "code/" + strings.ToLower(repoName) + ";python " + bootFile + paramCode + ";" + } + command += commandCode //get exec result diff --git a/templates/custom/global_mask.tmpl b/templates/custom/global_mask.tmpl new file mode 100644 index 000000000..fd2dfcbe6 --- /dev/null +++ b/templates/custom/global_mask.tmpl @@ -0,0 +1,21 @@ +
1111
+' + data.Content) - } - - } - }).fail(function (err) { - console.log(err); - }); - } - if ([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10].includes(scrollTop) && scrollLeft == 0) { - let start_line = $(`#log${version_name} input[name=start_line]`).val() - $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${start_line}&lines=50&order=asc`, (data) => { - if (data.Lines == 0) { - $(`.message${version_name} #header`).text('您已翻阅至日志顶部') - $(`.message${version_name}`).css('display', 'block') - setTimeout(function () { - $(`.message${version_name}`).css('display', 'none') - }, 1000) - } else { - $(`#log${version_name} input[name=start_line]`).val(data.StartLine) //如果变动就改变所对应的值 - $(`#log${version_name}`).prepend('' + data.Content) - } - }).fail(function (err) { - console.log(err); - }); - } - } - function scrollAnimation(dom, currentY, targetY, currentX) { - let needScrollTop = targetY - currentY; - let _currentY = currentY; - setTimeout(() => { - // 一次调用滑动帧数,每次调用会不一样 - //取总距离的十分之一 - const dist = Math.ceil(needScrollTop / 10); - _currentY += dist; - //移动一个十分之一 - dom.scrollTo(currentX || 0, _currentY, 'smooth'); - // 如果移动幅度小于十个像素,直接移动,否则递归调用,实现动画效果 - if (needScrollTop > 10 || needScrollTop < -10) { - scrollAnimation(dom, _currentY, targetY) - } else { - dom.scrollTo(0, targetY, 'smooth') - } - }, 1) - } - - $('.log_top').click(function () { - // let logContentDom = document.querySelector('.log') - // if(!logContentDom) - // return - // let version_name = $('.log_top').data('version') - let version_name = $(this).data('version') - let logContentDom = document.querySelector(`#log${version_name}`) - - $(`#log_file${version_name}`).siblings('pre').remove() - $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=&lines=50&order=asc`, (data) => { - - $(`#log${version_name} input[name=end_line]`).val(data.EndLine) //如果变动就改变所对应的值 - $(`#log${version_name} input[name=start_line]`).val(data.StartLine) - $(`#log${version_name}`).prepend('' + data.Content) - $(`.message${version_name} #header`).text('您已翻阅至日志顶部') - $(`.message${version_name}`).css('display', 'block') - setTimeout(function () { - $(`.message${version_name}`).css('display', 'none') - }, 1000) - scrollAnimation(logContentDom, logContentDom.scrollTop, 0); - }) - - }) - $('.log_bottom').click(function (e) { - let version_name = $(this).data('version') - let logContentDom = document.querySelector(`#log${version_name}`) - $(`#log_file${version_name}`).siblings('pre').remove() - $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=&lines=50&order=desc`, (data) => { - - $(`#log${version_name} input[name=end_line]`).val(data.EndLine) //如果变动就改变所对应的值 - $(`#log${version_name} input[name=start_line]`).val(data.StartLine) - $(`#log${version_name}`).append('' + data.Content) - $.get(`/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${data.EndLine}&lines=50&order=desc`, (data) => { - if (data.Lines == 0) { - $(`.message${version_name} #header`).text('您已翻阅至日志底部') - $(`.message${version_name}`).css('display', 'block') - setTimeout(function () { - $(`.message${version_name}`).css('display', 'none') - }, 1000) - } else { - if (end_line === data.EndLine) { - return - } - else { - $(`#log${version_name} input[name=end_line]`).val(data.EndLine) - $(`#log${version_name}`).append('' + data.Content) - } - - } - }).fail(function (err) { - console.log(err); - }); - scrollAnimation(logContentDom, logContentDom.scrollTop + 1, logContentDom.scrollHeight - logContentDom.clientHeight); - }) - }) + diff --git a/templates/repo/modelarts/trainjob/version_new.tmpl b/templates/repo/modelarts/trainjob/version_new.tmpl index 886469d4c..6712f5e7d 100644 --- a/templates/repo/modelarts/trainjob/version_new.tmpl +++ b/templates/repo/modelarts/trainjob/version_new.tmpl @@ -51,18 +51,7 @@ } - --+{{template "custom/global_mask" .}}- - - - - --{{template "repo/header" .}}+diff --git a/templates/repo/modelmanage/convertIndex.tmpl b/templates/repo/modelmanage/convertIndex.tmpl index 4032b28d5..ee2d56ee3 100644 --- a/templates/repo/modelmanage/convertIndex.tmpl +++ b/templates/repo/modelmanage/convertIndex.tmpl @@ -254,6 +254,10 @@+ ++
" + data.Content); @@ -121,10 +126,15 @@ export default async function initCloudrainSow() { $(".log_bottom").click(function (e) { let version_name = $(this).data("version"); let logContentDom = document.querySelector(`#log${version_name}`); + let ID = $(`#accordion${version_name}`).data("jobid"); + let repoPath = $(`#accordion${version_name}`).data("repopath"); $(`#log_file${version_name}`).siblings("pre").remove(); + let end_line = $(`#log${version_name} input[name=end_line]`).val(); + $(".ui.inverted.active.dimmer").css("display", "block"); $.get( - `/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=&lines=50&order=desc`, + `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=&lines=50&order=desc`, (data) => { + $(".ui.inverted.active.dimmer").css("display", "none"); if (!data.CanLogDownload) { $(`#${version_name}-log-down`) .removeClass("ti-download-file") @@ -134,8 +144,9 @@ export default async function initCloudrainSow() { $(`#log${version_name} input[name=start_line]`).val(data.StartLine); $(`#log${version_name}`).append("" + data.Content); $.get( - `/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/log?version_name=${version_name}&base_line=${data.EndLine}&lines=50&order=desc`, + `/api/v1/repos/${repoPath}/${ID}/log?version_name=${version_name}&base_line=${data.EndLine}&lines=50&order=desc`, (data) => { + $(".ui.inverted.active.dimmer").css("display", "none"); if (data.Lines == 0) { $(`.message${version_name} #header`).text("您已翻阅至日志底部"); $(`.message${version_name}`).css("display", "block"); @@ -143,7 +154,7 @@ export default async function initCloudrainSow() { $(`.message${version_name}`).css("display", "none"); }, 1000); } else { - if (end_line === data.EndLine) { + if (end_line === data.EndLine || end_line === "") { return; } else { $(`#log${version_name} input[name=end_line]`).val(data.EndLine); @@ -163,6 +174,49 @@ export default async function initCloudrainSow() { ); }); + function loadLog(version_name) { + document.getElementById("mask").style.display = "block"; + $.get( + `/api/v1/repos/${userName}/${repoPath}/grampus/train-job/${jobID}/log?version_name=${version_name}&lines=50&order=asc`, + (data) => { + $("input[name=end_line]").val(data.EndLine); + $("input[name=start_line]").val(data.StartLine); + $(`#log_file${version_name}`).text(data.Content); + document.getElementById("mask").style.display = "none"; + } + ).fail(function (err) { + document.getElementById("mask").style.display = "none"; + console.log(err); + }); + } + $("#refresh-status").click(function (e) { + let version_name = $(this).data("version"); + let ID = $(`#accordion${version_name}`).data("jobid"); + let repoPath = $(`#accordion${version_name}`).data("repopath"); + refreshStatusShow(version_name, ID, repoPath); + $(".log-info .log_bottom").trigger("click"); + e.stopPropagation(); + }); + + function refreshStatusShow(version_name, ID, repoPath) { + $.get( + `/api/v1/repos/${repoPath}/${ID}?version_name=${version_name}`, + (data) => { + //accroding下的状态 + $(`#${version_name}-status-span span`).text(data.JobStatus); + //accroding下的状态图标 + $(`#${version_name}-status-span i`).attr("class", data.JobStatus); + //accroding下的运行时长 + $(`#${version_name}-duration-span`).text(data.JobDuration); + //配置信息详情页的状态 + $(`#${version_name}-status`).text(data.JobStatus); + //配置信息详情页的状态 + $(`#${version_name}-duration`).text(data.JobDuration); + } + ).fail(function (err) { + console.log(err); + }); + } // $(".content-pad").on("click", ".load-model-file", function () { let downloadFlag = $(this).data("download-flag") || ""; @@ -175,8 +229,8 @@ export default async function initCloudrainSow() { let url = `/api/v1/repos${path}?version_name=${version_name}&parentDir=${parents}`; $.get(url, (data) => { $(`#dir_list${version_name}`).empty(); - if(data.Dirs){ - renderDir(path, data, version_name, downloadFlag, gpuFlag); + if (data.Dirs) { + renderDir(path, data, version_name, downloadFlag, gpuFlag); } if (init === "init") { $(`input[name=model${version_name}]`).val(""); @@ -191,7 +245,15 @@ export default async function initCloudrainSow() { htmlBread += "/"; $(`#file_breadcrumb${version_name}`).append(htmlBread); } else { - renderBrend(path, version_name, parents, filename, init, downloadFlag,gpuFlag); + renderBrend( + path, + version_name, + parents, + filename, + init, + downloadFlag, + gpuFlag + ); } }).fail(function (err) { console.log(err, version_name); @@ -253,15 +315,15 @@ export default async function initCloudrainSow() { } else { $(`input[name=model${version_name}]`).val(parents); $(`input[name=modelback${version_name}]`).val(filename); - $(`#file_breadcrumb${version_name} a.section:contains(${filename})`) - .nextAll() - .remove(); - $( - `#file_breadcrumb${version_name} a.section:contains(${filename})` - ).replaceWith(`${filename}`); - $( - `#file_breadcrumb${version_name} div.section:contains(${filename})` - ).append("/"); + + let selectEle = $(`#file_breadcrumb${version_name} a.section`).filter( + (index, item) => { + return item.text == filename; + } + ); + selectEle.nextAll().remove(); + selectEle.after("/"); + selectEle.replaceWith(`${filename}`); } } diff --git a/web_src/js/features/cloudrbanin.js b/web_src/js/features/cloudrbanin.js index 172e6b0bd..892d2ab41 100644 --- a/web_src/js/features/cloudrbanin.js +++ b/web_src/js/features/cloudrbanin.js @@ -347,33 +347,6 @@ export default async function initCloudrain() { e.stopPropagation(); }); - $("#refresh-status").click(function (e) { - let version_name = $(this).data("version"); - let ID = $(`#accordion${version_name}`).data("jobid"); - let repoPath = $(`#accordion${version_name}`).data("repopath"); - refreshStatusShow(version_name, ID, repoPath); - e.stopPropagation(); - }); - - function refreshStatusShow(version_name, ID, repoPath) { - $.get( - `/api/v1/repos/${repoPath}/${ID}?version_name=${version_name}`, - (data) => { - //accroding下的状态 - $(`#${version_name}-status-span span`).text(data.JobStatus); - //accroding下的状态图标 - $(`#${version_name}-status-span i`).attr("class", data.JobStatus); - //accroding下的运行时长 - $(`#${version_name}-duration-span`).text(data.JobDuration); - //配置信息详情页的状态 - $(`#${version_name}-status`).text(data.JobStatus); - //配置信息详情页的状态 - $(`#${version_name}-duration`).text(data.JobDuration); - } - ).fail(function (err) { - console.log(err); - }); - } function refreshStatus(version_name, ID, repoPath) { const url = `/api/v1/repos/${repoPath}/${ID}/?version_name${version_name}`; $.get(url, (data) => { diff --git a/web_src/less/openi.less b/web_src/less/openi.less index b9622924f..fe002ceb7 100644 --- a/web_src/less/openi.less +++ b/web_src/less/openi.less @@ -522,6 +522,60 @@ i.SUCCEEDED { // } /* 弹窗 */ +// #mask { +// position: fixed; +// top: 0px; +// left: 0px; +// right: 0px; +// bottom: 0px; +// filter: alpha(opacity=60); +// background-color: #777; +// z-index: 1000; +// display: none; +// opacity: 0.8; +// -moz-opacity: 0.5; +// padding-top: 100px; +// color: #000000; +// } + +#loadingPage { + margin: 300px auto; + width: 50px; + height: 40px; + text-align: center; + font-size: 10px; + display: block; +} + +#loadingPage > div { + background-color: green; + height: 100%; + width: 6px; + display: inline-block; + -webkit-animation: sk-stretchdelay 1.2s infinite ease-in-out; + animation: sk-stretchdelay 1.2s infinite ease-in-out; +} + +#loadingPage .rect2 { + -webkit-animation-delay: -1.1s; + animation-delay: -1.1s; +} + +#loadingPage .rect3 { + -webkit-animation-delay: -1s; + animation-delay: -1s; +} + +#loadingPage .rect4 { + -webkit-animation-delay: -0.9s; + animation-delay: -0.9s; +} + +#loadingPage .rect5 { + -webkit-animation-delay: -0.8s; + animation-delay: -0.8s; +} + #mask { position: fixed; top: 0px; @@ -529,17 +583,29 @@ i.SUCCEEDED { right: 0px; bottom: 0px; filter: alpha(opacity=60); - background-color: #777; + background-color: rgba(119, 119, 119, 0.8); z-index: 1000; display: none; - opacity: 0.8; - -moz-opacity: 0.5; - padding-top: 100px; color: #000000; } - -#loadingPage { - margin: 200px auto; +.loadingWrap { + width: 20%; + height: 25%; + border: 1px solid #bbb; + background-color: #fff; + margin: auto; + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; + border-radius: 20px; +} +#loading-page { width: 50px; height: 40px; text-align: center; @@ -547,7 +613,7 @@ i.SUCCEEDED { display: block; } -#loadingPage > div { +#loading-page > div { background-color: green; height: 100%; width: 6px; @@ -556,26 +622,25 @@ i.SUCCEEDED { animation: sk-stretchdelay 1.2s infinite ease-in-out; } -#loadingPage .rect2 { +#loading-page .rect2 { -webkit-animation-delay: -1.1s; animation-delay: -1.1s; } -#loadingPage .rect3 { +#loadin-page .rect3 { -webkit-animation-delay: -1s; animation-delay: -1s; } -#loadingPage .rect4 { +#loading-page .rect4 { -webkit-animation-delay: -0.9s; animation-delay: -0.9s; } -#loadingPage .rect5 { +#loading-page .rect5 { -webkit-animation-delay: -0.8s; animation-delay: -0.8s; } - @-webkit-keyframes sk-stretchdelay { 0%, 40%,