文档
注册

模型迁移:在NPU上正确使能Loss Scale

目标

在混合精度计算中使用float16数据格式数据动态范围降低,造成梯度计算出现浮点溢出,会导致部分参数更新失败。为了保证部分模型训练在混合精度训练过程中收敛,需要配置Loss Scale的方法。

Loss Scale方法通过在前向计算所得的loss乘以loss scale系数S,起到在反向梯度计算过程中达到放大梯度的作用,从而最大程度规避浮点计算中较小梯度值无法用FP16表达而出现的溢出问题。在参数梯度聚合之后以及优化器更新参数之前,将聚合后的参数梯度值除以loss scale系数S还原。

动态Loss Scale通过在训练过程中检查梯度中浮点计算异常状态,自动动态选取loss scale系数S以适应训练过程中梯度变化,从而解决人工选取loss scale系数S和训练过程中自适应调整的问题。

在具体实现中,昇腾AI处理器由于浮点计算特性不同,在计算过程中的浮点异常检查等部分与GPU/CPU存在差异,因此需要注意在NPU上正确使能Loss Scale。

参考步骤

  • 如果是手工迁移的脚本,请参考使用Loss Scale修改训练脚本。
  • 如果是工具迁移的脚本,工具已默认进行了相关接口迁移。
  • 由于NPU计算特性与GPU混合精度计算特性存在差异,LossScaleManager超参也往往需要进行适当的调整以保证精度。当用户模型基于默认Loss Scale参数训练产生溢出的迭代过多,影响最终精度时,需要对Loss Scale参数进行适当调整,减少发生浮点异常的次数。具体方法为:参考打印loss scale值打印loss scale值,根据loss scale值观察溢出次数,调整LossScaleManager参数。
  • 在开启Loss Scale后,若需要丢弃Loss Scale溢出的step,请参考更新global step
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词