精度问题分场景定位
- 首step loss差异
按照如下步骤进行定位:
- 使用精度预检工具进行可疑算子排查。
- 使用精度采集dump工具,采集最先出现差异的步数所对应的NPU与标杆的mix级别数据。
- 使用分级可视化工具或精度比对工具,做画图比对或表格比对,根据工具提示的颜色从深到浅或首个输入一致输出不一致的节点来定界可疑算子。
- 对该算子在NPU和标杆上进行单算子验证,分别计算和CPU绝对标杆的欧式距离进行比较。
- 长稳训练loss差异
选择以下一种或多种方式结合分析:
- 使用训练状态监控工具(适用于规模大、问题步数不明确的场景),在配置选择上根据loss和Grad表现来进行相对应数据的采集:
- 使用dump采集比对工具(适用于规模较小、问题步数明确的场景),采集最先出现差距的那一步的mix级别数据,使用分级可视化做画图比对或精度比对工具做表格比对,通过工具标注的颜色从深到浅或首个出现输入精度正常输出精度异常的节点来定界到可疑算子。
- 使用精度预检工具查看可疑算子进行排除。
- 溢出或NaN
一般来说溢出表现相较于标杆出现了更频繁的loss NaN或梯度溢出,一般还伴随着loss scale的持续降低。
进一步可分为如下两类:
- NPU上出现NaN但GPU上没有,把第一个出现NaN的step认为是问题step做定位。
- NPU和GPU都出现了NaN,但在50个step内NPU出现NaN的次数明显多于GPU,把第一个NPU有NaN而GPU无NaN的step认为是问题发生的step做定位。
确定需要分析的step后,按如下步骤进行排查:
- 首先确保打开了Inf/NaN模式或者非饱和模式,查看环境变量INF_NAN_MODE_ENABLE是否为1,若为1则已开启。
- 采集该step的数据做分析和比对:
- 使用精度采集工具dump采集溢出步的前反向输入输出,若加入工具后溢出消失,怀疑为内存踩踏,可以改异步dump采集(具体操作为在config.json文件中加入async_dump: True的配置项)并用profiling工具查看并行计算关系。
- 使用训练状态监控工具采集各层梯度。
- 使用精度比对工具做表格比对或分级可视化工具做画图比对,定界到可疑算子。
父主题: 问题定位方法