---
title: 模型迁移：在NPU上正确使能Loss Scale
description: "在混合精度计算中使用float16数据格式数据动态范围降低，造成梯度计算出现浮点溢出，会导致部分参数更新失败。为了保证部分模型训练在混合精度训练过程中收敛，需要配置Loss Scale的方法。"
url: https://www.hiascend.com/document/detail/zh/TensorFlowCommercial/latest/migration/tfmigr1/tfmigr1_tfprecision_0010.html
sourcePath: /source/zh/TensorFlowCommercial/900/migration/tfmigr1/tfmigr1_tfprecision_0010.html
indexId: eecbf1df20058da4680d8f6966d81ce33a05865166e5928e60ce3dd328995fe983
---
# 模型迁移：在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值观察溢出次数，调整LossScaleManager参数。
- 在开启Loss Scale后，若需要丢弃Loss Scale溢出的step，请参考  更新global step
。
