From d2c8dcc999274fb438cfe99694a658e9ddd91ad3 Mon Sep 17 00:00:00 2001 From: fuchao Date: Fri, 24 Oct 2025 20:08:03 +0800 Subject: [PATCH] =?UTF-8?q?MindStudio=E6=96=87=E6=A1=A3=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docs/source_zh_cn/feature/performance.md | 6 ++-- .../docs/source_zh_cn/feature/precision.md | 34 ++++++++++++------ .../docs/source_zh_cn/guide/large_model.md | 8 ++--- .../source_zh_cn/images/MindStudio8.2.RC1.png | Bin 0 -> 64873 bytes docs/mindstudio/docs/source_zh_cn/index.rst | 4 +-- docs/mindstudio/docs/source_zh_cn/overview.md | 18 +++++----- .../version/mindstudio_insight.md | 3 +- 7 files changed, 43 insertions(+), 30 deletions(-) create mode 100644 docs/mindstudio/docs/source_zh_cn/images/MindStudio8.2.RC1.png diff --git a/docs/mindstudio/docs/source_zh_cn/feature/performance.md b/docs/mindstudio/docs/source_zh_cn/feature/performance.md index 2512031dca..c8f0da1690 100644 --- a/docs/mindstudio/docs/source_zh_cn/feature/performance.md +++ b/docs/mindstudio/docs/source_zh_cn/feature/performance.md @@ -62,17 +62,17 @@ MindStudio Training Tools工具链中的MindStudio Insight工具、msprof-analyz msprof-anaylze - 集群分析工具 + 集群分析工具 训练场景的集群性能数据分析工具,主要对基于通信域的迭代内耗时、通信时间、通信矩阵进行分析。 适用于定位集群内慢卡、慢节点、慢链路等问题。 - 性能比对工具 + 性能比对工具 对采集的性能数据进行比对分析。 比较不同硬件/框架下的性能数据,快速识别性能差异点。 - 专家建议工具 + 专家建议工具 分析训练场景的性能数据并给出专家建议。 将采集的性能数据进行分析,并输出性能调优建议。支持对计算、通信、空闲等维度对性能数据进行拆解,分析出计算瓶颈、调度瓶颈。 diff --git a/docs/mindstudio/docs/source_zh_cn/feature/precision.md b/docs/mindstudio/docs/source_zh_cn/feature/precision.md index dc5e315ac3..fd3dd4b249 100644 --- a/docs/mindstudio/docs/source_zh_cn/feature/precision.md +++ b/docs/mindstudio/docs/source_zh_cn/feature/precision.md @@ -13,46 +13,58 @@ msprobe 是 MindStudio Training Tools 工具链下精度调试部分的工具包 当前版本限制 - msprobe - 离线精度预检 + msprobe + 离线精度预检 为网络中每个API创建用例,检验其精度,并根据不同比对算法综合判定API在NPU上的精度是否达标,快速找出精度差异的API。 1. 对模型中所有的API做精度初步排查
2. 精度排查不受模型累计误差影响 仅支持mindspore.mint API - 数据采集 - 采集模型训练过程中API或Cell层级的前反向输入输出数据,包括层次关系、统计值信息、真实数据和调用栈等。 + 训前配置检查 + 用于对比两个环境下可能影响训练精度的配置差异,支持MindSpore和PyTorch两个框架,包括:环境变量、三方库版本、训练超参、权重、数据集、随机操作。 + 通过比对两个训练环境下的配置差异,提前识别可能会影响精度差异的配置项。 + 在使用 MindSpeed-LLM 进行数据采集时,需要注意动态数据采集中的 apply_patches 函数需要在 MindSpeed-LLM 框架 pretrain_gpt.py 的 megatron_adaptor 函数导入之后执行。 + + + 数据采集 + 采集模型训练过程中的API或Cell层级的前反向输入输出数据,包括层次关系、统计值信息、真实数据和调用栈等。 1. 将模型中训练的API或Cell的前反向输入输出数据保存下来分析
2. 模型出现溢出时,可用于查看哪些API或Cell出现了溢出 - 1. API级数据采集仅对支持列表中的API进行采集
2. 暂不支持采集inplace类API及其上一节点的反向数据
3. 暂不支持参数及参数梯度的采集 + 1. API级数据采集仅对支持列表中的API进行采集
2. 暂不支持采集inplace类API及其上一节点的反向数据
3. 暂不支持参数及参数梯度的采集 - 溢出检查 + 溢出检查 检测模型计算过程中的输入输出,并在溢出时落盘数据,助力用户快速定位溢出位置。 1. 当模型出现溢出时,可用于定位最先溢出的API或Cell或kernel
2. 相比数据采集,性能更优,磁盘压力更小 1. 除具有与数据采集功能相同的约束外,动态图场景下,不支持 Primitive 和 Jit 类 API 的检测
2. 动态图场景下,仅支持检测API或Cell级别溢出
3. 静态图场景下,仅支持检测kernel级别溢出 - 训练状态监控 + 训练状态监控 收集模型训练过程中的激活值、梯度和优化器状态,助力分析计算、通信、优化器各部分的异常情况。 通过监控模块级统计量指标,快速定位异常模块位置,如loss出现Nan 1. 仅支持模块级别统计量指标分析
2. 仅支持Megatron、DeepSeed框架
3. 会产生少量耗时和显存膨胀 - 可视化比对 + 可视化比对 解析Dump的精度数据,还原模型图结构,比对各层级精度数据,助力理解模型结构、分析精度问题。 1. 整网精度比对定位可疑算子,通过浏览器展示比对结果,支持快速搜索到可疑算子
2. 支持查看模型层级结果,比对模型层级结构差异 1. 由于使用整网Dump数据,定位的可疑算子受累计误差影响
2. 当模型规模较大时,比对所需时间较长 - compare精度比对 + compare精度比对 NPU精度数据与标杆数据的比对,支持MindSpore框架内和与PyTorch跨框架的比对,助力快速定位精度异常的API或Cell。 1. MindSpore同框架静态图比对
2. MindSpore同框架动态图比对
3. MindSpore vs PyTorch跨框架动态图比对 部分PyTorch的API关联不到MindSpore,需要手动配置映射关系 - 无标杆比对 + Checkpoint比对 + 训练过程中或结束后,比较两个不同的Checkpoint,评估模型相似度。 + 在模型训练过程中或结束后,可能保存一些检查点文件 (Checkpoint,简称ckpt) 记录当前模型、优化器等训练状态, 工具支持比较两个不同的ckpt,评估模型相似度。 + 当前支持Megatron-LM、MindSpeed (PyTorch/MindTorch) 的ckpt比较。支持TP、PP、EP、VPP模型并行;支持megatron.core、megatron.legacy、TransformerEngine的模型实现。 + + + 无标杆比对 不依赖标杆数据,通过对算子输入增加微小扰动,计算扰动后输出与原始输出的相对误差,识别有精度风险的算子。 1. 无标杆数据场景下的算子精度排查
2. 对个别算子进行升精度修复,验证其对模型loss的影响 - 1. 仅支持动态图场景
2. 由于需要拷贝输入进行二次执行,所以在遇到大张量输入时容易发生显存OOM问题,特别是反向比对过程。建议配置该功能下list参数,减少需比对的API数量
3. 比对会延长训练时间,整网比对可能会造成严重的耗时膨胀,建议配置该功能下list参数,减少需比对的API数量
4. 不支持“to cpu”操作,不支持预热功能 + 1. 仅支持动态图场景
2. 由于需要拷贝输入进行二次执行,所以在遇到大张量输入时容易发生显存OOM问题, 特别是反向比对过程。建议配置该功能下list参数,减少需比对的API数量
3. 比对会延长训练时间,整网比对可能会造成严重的耗时膨胀,建议配置该功能下list参数,减少需比对的API数量
4. 不支持“to cpu”操作,不支持预热功能 diff --git a/docs/mindstudio/docs/source_zh_cn/guide/large_model.md b/docs/mindstudio/docs/source_zh_cn/guide/large_model.md index 95b29aa4c6..68639bee4f 100644 --- a/docs/mindstudio/docs/source_zh_cn/guide/large_model.md +++ b/docs/mindstudio/docs/source_zh_cn/guide/large_model.md @@ -15,9 +15,9 @@ ## 基于MindSpeed加速库的调试调优指南 -[MindSpeed](https://gitee.com/ascend/MindSpeed-Core-MS/blob/r0.3.0/README.md)是MindSpore支持的昇腾训练加速库,提供了丰富的加速算法和模型。 +[MindSpeed](https://gitcode.com/Ascend/MindSpeed-Core-MS/blob/r0.3.0/README.md)是MindSpore支持的昇腾训练加速库,提供了丰富的加速算法和模型。 -针对MindSpeed加速库,以及[MindSpeed-LLM大模型套件](https://gitee.com/ascend/MindSpeed-LLM/blob/2.1.0/README.md),我们也提供了调试调优指南。 +针对MindSpeed加速库,以及[MindSpeed-LLM大模型套件](https://gitcode.com/Ascend/MindSpeed-LLM/blob/2.1.0/README.md),我们也提供了调试调优指南。 -- [MindSpeed精度调试指南](https://gitee.com/ascend/MindSpeed-Core-MS/blob/r0.3.0/docs/precision_opt.md) -- [MindSpeed性能调优指南](https://gitee.com/ascend/MindSpeed-Core-MS/blob/r0.3.0/docs/performance_opt.md) +- [MindSpeed精度调试指南](https://gitcode.com/Ascend/MindSpeed-Core-MS/blob/r0.3.0/docs/precision_opt.md) +- [MindSpeed性能调优指南](https://gitcode.com/Ascend/MindSpeed-Core-MS/blob/r0.3.0/docs/performance_opt.md) diff --git a/docs/mindstudio/docs/source_zh_cn/images/MindStudio8.2.RC1.png b/docs/mindstudio/docs/source_zh_cn/images/MindStudio8.2.RC1.png new file mode 100644 index 0000000000000000000000000000000000000000..0d602567a4d3cfe17310feabccfa5e558265850c GIT binary patch literal 64873 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 Fmh8J&30#B9(an(ZtFm8sV9xe6V!Je}N(0Zc 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/mindstudio/docs/source_zh_cn/index.rst b/docs/mindstudio/docs/source_zh_cn/index.rst index d6bb6eee52..da8712a407 100644 --- a/docs/mindstudio/docs/source_zh_cn/index.rst +++ b/docs/mindstudio/docs/source_zh_cn/index.rst @@ -7,9 +7,9 @@ MindStudio是面向AI开发者提供的全流程工具链,提供了精度、 本文档汇总了MindStudio和MindSpore框架等提供的系列调试工具,并简要介绍这些工具的安装方式、主要功能、入门指导,以及在大模型场景的使用方式。 -代码仓地址: +代码仓地址: -.. image:: ./images/MindStudio.png +.. image:: ./images/MindStudio8.2.RC1.png :alt: Architecture .. toctree:: diff --git a/docs/mindstudio/docs/source_zh_cn/overview.md b/docs/mindstudio/docs/source_zh_cn/overview.md index 096a8fe9a8..f2b0c6c013 100644 --- a/docs/mindstudio/docs/source_zh_cn/overview.md +++ b/docs/mindstudio/docs/source_zh_cn/overview.md @@ -11,25 +11,25 @@ 精度调试 - msprobe - 提供精度数据采集、精度预检、精度比对和溢出检测等精度调试功能。推荐优先选择msprobe 8.1.1版本 - 安装msprobe + msprobe + 提供精度数据采集、精度预检、精度比对和溢出检测等精度调试功能。推荐优先选择msprobe 8.2.0版本 + 安装msprobe - Tensorboard + Tensorboard 可视化比对工具:为msprobe采集的模型结构和精度数据提供可视化比对功能。仅支持MindSpore>=2.4.0版本。 - 安装tb_graph_ascend + 安装tb_graph_ascend 性能调优 Profiler - MindSpore框架内置的性能数据采集、分析工具。推荐优先选择MindSpore 2.7.0版本。 + MindSpore框架内置的性能数据采集、分析工具。推荐优先选择MindSpore 2.7.1版本。 安装MindSpore - msprof-anaylze - 为采集的性能数据提供统计、分析、专家建议等功能。推荐优先选择msprof-anaylze 2.0.2版本 - 安装msprof-anaylze + msprof-anaylze + 为采集的性能数据提供统计、分析、专家建议等功能。推荐优先选择msprof-anaylze 8.2.0版本 + 安装msprof-anaylze msleaks diff --git a/docs/mindstudio/docs/source_zh_cn/version/mindstudio_insight.md b/docs/mindstudio/docs/source_zh_cn/version/mindstudio_insight.md index ddcac3922a..4a19299fc1 100644 --- a/docs/mindstudio/docs/source_zh_cn/version/mindstudio_insight.md +++ b/docs/mindstudio/docs/source_zh_cn/version/mindstudio_insight.md @@ -7,12 +7,13 @@ MindStudio Insight可视化工具,需要与采集性能数据时使用的MindS | MindStudio Insight | MindSpore | |:----------------------------------------------------:|:-------------------------------------------:| -| [8.1.RC1](https://www.hiascend.com/developer/download/community/result?module=sto+cann&sto=8.1.RC1&cann=8.2.RC1) | [2.7.0-rc1](https://www.mindspore.cn/versions#2.7.0-rc1) | +| [8.1.RC1](https://www.hiascend.com/developer/download/community/result?module=sto+cann&sto=8.1.RC1&cann=8.2.RC1) | [2.7.0](https://www.mindspore.cn/versions#2.7.0) | 历史版本配套关系: | MindStudio Insight | MindSpore | |:----------------------------------------------------:|:-------------------------------------------:| +| [8.1.RC1](https://www.hiascend.com/developer/download/community/result?module=sto+cann&sto=8.1.RC1&cann=8.2.RC1) | [2.7.0](https://www.mindspore.cn/versions#2.7.0) | | [8.0.RC1](https://www.hiascend.com/developer/download/community/result?module=sto+cann&sto=8.0.RC1&cann=8.1.RC1) | [2.6.0](https://www.mindspore.cn/versions#2.6.0) | | [7.0.RC3](https://www.hiascend.com/developer/download/community/result?module=sto+cann&sto=7.0.RC3&cann=8.0.RC3.beta1) | [2.5.0](https://www.mindspore.cn/versions#2.5.0) | | [7.0.RC3](https://www.hiascend.com/developer/download/community/result?module=sto+cann&sto=7.0.RC3&cann=8.0.RC3.beta1) | [2.4.10](https://www.mindspore.cn/versions#2.4.10) | -- Gitee