From bda660f4f1e598d724d1abeaf0e6d1ac30666915 Mon Sep 17 00:00:00 2001
From: sunchao <1299792067@qq.com>
Date: Fri, 18 Jul 2025 09:37:01 +0800
Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=8E=88=20perf:=20=E6=96=87=E4=BB=B6?=
=?UTF-8?q?=E5=AE=89=E5=85=A8=E5=8A=A0=E5=9B=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../tb_graph_ascend/README.md | 9 +-
.../doc/images/safe_warning.png | Bin 0 -> 69746 bytes
.../doc/images/vis_match_info.png | Bin 176330 -> 193799 bytes
.../tb_graph_ascend/fe/package-lock.json | 160 +++++++++-----
.../tb_graph_ascend/fe/package.json | 4 +-
.../fe/src/graph_ascend/index.ts | 79 ++++++-
.../fe/src/graph_ascend/type/index.d.ts | 13 ++
.../fe/src/graph_ascend/useGraphAscend.ts | 21 +-
.../components/tf_manual_match/index.ts | 16 +-
.../components/tf_manual_match/useMatched.ts | 13 +-
.../src/graph_controls_board/type/index.d.ts | 4 +-
.../components/tf_vaddin_text_table/index.ts | 2 +-
.../fe/src/graph_info_board/useNodeInfo.ts | 14 --
.../tb_graph_ascend/fe/src/index.css | 22 ++
.../server/app/controllers/hierarchy.py | 6 +
.../app/controllers/match_nodes_controller.py | 12 +-
.../server/app/service/graph_service.py | 63 ++++--
.../server/app/utils/global_state.py | 3 +
.../server/app/utils/graph_utils.py | 208 +++++++++++-------
.../server/app/views/graph_views.py | 9 +-
20 files changed, 466 insertions(+), 192 deletions(-)
create mode 100644 plugins/tensorboard-plugins/tb_graph_ascend/doc/images/safe_warning.png
diff --git a/plugins/tensorboard-plugins/tb_graph_ascend/README.md b/plugins/tensorboard-plugins/tb_graph_ascend/README.md
index 3c92c12c24..737292598e 100644
--- a/plugins/tensorboard-plugins/tb_graph_ascend/README.md
+++ b/plugins/tensorboard-plugins/tb_graph_ascend/README.md
@@ -121,7 +121,10 @@

### 3.6 手动选择节点匹配
可通过浏览器界面,通过鼠标选择两个待匹配的灰色节点进行匹配。当前暂不支持真实数据模式。
-点击匹配后会将两个节点的子节点按照Module名称依次匹配,取消匹配后会将子节点的匹配关系清除。
+如果选中"操作选中节点及其子节点":
+点击匹配后会将两个节点及其子节点按照Module名称依次匹配,取消匹配后会将子节点的匹配关系清除。
+否则:
+点击匹配后只会将两个节点进行匹配,取消匹配后会将节点的匹配关系清除
注意:匹配结束之后,需要点击保存才能持久化到源文件里面

@@ -140,6 +143,10 @@
#### 4.1.1 免责声明
本工具为基于 TensorBoard 底座开发的插件,使用本插件需要基于 TensorBoard 运行,请自行关注 TensorBoard 相关安全配置和安全风险。
+
+打开本工具时,本工具会对logdir目录下的vis文件以及其父目录进行安全检查,如果存在安全风险,本工具会展示如下提示信息,询问用户是否继续执行,用户选择继续执行后,可以操作未通过安全检查的文件和目录,用户需要自行承担操作风险。如果用户选择不继续执行,则用户只能操作通过安全检查的文件。
+
+
#### 4.1.2 TensorBoard版本说明
满足[相关依赖](#1-相关依赖)中要求的 TensorBoard 版本皆可正常使用本插件功能,但为 TensorBoard 本身安全风险考虑,建议使用最新版本 TensorBoard 。
#### 4.1.3 远程查看数据
diff --git a/plugins/tensorboard-plugins/tb_graph_ascend/doc/images/safe_warning.png b/plugins/tensorboard-plugins/tb_graph_ascend/doc/images/safe_warning.png
new file mode 100644
index 0000000000000000000000000000000000000000..15b14eab1fd7a5710cc540e1126c346f5291fb8a
GIT binary patch
literal 69746
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