From f9da574593e007e07246800d62bfed54ffe38465 Mon Sep 17 00:00:00 2001 From: fuchao Date: Mon, 11 Aug 2025 17:27:38 +0800 Subject: [PATCH] =?UTF-8?q?MindStudio=E8=B5=84=E6=96=99=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docs/source_zh_cn/feature/performance.md | 2 +- .../docs/source_zh_cn/feature/precision.md | 14 ++--- .../docs/source_zh_cn/images/MindStudio.png | Bin 0 -> 98767 bytes docs/mindstudio/docs/source_zh_cn/index.rst | 52 ++++-------------- docs/mindstudio/docs/source_zh_cn/overview.md | 44 +++++++++++++++ 5 files changed, 63 insertions(+), 49 deletions(-) create mode 100644 docs/mindstudio/docs/source_zh_cn/images/MindStudio.png create mode 100644 docs/mindstudio/docs/source_zh_cn/overview.md diff --git a/docs/mindstudio/docs/source_zh_cn/feature/performance.md b/docs/mindstudio/docs/source_zh_cn/feature/performance.md index e504f5dabf..ac00bb96c5 100644 --- a/docs/mindstudio/docs/source_zh_cn/feature/performance.md +++ b/docs/mindstudio/docs/source_zh_cn/feature/performance.md @@ -78,7 +78,7 @@ MindStudio Training Tools工具链中的MindStudio Insight工具、msprof-analyz msleaks - 内存泄漏检测 + 内存分析 提供Step内和Step间的内存异常检测能力,包括Step内内存泄漏分析和Step间内存对比分析。 适用于分析内存泄漏异常的场景。 diff --git a/docs/mindstudio/docs/source_zh_cn/feature/precision.md b/docs/mindstudio/docs/source_zh_cn/feature/precision.md index e208221f4d..99c9d5999d 100644 --- a/docs/mindstudio/docs/source_zh_cn/feature/precision.md +++ b/docs/mindstudio/docs/source_zh_cn/feature/precision.md @@ -14,17 +14,11 @@ msprobe 是 MindStudio Training Tools 工具链下精度调试部分的工具包 msprobe - 离线预检 + 离线精度预检 为网络中每个API创建用例,检验其精度,并根据不同比对算法综合判定API在NPU上的精度是否达标,快速找出精度差异API。 1. 对模型中所有的API做精度初步排查
2. 精度排查不受模型累计误差影响 仅支持mindspore.mint API - - 训练状态监控 - 收集模型训练过程中的激活值、梯度和优化器状态,助力分析计算、通信、优化器各部分异常情况。 - 通过监控模块级统计量指标,快速定位异常模块位置,如loss出现Nan - 1. 仅支持模块级别统计量指标分析
2. 仅支持Megatron、DeepSeed框架
3. 会产生少量耗时和显存膨胀 - 数据采集 采集模型训练过程中的API或Cell层级的前反向输入输出数据,包括层次关系、统计值信息、真实数据和调用栈等。 @@ -37,6 +31,12 @@ msprobe 是 MindStudio Training Tools 工具链下精度调试部分的工具包 1. 当模型出现溢出时,可用于定位最先溢出的API或Cell或kernel
2. 相比数据采集,性能更优,磁盘压力更小 1. 除具有与数据采集功能相同的约束外,动态图场景下,不支持 Primitive 和 Jit 类 API 的检测
2. 动态图场景下,仅支持检测API或Cell级别溢出
3. 静态图场景下,仅支持检测kernel级别溢出 + + 训练状态监控 + 收集模型训练过程中的激活值、梯度和优化器状态,助力分析计算、通信、优化器各部分异常情况。 + 通过监控模块级统计量指标,快速定位异常模块位置,如loss出现Nan + 1. 仅支持模块级别统计量指标分析
2. 仅支持Megatron、DeepSeed框架
3. 会产生少量耗时和显存膨胀 + 可视化比对 解析Dump的精度数据,还原模型图结构,比对各层级精度数据,助力理解模型结构、分析精度问题。 diff --git a/docs/mindstudio/docs/source_zh_cn/images/MindStudio.png b/docs/mindstudio/docs/source_zh_cn/images/MindStudio.png new file mode 100644 index 0000000000000000000000000000000000000000..2bc5bf44fbd19c83a5bd49f591113b9833009fd7 GIT binary patch literal 98767 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 +.. image:: ./images/MindStudio.png + :alt: Architecture + +.. toctree:: + :glob: + :maxdepth: 1 + :caption: 工具概览与安装 + :hidden: + + overview + .. toctree:: :glob: :maxdepth: 1 @@ -33,44 +44,3 @@ MindStudio是面向AI开发者提供的全流程工具链,提供了精度、 :hidden: guide/large_model - -调试调优工具概览与安装说明 --------------------------------- - -.. raw:: html - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
类型名称简介安装指南
精度调试msprobe提供精度数据采集、精度预检、精度比对和溢出检测等精度调试功能。推荐优先选择msprobe 8.1.1版本安装msprobe
性能调优ProfilerMindSpore框架内置的性能数据采集、分析工具。推荐优先选择MindSpore 2.7.0版本。安装MindSpore
msprof-anaylze为采集的性能数据提供统计、分析、专家建议等功能。推荐优先选择msprof-anaylze 2.0.2版本安装msprof-anaylze
msleaksCANN包提供的命令行工具,用于模型训内存问题定位,提供Step内和Step间的内存异常检测能力,包括Step内内存泄漏分析和Step间内存对比分析。安装MindSpore
MindStudio Insight可视化性能调优工具,提供时间线视图、算子耗时、通信瓶颈分析等功能,辅助快速分析模型性能瓶颈。安装MindStudio Insight
查询版本配套关系
\ No newline at end of file diff --git a/docs/mindstudio/docs/source_zh_cn/overview.md b/docs/mindstudio/docs/source_zh_cn/overview.md new file mode 100644 index 0000000000..3b6f1e6b89 --- /dev/null +++ b/docs/mindstudio/docs/source_zh_cn/overview.md @@ -0,0 +1,44 @@ +# 调试调优工具概览与安装说明 + +[![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/r2.7.0/resource/_static/logo_source.svg)](https://gitee.com/mindspore/docs/blob/r2.7.0/docs/mindstudio/docs/source_zh_cn/overview.md) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
类型名称简介安装指南
精度调试msprobe提供精度数据采集、精度预检、精度比对和溢出检测等精度调试功能。推荐优先选择msprobe 8.1.1版本安装msprobe
Tensorboard可视化比对工具:为msprobe采集的模型结构和精度数据提供可视化比对功能。仅支持MindSpore>=2.4.0版本。安装tb_graph_ascend
性能调优ProfilerMindSpore框架内置的性能数据采集、分析工具。推荐优先选择MindSpore 2.7.0版本。安装MindSpore
msprof-anaylze为采集的性能数据提供统计、分析、专家建议等功能。推荐优先选择msprof-anaylze 2.0.2版本安装msprof-anaylze
msleaksCANN包提供的命令行工具,用于模型训内存问题定位,提供Step内和Step间的内存异常检测能力,包括Step内内存泄漏分析和Step间内存对比分析。安装MindSpore
MindStudio Insight可视化性能调优工具,提供时间线视图、算子耗时、通信瓶颈分析等功能,辅助快速分析模型性能瓶颈。安装MindStudio Insight
查询版本配套关系
-- Gitee