后期Loss异常场景
后期Loss异常是指训练前期loss收敛与GPU一致,但进行长稳训练时发生精度溢出或收敛趋势出现偏差。该场景可进一步细分为溢出场景和非溢出场景。
溢出场景
可以通过loss或loss scale异常来识别溢出,若有明确的loss scale连续下降到小于1或loss变成Inf或NaN的,则这个迭代肯定发生了精度问题,可以在该迭代上使用溢出检测工具。如图1所示。
非溢出场景
即loss收敛但收敛趋势或loss值存在偏差。
- 示例一:
建议用户绘制loss曲线图,计算相对误差和绝对误差。比如下图中可以看到前3个step两条曲线完全重合,第四个step产生了误差,且误差很大。那就说明这个迭代的前向或上一个迭代的反向发生了精度问题。
图2 前若干step存在明显异常 - 示例二:
图3看起来指向训练后期产生精度问题,前期曲线贴合的很好。实际上,放大训练前期的相对误差,如图4,在训练到第15到20step明显增大,超过了千分之一。说明这段迭代存在精度问题,进一步通过预检工具确认embedding反向的精度问题。因此要关注细节,不要因为整体趋势贴合就忽略误差,训练前期的小误差也是不可接受的。
如果确实训练前期没有找到精度问题,是训练后期产生的精度问题,为了控制变量,建议先在距离精度问题发生相近的一个迭代存checkpoint,并在NPU和GPU分别load一份权重,方便复现问题从而定位迭代。
父主题: 明确精度异常场景