---
title: 参考基准：正确使能混合精度训练
description: "基准模型为GPU-fp32/CPU-fp32训练时，需要调整为混合精度（GPU-fp16）训练并且能够得到相同的准确度结果。"
url: https://www.hiascend.com/document/detail/zh/TensorFlowCommercial/latest/migration/tfmigr1/tfmigr1_tfprecision_0007.html
sourcePath: /source/zh/TensorFlowCommercial/900/migration/tfmigr1/tfmigr1_tfprecision_0007.html
indexId: 2a720193b8ce0a857766f06f26f9f61246debae7a448ab916bf9a194489fc48683
---
# 参考基准：正确使能混合精度训练

#### 目标

基准模型为GPU-fp32/CPU-fp32训练时，需要调整为混合精度（GPU-fp16）训练并且能够得到相同的准确度结果。

基准模型为混合精度（GPU-fp16）训练时，建议使用高精度（GPU-fp32/CPU-fp32）模式训练并能够得到相同的准确度结果。

如果由于内存、硬件等限制无法获得高精度模式训练的结果，那么至少需要确保多次重复训练能够得到相同的准确度结果。


#### 思路

AI处理器（简称NPU）硬件架构仅支持用户模型执行在混合精度训练模式下，故用户模型也需要在GPU上以混合精度训练确保模型收敛后作为参考基准。如果用户模型未在GPU的混合精度模式下验证收敛，使用该参考基准迁移到NPU后可能会导致NPU训练不收敛。

如果混合精度训练和高精度训练相互对比不满足精度对比要求，那么该参考基准不适合用于精度对比，原因为：混合精度的fp16数据类型在该训练的场景下对精度引起了明显的差异，导致GPU混合精度以及NPU混合精度训练均存在精度风险，此时需要调整模型结构以确保混合精度训练能够收敛。


#### 参考步骤

1. 确保基准模型使能混合精度训练模式。
2. 确保使能动态loss_scale。
  也可使能静态loss_scale，该方法相对复杂，不建议使用。原因是：静态loss_scale场景下，使用GPU的loss_scale值在NPU上训练时，可能会导致不期望的频繁溢出，影响收敛，此种场景下需要调整NPU的loss_scale值。

3. 修改用户模型、框架，增加浮点异常发生时的信息打印，可参考模型迁移：在NPU上正确使能Loss Scale。
4. 观察混合精度训练过程中的浮点异常发生次数，确保发生次数较少（异常次数建议在0.5%以下，global batch size较大时建议在0.1%以下）。
5. 如果发生次数较多，修改loss_scale的初始值以及放大、缩小的步进阈值，直到训练发生的浮点异常次数非常少。
6. 重复三次以上的训练，确保每次训练的验证准确度均一致。如果有不一致的现象，调整超参、模型结构并重复以上检查，直到满足各步骤需求。
