msprobe 是 MindStudio Training Tools 工具链下精度调试部分的工具包。主要包括精度预检、溢出检测和精度比对等功能,目前适配 PyTorch 和 MindSpore 框架。这些子工具侧重不同的训练场景,可以定位模型训练中的精度问题。
为方便使用,本工具提供了统一、简易的程序接口:PrecisionDebugger。以 PyTorch 框架为例,通过以下示例模板和 config.json 可以轻松使用各种功能。
from msprobe.pytorch import PrecisionDebugger
debugger = PrecisionDebugger(config_path='./config.json')
...
debugger.start() # 一般在训练循环开头启动工具
... # 循环体
debugger.stop() # 一般在训练循环末尾结束工具。必须调用,否则可能导致精度数据落盘不全
debugger.step() # 在训练循环的最后需要重置工具,非循环场景不需要
此外,根据以下规则,可以通过环境变量设置日志级别。
例如在 shell 脚本:
export MSPROBE_LOG_LEVEL={x}
config.json 的配置要求和各功能具体的使用指导详见后续章节。
以上环境依赖请根据实际环境选择适配的版本。
1. Pytorch 框架下,工具暂不支持 Fully Sharded Data Parallel(FSDP)。
2. 工具读写的所有路径,如config_path、dump_path等,只允许包含大小写字母、数字、下划线、斜杠、点和短横线。
请参见安装指导说明。
请参见特性变更说明。
使用工具前,建议先浏览工具功能模块简介、适用场景和当前版本局限性,了解功能特性。
msprobe 通过在训练脚本中添加 PrecisionDebugger 接口的方式对 API 执行精度数据 dump 操作。对应 config.json 中的 "statistics" 或 "tensor" task。
精度预检旨在昇腾 NPU 上扫描训练模型中的所有 API 进行 API 复现,给出精度情况的诊断和分析。对应 config.json 中的 "run_ut" task。
MindSpore 动态图场景的离线预检
该功能将msprobe工具dump的精度数据进行解析,还原模型图结构,实现模型各个层级的精度数据比对,方便用户理解模型结构、分析精度问题。
该功能进行 PyTorch 整网 API 粒度的数据 dump、精度比对,进而定位训练场景下的精度问题。
该功能用于比对前后两次 NPU ACL 层级 dump 数据的一致性。
本功能用于采集梯度数据并进行梯度相似度比对,可以精准定位出现问题的 step。
兼容 PyTorch 和 MindSpore 框架的梯度监测
在线精度比对是实现在PyTorch训练过程中直接完成精度比对并输出比对结果的功能,是NPU与CPU之间的精度比对。
该功能收集和聚合模型训练过程中的网络层,优化器, 通信算子的中间值,帮助诊断模型训练过程中计算, 通信,优化器各部分出现的异常情况。
兼容 PyTorch 和 MindSpore 框架的训练状态监控
该功能将msprobe工具dump的精度数据进行解析,自动生成单API脚本,用于复现整网中出现的算子问题,降低用户复现问题的成本,供开发分析算子问题。
该功能只支持 MindSpore 静态图场景,用于将IR图与dump数据进行关联,获取dump数据和代码调用栈的关联关系。
溢出检测用于采集溢出 API 或 模块的精度数据,而溢出解析则是通过对溢出数据的分析,进一步判断是否为正常溢出。对应 config.json 中的 "overflow_check" task。 推荐直接使用数据采集功能采集统计量信息,检测溢出问题。
该工具主要包括:
训练前或精度比对前,对比两个环境下可能影响训练精度的配置差异。
训练过程中或结束后,比较两个不同的checkpoint,评估模型相似度。
主要能力:
灵活采集强化学习中重要关键过程数据,并支持比对。
多rank场景下通过dump数据找到首个出现Nan或Inf的节点。
本工具建议执行用户与安装用户保持一致,如果您要使用 root 执行,请自行关注 root 高权限触及的安全风险。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。