ModelVis
一、介绍
ModelVis 是一个跨平台的桌面应用程序,专为可视化AI大模型的图结构数据而设计。 它支持多种文件格式,包括 ONNX、MindIR、GEIR、PBTXT (以 protobuf 格式序列化) 文件类型和 PyTorch 开启调试时导出的调试图 DOT 文件,并允许用户深入探索和理解复杂的神经网络架构。
ModelVis 是一个轻量级工具,用于可视化机器学习模型。受 Netron 的启发,具有更好的性能。
1.1 特性
- 交互式: 可视化图形
- 快速: 由 Rust 驱动的解析和布局
- 流畅: 由 WebWorker 驱动的渲染
- 广泛格式兼容: 支持 ONNX、MindIR、GEIR、PBTXT 和 DOT 文件类型的导入。
- 子图导航: 轻松查看嵌套的子图结构,并支持跳转子图和返回上一层级。
- 重复结构(FSG)搜索: 识别并定位重复的算子结构,以支持算子融合,从而优化模型性能。
- 性能分析: 最新版本支持导入昇腾 msprof 采集的 Profiling 数据,帮助用户分析算子运行耗时和内存搬运时间。
二、安装教程
请访问 Releases(临时) 页面下载适用于您操作系统的安装包。按照安装向导完成安装过程。
- MacOS 版本: Ventura 13.5 及以上
- Windows 版本: Win 10 及以上
2.1 Mac 安装问题
2.1.1 打开报错

解决方法:在控制台输入指令 xattr -cr /Applications/ModelVis.app
三、使用说明
3.1 文件导入
打开首页,然后点击页面中间的上传按钮。

3.2 图可视化展示
选择文件后,应用程序将显示图形数据的布局。

3.2.1 查看节点、边详情
点击一个节点将显示其名称、操作类型、输入和输出。

3.2.2 动态形状算子节点
注意:动态形状算子节点功能依赖模型结构信息,具有动态算子的模型才会显示这个功能。
动态形状,在 PyTorch 文档中称作 Dynamic Shape,在 vLLM 文档中称作 Symbolic Shape。 我们这里沿用 PyTorch 的说法。
显示动态节点的列表,点击后滚动到该节点。

3.3 子图跳转
注意:子图跳转功能依赖模型结构信息,具有子图的模型才会显示这个功能。
点击子图节点,页面将跳转以显示子图的布局。(子图节点有两种颜色。绿色表示子图布局完成,红色表示子图布局未完成。只有绿色的子图节点可点击。)

点击左下角工具提示中的面包屑导航上的上一个图表,页面将跳转到上一个图表。

3.4 搜索节点、跳转
点击左上角搜索框,输入节点名称,点击搜索按钮,将使相应的结果在屏幕上居中。

3.5 重复结构(FSG)搜索
点击左下角工具提示中的 FSG 按钮,以切换 FSG (Frequent Substructure Graph) 功能的可见性。

选中表格一行,可查看这类重复结构中的一个图形在图中的位置。

- 点击表格内的“上”、“下”箭头,可以上下跳转,查看某一个具体重复结构图形:
; - 打开表头的“全部结构”开关,可以查看这类重复结构的全部图形:
。
3.6 Profiling 数据导入,耗时分析
在 FSG 的模态框中点击 “导入CSV” 按钮以导入配置数据。
注意:Profiling 数据是对重复结构(FSG)功能的增强,用于展示重复结构的算子运行耗时和内存搬运时间,找到耗时长的算子,从而建议哪些算子融合,提高模型效率。
通常 Profiling 数据是和模型结构数据配套的,通过脚本获取,一起导出。导入非配套的 Profiling 数据可能会得到错误的耗时结果。
获取 Profiling 数据的工具:msprof

只允许导入 kernel_details.csv 和 op_summary*.csv 这两种命名方式的 CSV 文件。

3.7 缩略图
点击左下角工具提示中的 Minimap 按钮,可以打开缩略图,查看当前可视窗口展现的是模型的哪一部分。

四 打包时依赖
确保安装 Maven 与 GraalVM 并配置好环境变量
其中 GraalVM 的环境变量设置:
GRAALVM_HOME = "{GraalVM安装路径}"
PATH += "{GraalVM安装路径}/bin"
环境配置好后,根据您的操作系统,在/build目录下选择您的系统,运行build_release脚本即可
mac用户可能需要先安装brew install protobuf
若您需要切换Maven源,脚本可以接受一个参数,表示您的Maven setting文件的路径。
五 开发者测试与覆盖率
当需要运行测试用例,检查测试覆盖率时,需要做以下步骤。
5.1 安装 cargo-tarpaulin
cargo install cargo-tarpaulin
5.2 运行测试脚本
在 app/package.json 中启动脚本
pnpm run cargo-test
完成后,将会生成 reports 文件夹记录测试覆盖率