-
-
-
{{$.i18n.Tr "repo.modelarts.train_job.run_parameter"}}
@@ -504,25 +496,6 @@
-
-
-
-
-
-
-
{{$.i18n.Tr "repo.file_limit_100"}}
-
@@ -700,11 +666,8 @@
-
-
-
{{template "base/footer" .}}
@@ -712,7 +675,15 @@
-
+{{template "base/footer" .}}
diff --git a/templates/repo/modelmanage/create_local_2.tmpl b/templates/repo/modelmanage/create_local_2.tmpl
new file mode 100644
index 000000000..5780c6194
--- /dev/null
+++ b/templates/repo/modelmanage/create_local_2.tmpl
@@ -0,0 +1,11 @@
+{{template "base/head" .}}
+
+
+ {{template "repo/header" .}}
+
+
+
+
+{{template "base/footer" .}}
diff --git a/templates/repo/modelmanage/create_online.tmpl b/templates/repo/modelmanage/create_online.tmpl
new file mode 100644
index 000000000..32503d1f0
--- /dev/null
+++ b/templates/repo/modelmanage/create_online.tmpl
@@ -0,0 +1,581 @@
+{{template "base/head" .}}
+
+
+
+{{$repository := .Repository.ID}}
+
+ {{template "repo/header" .}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{{template "base/footer" .}}
+
+
+
diff --git a/templates/repo/modelmanage/index.tmpl b/templates/repo/modelmanage/index.tmpl
index 6a42d96f7..b358384e3 100644
--- a/templates/repo/modelmanage/index.tmpl
+++ b/templates/repo/modelmanage/index.tmpl
@@ -25,6 +25,23 @@
border-bottom-left-radius: 4px;
box-shadow: 0 2px 3px 0 rgb(34 36 38 / 15%);
}
+ .m-blue-btn {
+ background-color: rgb(22, 132, 252) !important;
+ }
+ .m-blue-btn:hover {
+ background-color: #66b1ff !important;
+ color: #fff;
+ }
+
+ .m-blue-btn:focus {
+ background-color: #66b1ff !important;
+ color: #fff;
+ }
+
+ .m-blue-btn:active {
+ background-color: #3a8ee6 !important;
+ color: #fff;
+ }
@@ -57,8 +74,10 @@
{{if eq $.MODEL_COUNT 0}}
@@ -66,6 +85,7 @@
+
+ {{$.i18n.Tr "repo.model.manage.createmodel_tip"}} {{$.i18n.Tr "repo.model.manage.createtrainjob"}}
{{$.i18n.Tr "repo.platform_instructions1"}} {{$.i18n.Tr "repo.platform_instructions2"}} {{$.i18n.Tr "repo.platform_instructions3"}}
@@ -421,7 +443,8 @@
let train_html = '';
modelData = data;
for (let i = 0; i < n_length; i++) {
- train_html += `${data[i].VersionName} `
+ var VersionName = data[i].VersionName || 'V0001';
+ train_html += `${VersionName} `
train_html += ''
}
if (data.length) {
@@ -568,5 +591,4 @@
$("#choice_Engine").removeClass('disabled');
}
}
-
\ No newline at end of file
diff --git a/templates/repo/modelmanage/showinfo.tmpl b/templates/repo/modelmanage/showinfo.tmpl
index 0a29375f1..1b153bb45 100644
--- a/templates/repo/modelmanage/showinfo.tmpl
+++ b/templates/repo/modelmanage/showinfo.tmpl
@@ -1,533 +1,10 @@
{{template "base/head" .}}
-
+
+
{{template "repo/header" .}}
-
-
-
-
-
-
-
-
-
-
- {{$.i18n.Tr "repo.model.manage.model_name"}} |
- |
-
-
- {{$.i18n.Tr "repo.model.manage.version"}} |
- |
-
-
- {{$.i18n.Tr "repo.migrate_items_labels"}} |
-
-
-
-
-
-
- |
-
-
- {{$.i18n.Tr "repo.modelarts.model_size"}} |
- |
-
-
- {{$.i18n.Tr "repo.modelarts.createtime"}} |
- |
-
-
- {{$.i18n.Tr "repo.model.manage.description"}} |
-
-
-
-
-
- |
-
-
- {{$.i18n.Tr "repo.modelarts.train_job"}} |
-
-
-
-
- |
-
-
- {{$.i18n.Tr "repo.modelarts.code_version"}} |
- |
-
-
- {{$.i18n.Tr "repo.modelarts.train_job.start_file"}} |
- |
-
-
- {{$.i18n.Tr "repo.modelarts.train_job.train_dataset"}} |
- |
-
-
- {{$.i18n.Tr "repo.modelarts.train_job.run_parameter"}} |
- |
-
-
- {{$.i18n.Tr "repo.modelarts.train_job.AI_Engine"}} |
- |
-
-
- {{$.i18n.Tr "repo.modelarts.train_job.standard"}} |
- |
-
-
- {{$.i18n.Tr "repo.modelarts.train_job.compute_node"}} |
- |
-
-
-
-
-
-
-
-
-
- {{$.i18n.Tr "repo.model.manage.Accuracy"}} |
- |
-
-
- F1 |
- |
-
-
- {{$.i18n.Tr "repo.model.manage.Precision"}} |
- |
-
-
- {{$.i18n.Tr "repo.model.manage.Recall"}} |
- |
-
-
-
-
-
-
-
-
-
+
+
+
{{template "base/footer" .}}
-
\ No newline at end of file
diff --git a/templates/repo/modelsafety/show.tmpl b/templates/repo/modelsafety/show.tmpl
index dfd1bd5b9..a46077443 100644
--- a/templates/repo/modelsafety/show.tmpl
+++ b/templates/repo/modelsafety/show.tmpl
@@ -861,7 +861,8 @@
$('td.ti-text-form-content.spec div').text(specStr);
SPEC && $('td.ti-text-form-content.resorce_type div').text(getListValueWithKey(ACC_CARD_TYPE, SPEC.AccCardType));
}
- var oLogHref = $('#-log-down').attr('href');
+ var repoPath = {{$.RepoRelPath}};
+ var oLogHref = `/api/v1/repos/${repoPath}/cloudbrain`;
$('#-log-down').attr('href', oLogHref + `/${res.ID}/download_log_file`);
$('.full-log-dialog').attr('data-href', oLogHref + `/${res.ID}/download_log_file`);
if (res.ResultJson) {
diff --git a/templates/user/dashboard/cloudbrains.tmpl b/templates/user/dashboard/cloudbrains.tmpl
index fe7689944..9af17fb54 100755
--- a/templates/user/dashboard/cloudbrains.tmpl
+++ b/templates/user/dashboard/cloudbrains.tmpl
@@ -65,7 +65,7 @@
- {{range .Tasks}}
+ {{range .Tasks}}
{{if .Repo}}
@@ -155,7 +155,7 @@
- {{if .AiCenter}}{{.AiCenter}}{{else}}--{{end}}
+ {{if .AiCenter}}{{.AiCenter}}{{else}}--{{end}}
@@ -169,16 +169,16 @@
spanEl.setAttribute('title', cardType);
spanEl.innerText = cardType;
- var cluster = spec.Cluster || '--';
+ var cluster = {{.Cluster}} || '--';
var clusterName = document.querySelector('.cloudbrain_debug').dataset['cluster' + cluster[0] + cluster.toLocaleLowerCase().slice(1)] || '--';
spanEl = document.querySelector('.cluster_{{.DisplayJobName}}_{{$JobID}}');
spanEl.setAttribute('title', cluster);
spanEl.innerText = clusterName;
- var aiCenter = spec.AiCenterName || '--';
- spanEl = document.querySelector('.aicenter_{{.DisplayJobName}}_{{$JobID}}');
- spanEl.setAttribute('title', aiCenter);
- spanEl.innerText = aiCenter;
+ // var aiCenter = spec.AiCenterName || '--';
+ // spanEl = document.querySelector('.aicenter_{{.DisplayJobName}}_{{$JobID}}');
+ // spanEl.setAttribute('title', aiCenter);
+ // spanEl.innerText = aiCenter;
})();
diff --git a/web_src/js/components/Model.vue b/web_src/js/components/Model.vue
index 7362246c4..02b8643ae 100644
--- a/web_src/js/components/Model.vue
+++ b/web_src/js/components/Model.vue
@@ -16,16 +16,17 @@
prop="name"
:label="i18n.model_name"
align="left"
- min-width="17%"
+ min-width="20%"
>
+ {{ scope.row.modelType == '1' ? i18n.local : i18n.online }}
{{ scope.row.name }}
@@ -131,12 +132,12 @@
-
@@ -223,9 +228,10 @@ export default {
let tableData;
tableData = res.data;
for (let i = 0; i < tableData.length; i++) {
- trainTaskInfo = JSON.parse(tableData[i].trainTaskInfo);
+ trainTaskInfo = JSON.parse(tableData[i].trainTaskInfo || '{}');
tableData[i].engineName = this.getEngineName(tableData[i]);
- tableData[i].computeResource = trainTaskInfo.ComputeResource;
+ // tableData[i].computeResource = trainTaskInfo.ComputeResource;
+ tableData[i].computeResource = tableData[i].type == '0' ? 'CPU/GPU' : 'NPU';
tableData[i].cName = tableData[i].name;
tableData[i].rowKey = tableData[i].id + Math.random();
tableData[i].name = "";
@@ -474,7 +480,7 @@ export default {
try {
this.loadNodeMap.clear();
this.$axios
- .get(location.href + "_api", {
+ .get(this.url + "show_model_api", {
params: this.params,
})
.then((res) => {
@@ -483,15 +489,15 @@ export default {
let trainTaskInfo;
this.tableData = res.data.data;
for (let i = 0; i < this.tableData.length; i++) {
- trainTaskInfo = JSON.parse(this.tableData[i].trainTaskInfo);
+ trainTaskInfo = JSON.parse(this.tableData[i].trainTaskInfo || '{}');
this.tableData[i].cName = this.tableData[i].name;
this.tableData[i].rowKey = this.tableData[i].id + Math.random();
this.tableData[i].engineName = this.getEngineName(
this.tableData[i]
);
- this.tableData[i].computeResource = trainTaskInfo.ComputeResource;
- this.tableData[i].hasChildren =
- res.data.data[i].versionCount === 1 ? false : true;
+ // this.tableData[i].computeResource = trainTaskInfo.ComputeResource;
+ this.tableData[i].computeResource = this.tableData[i].type == '0' ? 'CPU/GPU' : 'NPU';
+ this.tableData[i].hasChildren = res.data.data[i].versionCount === 1 ? false : true;
if (this.tableData[i].status !== 1) {
countStatus++;
}
@@ -615,6 +621,24 @@ export default {
white-space: nowrap;
}
+.m-local {
+ background-color: rgb(22, 132, 252);
+ color: white;
+ padding: 2px 3px;
+ border-radius: 4px;
+ font-size: 12px;
+ margin-right: 2px;
+}
+
+.m-online {
+ background-color: rgb(91, 185, 115);
+ color: white;
+ padding: 2px 3px;
+ border-radius: 4px;
+ font-size: 12px;
+ margin-right: 2px;
+}
+
.el-icon-arrow-right {
font-family: element-icons !important;
speak: none;
@@ -677,6 +701,15 @@ export default {
justify-content: space-around;
}
+.op-btn-c {
+ text-align: right;
+ padding-right: 20px;
+}
+
+.op-btn {
+ margin: 0 0 0 5px;
+}
+
.disabled {
cursor: default;
pointer-events: none;
diff --git a/web_src/js/components/basic/editDialog.vue b/web_src/js/components/basic/editDialog.vue
index 19a68166f..b82b9b569 100644
--- a/web_src/js/components/basic/editDialog.vue
+++ b/web_src/js/components/basic/editDialog.vue
@@ -1,6 +1,6 @@
-
+
diff --git a/web_src/js/features/cloudrbanin.js b/web_src/js/features/cloudrbanin.js
index e6166ab7c..9630395a2 100644
--- a/web_src/js/features/cloudrbanin.js
+++ b/web_src/js/features/cloudrbanin.js
@@ -411,7 +411,7 @@ export default async function initCloudrain() {
$(`#${jobName}`).popup("toggle");
} else {
let versionData = data.filter((item) => {
- return item.Version === versionName;
+ return item.version === versionName;
});
if (versionData.length == 0) {
$(`#${jobName}`).popup("toggle");
diff --git a/web_src/js/features/i18nVue.js b/web_src/js/features/i18nVue.js
index f6d5a6411..2983b3dc1 100644
--- a/web_src/js/features/i18nVue.js
+++ b/web_src/js/features/i18nVue.js
@@ -105,6 +105,9 @@ export const i18nVue = {
file_sync_fail:"文件同步失败",
no_file_to_download:"没有文件可以下载",
task_not_finished:"任务还未结束,稍后再来看看",
+ local:"本地",
+ online:"线上",
+ modify:"修改",
},
US: {
computer_vision: "computer vision",
@@ -216,5 +219,8 @@ export const i18nVue = {
file_sync_fail:"File synchronization failed",
no_file_to_download:"No files can be downloaded",
task_not_finished:"Task not finished yet, please wait",
+ local:"Local",
+ online:"Online",
+ modify:"Modify",
},
};
diff --git a/web_src/js/index.js b/web_src/js/index.js
index bc3de08b5..001644d92 100755
--- a/web_src/js/index.js
+++ b/web_src/js/index.js
@@ -6,8 +6,10 @@ import "./publicpath.js";
import "./polyfills.js";
import "./features/letteravatar.js";
import Vue from "vue";
-import ElementUI from "element-ui";
import "element-ui/lib/theme-chalk/index.css";
+import localeEn from 'element-ui/lib/locale/lang/en';
+import localeZh from 'element-ui/lib/locale/lang/zh-CN';
+import ElementUI from "element-ui";
import axios from "axios";
import qs from "qs";
import Cookies from "js-cookie";
@@ -56,15 +58,19 @@ import './features/ad.js';
import { Fancybox } from "./vendor/fancybox.esm.js";
-Vue.use(ElementUI);
Vue.prototype.$axios = axios;
Vue.prototype.$Cookies = Cookies;
Vue.prototype.qs = qs;
Vue.prototype.$message = Message;
Vue.prototype.$locale = i18nVue;
-window.i18n = i18nVue[document.querySelector('html').getAttribute('lang') == 'zh-CN' ? 'CN' : 'US'];
+const lang = document.querySelector('html').getAttribute('lang');
+window.i18n = i18nVue[lang == 'zh-CN' ? 'CN' : 'US'];
const { AppSubUrl, StaticUrlPrefix, csrf } = window.config;
+Vue.use(ElementUI, {
+ locale: lang === 'zh-CN' ? localeZh : localeEn,
+});
+
Object.defineProperty(Vue.prototype, "$echarts", {
value: echarts,
});
@@ -5071,12 +5077,7 @@ function initcreateRepo() {
initcreateRepo();
function initChartsNpu() {
- const url = window.location.href;
- const urlArr = url.split("/");
- let userName = urlArr.slice(-5)[0];
- let repoPath = urlArr.slice(-4)[0];
- let jobID = urlArr.slice(-1)[0];
-
+ const repoPath = $('.metric_chart').data('path')
let options = {
legend: {
data: [],
@@ -5127,7 +5128,7 @@ function initChartsNpu() {
document.getElementById(`metric-${versionName}`)
);
$.get(
- `${window.config.AppSubUrl}/api/v1/repos/${userName}/${repoPath}/modelarts/train-job/${jobID}/metric_statistics?version_name=${versionName}&statistic_type=each&metrics=`,
+ `${window.config.AppSubUrl}/api/v1/repos/${repoPath}`,
(res) => {
let filterDta = res.MetricsInfo.filter((item) => {
return ![
diff --git a/web_src/vuepages/apis/modules/modelmanage.js b/web_src/vuepages/apis/modules/modelmanage.js
new file mode 100644
index 000000000..7124dcfc9
--- /dev/null
+++ b/web_src/vuepages/apis/modules/modelmanage.js
@@ -0,0 +1,106 @@
+import service from "../service";
+import Qs from 'qs';
+
+// 保存本地模型
+export const saveLocalModel = (data) => {
+ return service({
+ url: `${data.repo}/modelmanage/create_local_model`,
+ method: 'post',
+ headers: { 'Content-type': 'application/x-www-form-urlencoded' },
+ params: {},
+ data: Qs.stringify(data),
+ });
+};
+
+// 修改模型
+// data: {id,type,name,version,engine,label,description:}
+export const modifyModel = (data) => {
+ return service({
+ url: `${data.repo}/modelmanage/modify_model`,
+ method: 'put',
+ headers: { 'Content-type': 'application/x-www-form-urlencoded' },
+ params: {},
+ data: Qs.stringify(data),
+ });
+};
+
+// 求模型信息
+export const getModelInfoByName = (params) => {
+ return service({
+ url: `${params.repo}/modelmanage/show_model_info_api`,
+ method: 'get',
+ params,
+ data: {},
+ });
+};
+
+// 求模型中文件列表
+// params {repo, ID, parentDir}
+export const getModelFiles = (params) => {
+ return service({
+ url: `${params.repo}/modelmanage/query_onelevel_modelfile`,
+ method: 'get',
+ params,
+ data: {},
+ });
+};
+
+// 删除模型文件
+// params {repo, id, fileName}
+export const deleteModelFile = (params) => {
+ return service({
+ url: `${params.repo}/modelmanage/delete_model_file`,
+ method: 'delete',
+ params,
+ data: {},
+ });
+};
+
+/* 文件上传相关 */
+// 上传文件1: 获取文件chunks信息
+// params: { md5, type: 0-CPU/GPU,1-NPU, file_name, scene: 'model', modeluuid }
+// return: uploadID, uuid, uploaded, chunks, attachID, modeluuid, modelName, fileName
+export const getChunks = (params) => {
+ return service({
+ url: `/attachments/model/get_chunks`,
+ method: 'get',
+ params,
+ data: {},
+ });
+};
+
+// 上传文件2: 上传新文件
+// params: { totalChunkCounts, md5, size, fileType, type, file_name, scene=model, modeluuid=xxxx }
+// return: uploadID, uuid
+export const getNewMultipart = (params) => {
+ return service({
+ url: `/attachments/model/new_multipart`,
+ method: 'get',
+ params,
+ data: {},
+ });
+};
+
+// 上传文件3: 获取分片上传地址
+// params: { uuid, uploadID, size, chunkNumber, type, file_name, scene=model }
+// return: url
+export const getMultipartUrl = (params) => {
+ return service({
+ url: `/attachments/model/get_multipart_url`,
+ method: 'get',
+ params,
+ data: {},
+ });
+};
+
+// 上传文件4: 完成上传后
+// data: { uuid, uploadID, size, type, file_name, dataset_id, description, scene=model, modeluuid=xxxx }
+export const setCompleteMultipart = (data) => {
+ return service({
+ url: `/attachments/model/complete_multipart`,
+ method: 'post',
+ headers: { 'Content-type': 'application/x-www-form-urlencoded' },
+ params: {},
+ data: Qs.stringify(data),
+ });
+};
diff --git a/web_src/vuepages/apis/modules/resources.js b/web_src/vuepages/apis/modules/resources.js
index 32a87c53f..965d5ae04 100644
--- a/web_src/vuepages/apis/modules/resources.js
+++ b/web_src/vuepages/apis/modules/resources.js
@@ -110,6 +110,19 @@ export const getResSpecificationList = (params) => {
});
}
+// 查询资源规格列表(所有)
+// cluster 所属集群 :OpenI 启智集群,C2Net 智算集群
+// queue 所属队列id
+// status 状态 : 1 待审核 2已上架 3已下架
+export const getResSpecificationListAll = (params) => {
+ return service({
+ url: '/admin/resources/specification/list/all',
+ method: 'get',
+ params,
+ data: {},
+ });
+}
+
// 同步智算网络资源池(队列)
export const syncResSpecification = () => {
return service({
diff --git a/web_src/vuepages/const/index.js b/web_src/vuepages/const/index.js
index 4051dbb17..7ca6326f0 100644
--- a/web_src/vuepages/const/index.js
+++ b/web_src/vuepages/const/index.js
@@ -14,3 +14,6 @@ export const AI_CENTER = [{ k: 'OpenIOne', v: i18n.t('resourcesManagement.OpenIO
export const COMPUTER_RESOURCES = [{ k: 'GPU', v: 'GPU' }, { k: 'NPU', v: 'NPU' }, { k: 'MLU', v: 'MLU' }];
export const ACC_CARD_TYPE = [{ k: 'T4', v: 'T4' }, { k: 'A100', v: 'A100' }, { k: 'V100', v: 'V100' }, { k: 'ASCEND910', v: 'Ascend 910' }, { k: 'MLU270', v: 'MLU270' }, { k: 'RTX3080', v: 'RTX3080' }];
export const SPECIFICATION_STATUS = [{ k: '1', v: i18n.t('resourcesManagement.willOnShelf') }, { k: '2', v: i18n.t('resourcesManagement.onShelf') }, { k: '3', v: i18n.t('resourcesManagement.offShelf') }];
+
+// 模型
+export const MODEL_ENGINES = [{ k: '0', v: 'PyTorch' }, { k: '1', v: 'TensorFlow' }, { k: '2', v: 'MindSpore' }, { k: '4', v: 'PaddlePaddle' }, { k: '5', v: 'OneFlow' }, { k: '6', v: 'MXNet' }, { k: '3', v: 'Other' }];
diff --git a/web_src/vuepages/langs/config/en-US.js b/web_src/vuepages/langs/config/en-US.js
index da819fd46..4f55afaaa 100644
--- a/web_src/vuepages/langs/config/en-US.js
+++ b/web_src/vuepages/langs/config/en-US.js
@@ -157,7 +157,7 @@ const en = {
computeCluster: 'Compute Cluster',
resourceSpecification: 'Resource Specification',
lastUpdateTime: 'Last Update Time',
- resSceneDeleteConfirm: 'Are you sure to delete the current Resource Scene?',
+ resSceneDeleteConfirm: 'Are you sure to delete the current Resource Scene?',
resourceSpecificationIsAvailable: 'Specification Is Available',
resourceSpecificationIsAvailableAll: 'Specification Is Available(All)',
available: 'Available',
@@ -187,7 +187,7 @@ const en = {
onlyFace:'Only face',
onlyLicensePlate:'Only license plate',
dragThePictureHere:'Drag the picture here',
- or:'or',
+ or:' or ',
clickUpload:'Click upload',
dataDesensitizationModelExperience:'Data desensitization model experience',
dataDesensitizationModelDesc:'Use AI technology to desensitize the face and license plate number in the picture. For more information about this model, please visit the project',
@@ -219,7 +219,68 @@ const en = {
graphicMemory: "Graphic Memory",
memory: "Memory",
sharedMemory: "Shared Memory",
- tips:'The newly created debugging task will be placed in the project openi-notebook under your name. If there is no such project, the system will automatically create a new one.'
+ tips: 'The newly created debugging task will be placed in the project openi-notebook under your name. If there is no such project, the system will automatically create a new one.'
+ },
+ modelManage: {
+ modelManage: 'Model management',
+ modelName: 'Model name',
+ useCluster: 'Available clusters',
+ local: 'Local',
+ online: 'Online',
+ createModel: 'Create Model',
+ importLocalModel: 'Import Lacal Model',
+ importOnlineModel: 'Import Online Model',
+ modifyModelInfo: 'Modify model information',
+ addModelFiles: 'Add model files',
+ uploadModelFiles: 'Upload model files',
+ pleaseInputModelName: 'Please input model name',
+ version: 'Version',
+ modelEngine: 'Model engine',
+ modelLabel: 'Model label',
+ modelLabelInputTips: 'Input labels, multiple labels are separated by spaces',
+ modelDescr: 'Model description',
+ modelDescrInputTips: 'The description should not exceed 256 characters',
+ confirm: 'Confirm',
+ cancel: 'Cancel',
+ modelCreateFailed: 'Model create failed',
+ modelModifyFailed: 'Model modify failed',
+ fileUpload: 'File upload',
+ upload: 'Upload',
+ uploadStatus: 'Upload status',
+ modelFileUploadDefaultTips: 'Click to add files or drag files here directly',
+ modelFileUploadErrTips: 'Up to 10 files can be uploaded at a time, and the total file size of the model does not exceed {size}GB',
+ modelFileNameTips: 'The file name should not exceed 128 characters',
+ fileIstoBig: 'File is to big',
+ removeFile: 'Rmove file',
+ uploadSuccess: 'upload success',
+ uploadFailed: 'upload failed',
+ calcFileMd5: 'Calculating file MD5...',
+ uploading: 'Uploading...',
+ fileHasAlreadyInTheModel: 'This file has already in the model: ',
+ basicInfo: 'Basic information',
+ modelSize: 'Model size',
+ descr: 'Description',
+ createTime: 'Create Time',
+ label: 'Label',
+ trainTaskInfo: 'Train task information',
+ trainTask: 'Train task',
+ codeBranch: 'Code branch',
+ bootFile: 'Boot file',
+ trainDataset: 'Train dataset',
+ specInfo: 'Specifications',
+ workServerNumber: 'Amount of compute node',
+ runParameters: 'Run parameters',
+ seeMore: 'View more',
+ collapseDetails: 'Collapse details',
+ modelFilesList: 'Mode files list',
+ fileName: 'File name',
+ fileSize: 'File size',
+ updateTime: 'Upate Time',
+ operate: 'Operation',
+ delete: 'Delete',
+ infoModificationFailed: 'Information modify failed',
+ deleteModelFileConfirmTips: 'Are you sure you want to delete the current model file?',
+ modelFileDeleteFailed: 'Model file delete failed',
},
}
diff --git a/web_src/vuepages/langs/config/zh-CN.js b/web_src/vuepages/langs/config/zh-CN.js
index a329d8697..1a55f5688 100644
--- a/web_src/vuepages/langs/config/zh-CN.js
+++ b/web_src/vuepages/langs/config/zh-CN.js
@@ -222,6 +222,69 @@ const zh = {
sharedMemory: "共享内存",
tips:'本次新建的调试任务会放在您名下项目openi-notebook中,如果没有该项目系统会自动新建一个。'
},
+ modelManage: {
+ modelManage: '模型管理',
+ modelName: '模型名称',
+ useCluster: '可用集群',
+ local: '本地',
+ online: '线上',
+ createModel: '创建模型',
+ importLocalModel: '导入本地模型',
+ importOnlineModel: '导入线上模型',
+ modifyModelInfo: '修改模型信息',
+ addModelFiles: '增加模型文件',
+ uploadModelFiles: '上传模型文件',
+ pleaseInputModelName: '请输入模型名称',
+ version: '版本',
+ modelEngine: '模型框架',
+ modelLabel: '模型标签',
+ modelLabelInputTips: '输入标签,多个标签用空格区分',
+ modelDescr: '模型描述',
+ modelDescrInputTips: '描述字数不超过255个字符',
+ confirm: '确定',
+ cancel: '取消',
+ modelCreateFailed: '模型创建失败',
+ modelModifyFailed: '模型修改失败',
+ fileUpload: '文件上传',
+ upload: '上传',
+ uploadStatus: '上传状态',
+ modelFileUploadDefaultTips: '点击添加文件或直接拖拽文件到此处',
+ modelFileUploadErrTips: '单次最多上传10个文件,模型总文件大小不超过{size}G',
+ modelFileNameTips: '文件名长度不超过128个字符',
+ fileIstoBig: '文件太大',
+ removeFile: '移除文件',
+ uploadSuccess: '上传成功',
+ uploadFailed: '上传失败',
+ calcFileMd5: '计算文件MD5...',
+ uploading: '上传中...',
+ fileHasAlreadyInTheModel: '该文件已上传在模型:',
+ basicInfo: '基本信息',
+ modelSize: '模型大小',
+ descr: '描述',
+ createTime: '创建时间',
+ label: '标签',
+ trainTaskInfo: '训练相关信息',
+ trainTask: '训练任务',
+ codeBranch: '代码分支',
+ bootFile: '启动文件',
+ trainDataset: '训练数据集',
+ specInfo: '规格',
+ workServerNumber: '计算节点',
+ runParameters: '运行参数',
+ seeMore: '查看更多信息',
+ collapseDetails: '折叠详细信息',
+ modelFilesList: '模型文件列表',
+ fileName: '文件名称',
+ fileSize: '文件大小',
+ updateTime: '更新时间',
+ operate: '操作',
+ delete: '删除',
+ infoModificationFailed: '信息修改失败',
+ deleteModelFileConfirmTips: '请确认是否删除当前模型文件?',
+ modelFileDeleteFailed: '模型文件删除失败',
+ },
};
+
+
export default zh;
diff --git a/web_src/vuepages/pages/model/tuomin/index.vue b/web_src/vuepages/pages/model/tuomin/index.vue
index 6c7813977..f97787198 100644
--- a/web_src/vuepages/pages/model/tuomin/index.vue
+++ b/web_src/vuepages/pages/model/tuomin/index.vue
@@ -33,11 +33,9 @@
drag
>
- {{ $t("dragThePictureHere")
- }}{{
- $t("or")
- }}{{ $t("clickUpload") }}
+
+ {{ $t("dragThePictureHere") }}{{ $t("or") }}{{ $t("clickUpload") }}
+
diff --git a/web_src/vuepages/pages/modelmanage/common/modelmanage-common-detail.vue b/web_src/vuepages/pages/modelmanage/common/modelmanage-common-detail.vue
new file mode 100644
index 000000000..995e2d83f
--- /dev/null
+++ b/web_src/vuepages/pages/modelmanage/common/modelmanage-common-detail.vue
@@ -0,0 +1,706 @@
+
+
+
+
+
+ {{ $t('modelManage.basicInfo') }}:
+
+
+
+ {{ $t('modelManage.useCluster') }}:
+
+
+ {{ state.typeStr }}
+
+
+
+
+ {{ $t('modelManage.modelSize') }}:
+
+ {{ state.modelSize }}
+
+
+
+ {{ $t('modelManage.descr') }}:
+
+
+ {{ state.description }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('modelManage.modelEngine') }}:
+
+ {{ state.engineName }}
+
+
+
+ {{ $t('modelManage.createTime') }}:
+
+ {{ state.createTime }}
+
+
+
+ {{ $t('modelManage.label') }}:
+
+
+ {{ state.label }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('modelManage.trainTaskInfo') }}:
+
+
+
+ {{ $t('modelManage.trainTask') }}:
+
+
+
+ {{ $t('modelManage.codeBranch') }}:
+
+
+
+ {{ $t('modelManage.bootFile') }}:
+
+
+
+ {{ $t('modelManage.trainDataset') }}:
+
+ {{ state.datasetName }}
+
+
+
+
+
+ {{ $t('modelManage.specInfo') }}:
+
+
+
+ {{ $t('modelManage.workServerNumber') }}:
+
+ {{ state.workServerNumber }}
+
+
+
+ {{ $t('modelManage.runParameters') }}:
+
+ {{ state.parameters }}
+
+
+
+
+
+
+
+
+
+ {{ isExpanded ? $t('modelManage.collapseDetails') : $t('modelManage.seeMore') }}
+
+
+
+
+
+
+ {{ $t('modelManage.modelFilesList') }}:
+
+
+
+
+ {{ $t('modelManage.uploadModelFiles') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('modelManage.delete')
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web_src/vuepages/pages/modelmanage/common/vp-modelmanage-common-detail.js b/web_src/vuepages/pages/modelmanage/common/vp-modelmanage-common-detail.js
new file mode 100644
index 000000000..13814a369
--- /dev/null
+++ b/web_src/vuepages/pages/modelmanage/common/vp-modelmanage-common-detail.js
@@ -0,0 +1,17 @@
+import Vue from 'vue';
+import ElementUI from 'element-ui';
+import 'element-ui/lib/theme-chalk/index.css';
+import localeEn from 'element-ui/lib/locale/lang/en';
+import localeZh from 'element-ui/lib/locale/lang/zh-CN';
+import { i18n, lang } from '~/langs';
+import App from './modelmanage-common-detail.vue';
+
+Vue.use(ElementUI, {
+ locale: lang === 'zh-CN' ? localeZh : localeEn,
+ size: 'small',
+});
+
+new Vue({
+ i18n,
+ render: (h) => h(App),
+}).$mount('#__vue-root');
diff --git a/web_src/vuepages/pages/modelmanage/local/modelmanage-local-create-1.vue b/web_src/vuepages/pages/modelmanage/local/modelmanage-local-create-1.vue
new file mode 100644
index 000000000..fefcf4114
--- /dev/null
+++ b/web_src/vuepages/pages/modelmanage/local/modelmanage-local-create-1.vue
@@ -0,0 +1,470 @@
+
+
+
+
+
+
+ 1
+ {{ $t('modelManage.createModel') }}
+
+
+
+ 2
+ {{ $t('modelManage.uploadModelFiles') }}
+
+
+
+
+
+
+
+
+ CPU / GPU
+
+
+
+ Ascend NPU
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ type == '1' ? $t('modelManage.confirm') :
+ $t('modelManage.createModel')
+ }}
+
+ {{ $t('modelManage.cancel') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/web_src/vuepages/pages/modelmanage/local/modelmanage-local-create-2.vue b/web_src/vuepages/pages/modelmanage/local/modelmanage-local-create-2.vue
new file mode 100644
index 000000000..209707147
--- /dev/null
+++ b/web_src/vuepages/pages/modelmanage/local/modelmanage-local-create-2.vue
@@ -0,0 +1,851 @@
+
+
+
+
+
+
+ 1
+ {{ $t('modelManage.createModel') }}
+
+
+
+ 2
+ {{ $t('modelManage.uploadModelFiles') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('modelManage.upload') }}
+
+ {{ $t('modelManage.cancel') }}
+
+
+
+
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+ {{ uploadStatusList[index].status }}
+
+ {{ uploadStatusList[index].failedInfo }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/web_src/vuepages/pages/modelmanage/local/vp-modelmanage-local-create-1.js b/web_src/vuepages/pages/modelmanage/local/vp-modelmanage-local-create-1.js
new file mode 100644
index 000000000..c2054c59a
--- /dev/null
+++ b/web_src/vuepages/pages/modelmanage/local/vp-modelmanage-local-create-1.js
@@ -0,0 +1,17 @@
+import Vue from 'vue';
+import ElementUI from 'element-ui';
+import 'element-ui/lib/theme-chalk/index.css';
+import localeEn from 'element-ui/lib/locale/lang/en';
+import localeZh from 'element-ui/lib/locale/lang/zh-CN';
+import { i18n, lang } from '~/langs';
+import App from './modelmanage-local-create-1.vue';
+
+Vue.use(ElementUI, {
+ locale: lang === 'zh-CN' ? localeZh : localeEn,
+ size: 'small',
+});
+
+new Vue({
+ i18n,
+ render: (h) => h(App),
+}).$mount('#__vue-root');
diff --git a/web_src/vuepages/pages/modelmanage/local/vp-modelmanage-local-create-2.js b/web_src/vuepages/pages/modelmanage/local/vp-modelmanage-local-create-2.js
new file mode 100644
index 000000000..2cad84464
--- /dev/null
+++ b/web_src/vuepages/pages/modelmanage/local/vp-modelmanage-local-create-2.js
@@ -0,0 +1,17 @@
+import Vue from 'vue';
+import ElementUI from 'element-ui';
+import 'element-ui/lib/theme-chalk/index.css';
+import localeEn from 'element-ui/lib/locale/lang/en';
+import localeZh from 'element-ui/lib/locale/lang/zh-CN';
+import { i18n, lang } from '~/langs';
+import App from './modelmanage-local-create-2.vue';
+
+Vue.use(ElementUI, {
+ locale: lang === 'zh-CN' ? localeZh : localeEn,
+ size: 'small',
+});
+
+new Vue({
+ i18n,
+ render: (h) => h(App),
+}).$mount('#__vue-root');
diff --git a/web_src/vuepages/pages/resources/components/SceneDialog.vue b/web_src/vuepages/pages/resources/components/SceneDialog.vue
index 3b77be6e2..fed3f8db0 100644
--- a/web_src/vuepages/pages/resources/components/SceneDialog.vue
+++ b/web_src/vuepages/pages/resources/components/SceneDialog.vue
@@ -69,7 +69,9 @@
-
+
+
+
@@ -87,7 +89,7 @@
|