diff --git a/mindinsight/ui/src/assets/images/comming-soon.png b/mindinsight/ui/src/assets/images/coming-soon.png similarity index 100% rename from mindinsight/ui/src/assets/images/comming-soon.png rename to mindinsight/ui/src/assets/images/coming-soon.png diff --git a/mindinsight/ui/src/components/header.vue b/mindinsight/ui/src/components/header.vue index 3c1429e70a6c650446da99225638e557a019642d..2df04b3302bd127d5d5480185ca4f0e62734b48e 100644 --- a/mindinsight/ui/src/components/header.vue +++ b/mindinsight/ui/src/components/header.vue @@ -157,13 +157,11 @@ export default { getActive() { const str = this.$route.path.split('/'); if (str.length > 2) { - if (str[1] === 'train-manage') { + if (str[1] === 'train-manage' || str[1] === 'profiling') { return '/summary-manage'; } else { return '/' + str[1]; } - } else if (this.$route.path === '/profiler') { - return '/summary-manage'; } else { return this.$route.path; } diff --git a/mindinsight/ui/src/locales/zh-cn.json b/mindinsight/ui/src/locales/zh-cn.json index e6f37b9c6058d02965cd37518f6fe80c10aad597..3408f7ad699f0e78b039fd9bb6f3e236c6ff0770 100644 --- a/mindinsight/ui/src/locales/zh-cn.json +++ b/mindinsight/ui/src/locales/zh-cn.json @@ -207,7 +207,7 @@ "finish": "完成", "dataTooLarge": "节点和边的数量过多,导致打开失败" }, - "profiler": { + "operator": { "titleText": "性能分析", "currentCard": "当前卡片", "pie": "饼图", @@ -220,6 +220,54 @@ "searchByType": "请输入算子类型搜索", "searchByName": "请输入算子名称搜索" }, + "profiling": { + "profilingDashboard": "性能看板", + "selectStep": "请选择step", + "showAverage": "展示平均值", + "iterationGapTime": "迭代间隙时间", + "time": "时间", + "inputNum": "请输入卡编号", + "path": "路径", + "number": "卡编号", + "distribution": "分布图", + "queueEmptyRatio": "队列空比例", + "queueFullRatio": "队列满比例", + "dataQueueDis": "数据队列分布图", + "operatorTimeConAnalysis": "算子耗时分析", + "timeConStastic": "耗时统计", + "avgCost": "平均总耗时", + "getCost": "平均取数据耗时", + "pushCost": "平均push耗时", + "lterationGap": "迭代间隙", + "lterationTail": "迭代拖尾", + "propertion": "占比", + "title": "迭代间隙流程分析", + "dataDeal": "数据处理", + "dataQueue": "数据队列", + "errorTip": "个step出现异常", + "pipelineError": "Pipeline异常step", + "deviceQueueError": "device_queue_op异常step", + "getNextError": "get_next异常step", + "smartHelper":"小助手", + "suggestions":"优化建议", + "stepSelect":"Step选择", + "curCard":"当前卡片", + "stepTrace":"迭代轨迹", + "mindData":"数据准备", + "timeLine":"时间线", + "rankOfOperator":"算子耗时统计排名", + "stepTraceDetail":"迭代轨迹详情", + "viewDetail":"查看详情", + "stepNum":"耗时step数", + "iterGapTimeLabel":"迭代间隙时长", + "iterGapRateLabel":"迭代间隙占比", + "fpBpTimeLabel":"FP+BP时长", + "fpBpRateLabel":"FP+BP占比", + "tailTimeLabel":"迭代拖尾时长", + "tailRateLabel":"迭代拖尾占比", + "operatorDetail": "算子详情", + "times": "次" + }, "components": { "summaryTitle": "训练选择", "tagSelectTitle": "标签选择", @@ -233,7 +281,6 @@ "50540001": "参数类型错误,请检查请求参数类型是否都符合要求", "50540002": "参数值错误,请检查请求参数值是否都符合要求", "50540003": "参数缺失必需的参数,请检查请求参数是否必填项都满足", - "50545001": "API 路由资源不存在", "50545002": "请求API的HTTP方法错误", "50545005": "训练作业不存在", @@ -250,6 +297,7 @@ "50542215": "查询参数错误", "50542216": "Summary日志文件未找到", "50542217": "Summary日志路径错误", - "50542218": "筛选参数错误" + "50542218": "筛选参数错误", + "50546102": "step_id取值错误" } } diff --git a/mindinsight/ui/src/router.js b/mindinsight/ui/src/router.js index d413d93564c1be0e4de89e0bf263996aa361e740..a009d28e0ea98f11e96e7beecf70005865c9e35d 100644 --- a/mindinsight/ui/src/router.js +++ b/mindinsight/ui/src/router.js @@ -67,11 +67,27 @@ export default new Router({ component: () => import('./views/train-manage/data-traceback.vue'), }, { - path: '/profiler', - component: () => import('./views/train-manage/profiler.vue'), - }, { path: '/compare-plate', component: () => import('./views/train-manage/compare-plate.vue'), }, + { + path: '/profiling', + component: () => import('./views/train-manage/profiling.vue'), + redirect: '/profiling/profiling-dashboard', + children: [ + { + path: 'profiling-dashboard', + component: () => import('./views/train-manage/profiling-dashboard.vue'), + }, + { + path: 'step-trace', + component: () => import('./views/train-manage/step-trace.vue'), + }, + { + path: 'operator', + component: () => import('./views/train-manage/operator.vue'), + }, + ], + }, ], }); diff --git a/mindinsight/ui/src/services/request-service.js b/mindinsight/ui/src/services/request-service.js index d30a5424b5eddb705801b7d588879bd073dae3f7..53f4bbb933fc99b35e65325051b7f1ce249f36cd 100644 --- a/mindinsight/ui/src/services/request-service.js +++ b/mindinsight/ui/src/services/request-service.js @@ -171,6 +171,30 @@ export default { url: '/v1/mindinsight/profile/ops/search', params: params.params, data: params.body, + headers: { + ignoreError: true, + }, + }); + }, + // query training trace + queryTrainingTrace(params) { + return axios({ + method: 'get', + url: '/v1/mindinsight/profile/training-trace/graph', + params: params, + headers: { + ignoreError: true, + }, + }); + }, + targetTimeInfo(params) { + return axios({ + method: 'get', + url: '/v1/mindinsight/profile/training-trace/target-time-info', + params: params, + headers: { + ignoreError: true, + }, }); }, }; diff --git a/mindinsight/ui/src/views/train-manage/data-map.vue b/mindinsight/ui/src/views/train-manage/data-map.vue index 02ec0fa77546670c574f0dd4eb23e5d0835b05d9..cfe0fa0a3d25910532e826d4e8c36616180e10dc 100644 --- a/mindinsight/ui/src/views/train-manage/data-map.vue +++ b/mindinsight/ui/src/views/train-manage/data-map.vue @@ -168,11 +168,11 @@ export default { if (!this.$route.query || !this.$route.query.train_id) { this.trainJobID = ''; this.$message.error(this.$t('trainingDashboard.invalidId')); - document.title = this.$t('trainingDashboard.dataMap') + '-MindInsight'; + document.title = `${this.$t('trainingDashboard.dataMap')}-MindInsight`; return; } this.trainJobID = this.$route.query.train_id; - document.title = decodeURIComponent(this.trainJobID) + '-' + this.$t('trainingDashboard.dataMap') + '-MindInsight'; + document.title = `${decodeURIComponent(this.trainJobID)}-${this.$t('trainingDashboard.dataMap')}-MindInsight`; this.$nextTick(() => { this.queryGraphData(); }); diff --git a/mindinsight/ui/src/views/train-manage/profiler.vue b/mindinsight/ui/src/views/train-manage/profiler.vue deleted file mode 100644 index 151b39adacba237fd2953988669e31b23131e11a..0000000000000000000000000000000000000000 --- a/mindinsight/ui/src/views/train-manage/profiler.vue +++ /dev/null @@ -1,1262 +0,0 @@ - - - diff --git a/mindinsight/ui/src/views/train-manage/summary-manage.vue b/mindinsight/ui/src/views/train-manage/summary-manage.vue index 42ee7149adfb3942f407eb072eb9319538401f85..e1a2f2f4e9727720b70d9e4739f4e97f80120941 100644 --- a/mindinsight/ui/src/views/train-manage/summary-manage.vue +++ b/mindinsight/ui/src/views/train-manage/summary-manage.vue @@ -108,7 +108,7 @@ export default { destroyed() {}, activated() {}, mounted() { - document.title = this.$t('summaryManage.summaryList') + '-MindInsight'; + document.title = `${this.$t('summaryManage.summaryList')}-MindInsight`; this.$nextTick(() => { this.init(); }); @@ -181,13 +181,17 @@ export default { goToProfiler(row) { const profilerDir = encodeURIComponent(row.profiler_dir); const trainId = encodeURIComponent(row.train_id); - this.$router.push({ - path: '/profiler', + const path = encodeURIComponent(row.relative_path); + + const routeUrl = this.$router.resolve({ + path: '/profiling', query: { dir: profilerDir, id: trainId, + path: path, }, }); + window.open(routeUrl.href, '_blank'); }, }, components: {}, diff --git a/mindinsight/ui/src/views/train-manage/training-dashboard.vue b/mindinsight/ui/src/views/train-manage/training-dashboard.vue index 6d16add55f2927e6e796528de3a5f9832fdc9d03..a4a5247cb91dc60a39d17b7903cd5bcb64eaedda 100644 --- a/mindinsight/ui/src/views/train-manage/training-dashboard.vue +++ b/mindinsight/ui/src/views/train-manage/training-dashboard.vue @@ -146,10 +146,10 @@ limitations under the License.
-
-
- -

+

+
+ +

{{$t("public.stayTuned")}}

@@ -1888,14 +1888,14 @@ export default { } } - .comming-soon-content { + .coming-soon-content { width: 100%; height: 100%; text-align: center; - .comming-soon-container { + .coming-soon-container { position: relative; top: calc(50% - 88px); - .comming-soon-text { + .coming-soon-text { color: #000000; font-size: 16px; }