首step loss不一致(或同权重推理不一致)
案例:某语音模型首step就loss对不齐。
图1 loss对不齐


定位方法:使用msprobe的精度采集dump工具采集第0步mix级别数据,config.json配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | { "task": "statistics", "dump_path": "/home/data_dump", "rank": [], "step": [0], "level": "mix", "enable_dataloader": false, "statistics": { "scope": [], "list": [], "data_mode": ["all"], "summary_mode": "statistics" } } |
- dump工具在代码中插入方法可参考如下方式:图2 dump工具插入代码的方式
- 通过分级可视化工具分析差异。可视化的compare.json文件内容为:
1 2 3 4 5
{ "npu_path": "./npu_dump", "bench_path": "./bench_dump", "is_print_compare_log": true }
可视化命令为:msprobe -f pytorch graph -i ./compare.json -o ./output
在输出目录中可以看到生成的vis后缀文件,用tensorboard打开可视化界面:
图3 可视化比对结果可以看到gelu算子标红,算子精度可疑。
- 也可通过精度比对工具进行比对,精度比对compare.json配置如下:
1 2 3 4 5 6
{ "npu_path": "./npu_dump/dump.json", "bench_path": "./bench_dump/dump.json", "stack_path": "./npu_dump/stack.json", "is_print_compare_log": true }
此处可直接比对单卡结果,精确到dump.json文件,若多卡则精确到步数。
运行如下比对命令得到比对的csv表格:msprobe -f pytorch compare -i ./compare.json -o ./output -s
分析表格发现gelu算子输入差异较小,输出差异较大。
图4 精度比对结果
解决方案:
将gelu算子计算转CPU,精度问题解决,明确该问题为gelu算子导致,但转CPU会影响性能。
后续联系算子支撑人员提供了PTA的gelu修复包。
结果:用修复包后不转CPU也精度达标。
父主题: msprobe工具定位案例