Msprobe API预检
Msprobe是MindStudio Training Tools工具链下精度调试部分的工具包,主要包括精度预检、溢出检测和精度比对等功能,目前适配PyTorch和MindSpore框架。这些子工具侧重不同的训练场景,可以定位模型训练中的精度问题。
精度预检工具旨在计算单个API在整网计算中和标杆场景下的差异,对于无明确精度差异来源情况或者对模型了解不多的情形下都推荐使用预检工具,检查第一个步骤或Loss明显出现问题的步骤。它可以抓取模型中API输入的数值范围,根据范围随机生成输入,用相同的输入分别在NPU(GPU)和CPU上执行算子,比较输出差异。预检最大的好处是,它能根据算子(API)的精度标准来比较输出结果并判定其是否有精度问题。预检工具使用包含以下三步:dump、run_ut以及api_precision_compare。基本步骤如下:
- 通过pip安装Msprobe工具。
# shell pip install mindstudio-probe
- 获取NPU和GPU的dump数据。
PyTorch训练脚本插入dump接口方式如下:
from msprobe.pytorch import PrecisionDebugger debugger = PrecisionDebugger(config_path='./config.json') ... debugger.start() # 一般在训练循环开头启动工具。 ... # 循环体 debugger.stop() # 一般在训练循环末尾结束工具。 debugger.step() # 在训练循环的最后需要重置工具,非循环场景不需要。
具体的config.json的配置要求请参见介绍。
- 使用run_ut.py执行预检。
msprobe -f pytorch run_ut -api_info ./dump.json
这里-api_info指定的是步骤2导出的dump.json文件,表示整网计算过程中API的输入输出情况。执行完成run_ut命令之后将输出api_precision_compare_result_{timestamp}.csv和 api_precision_compare_details_{timestamp}.csv文。accuracy_checking_result_{timestamp}.csv属于API级,标明每个API是否通过测试。建议用户先查看accuracy_checking_result_{timestamp}.csv文件,对于其中没有通过测试的或者特定感兴趣的API,根据其API name字段在 accuracy_checking_details_{timestamp}.csv中查询其各个输出的达标情况以及比较指标。
- 比对NPU和GPU预检结果。
msprobe -f pytorch api_precision_compare -npu /home/xxx/npu/accuracy_checking_details_{timestamp}.csv -gpu /home/xxx/gpu/accuracy_checking_details_{timestamp}.csv -o /home/xxx
这里-npu指定步骤3NPU预检结果中accuracy_checking_details_{timestamp}.csv文件路径,-gpu指定GPU预检结果accuracy_checking_details_{timestamp}.csv文件路径, -o需指定执行比对结果的存盘路径。执行完成后输出api_precision_compare_result_{timestamp}.csv和 api_precision_compare_details_{timestamp}.csv文件。用户可以通过先查看api_precision_compare_result_{timestamp}.csv文件的Forward Test Success和Backward Test Success,判断是否存在未通过测试的API,再查看api_precision_compare_details_{timestamp}.csv文件的API详细达标情况。