昇腾社区首页
中文
注册

后期Loss异常场景

后期Loss异常是指训练前期loss收敛与GPU一致,但进行长稳训练时发生精度溢出或收敛趋势出现偏差。该场景可进一步细分为溢出场景和非溢出场景。

溢出场景

可以通过loss或loss scale异常来识别溢出,若有明确的loss scale连续下降到小于1或loss变成Inf或NaN的,则这个迭代肯定发生了精度问题,可以在该迭代上使用溢出检测工具。如图1所示。

图1 溢出示例

非溢出场景

即loss收敛但收敛趋势或loss值存在偏差。

  • 示例一:

    建议用户绘制loss曲线图,计算相对误差和绝对误差。比如下图中可以看到前3个step两条曲线完全重合,第四个step产生了误差,且误差很大。那就说明这个迭代的前向或上一个迭代的反向发生了精度问题。

    图2 前若干step存在明显异常
  • 示例二:

    图3看起来指向训练后期产生精度问题,前期曲线贴合的很好。实际上,放大训练前期的相对误差,如图4,在训练到第15到20step明显增大,超过了千分之一。说明这段迭代存在精度问题,进一步通过预检工具确认embedding反向的精度问题。因此要关注细节,不要因为整体趋势贴合就忽略误差,训练前期的小误差也是不可接受的。

    图3 Loss收敛趋势图
    图4 Loss绝对误差趋势图

    如果确实训练前期没有找到精度问题,是训练后期产生的精度问题,为了控制变量,建议先在距离精度问题发生相近的一个迭代存checkpoint,并在NPU和GPU分别load一份权重,方便复现问题从而定位迭代。