昇腾社区首页
中文
注册

精度问题分场景定位

  • 首step loss差异

    按照如下步骤进行定位:

    1. 使用精度预检工具进行可疑算子排查。
    2. 使用精度采集dump工具,采集最先出现差异的步数所对应的NPU与标杆的mix级别数据。
    3. 使用分级可视化工具或精度比对工具,做画图比对或表格比对,定界到可疑算子。
    4. 对该算子在NPU和标杆上进行单算子验证,分别计算和CPU绝对标杆的欧式距离进行比较。
  • 长稳训练loss差异

    选择以下一种或多种方式结合分析:

    • 使用训练状态监控工具(适用于规模大、问题步数不明确的场景),在配置选择上根据Loss和Grad表现来进行相对应数据的采集:
      • 若该问题同时表现在Loss和Grad上,则优先采集训练过程中梯度、通信的数据。

        梯度采集后重点关注梯度reduce前后差异中的异常卡/计算、梯度与标杆出现差异的步数/层、随步数变化趋势与整体梯度趋势一致的层。

      • 若该问题同时主要表现在Loss上,则优先采集训练过程中激活值、权重的数据。
    • 使用dump采集比对工具(适用于规模较小、问题步数明确的场景),采集最先出现差距的那一步的mix级别数据,使用分级可视化做画图比对或精度比对工具做表格比对,通过工具标注的颜色从深到浅或首个出现输入精度正常输出精度异常的节点来定界到可疑算子。
    • 使用精度预检工具查看可疑算子进行排除。
  • 溢出或NaN

    一般来说溢出表现为Loss scale的持续降低,进一步可分为如下两类:

    • NPU上出现连续的step持续降低但GPU上没有,把第一个出现溢出的step认为是问题step做定位。
    • NPU和GPU都出现了溢出,但在50个step内NPU溢出次数明显比GPU多,把第一个NPU有溢出而GPU无溢出的step认为是问题发生的step做定位。

    确定需要分析的step后,按如下步骤进行排查:

    • 首先确保打开了Inf/NaN模式或者非饱和模式。
    • 采集该step的数据做分析和比对:
      • 使用精度采集工具dump采集溢出步的前反向输入输出,若加入工具后溢出消失,怀疑为内存踩踏,可以改异步dump进行采集并用profiling工具查看并行计算关系。
      • 使用训练状态监控工具采集各层梯度。
      • 使用精度比对工具做画图比对或分级可视化工具做表格比对,定界到可疑算子。