参考基准:正确使能混合精度训练
目标
基准模型为gpu-fp32/cpu-fp32训练时,需要调整为混合精度(gpu-fp16)训练并且能够得到相同的准确度结果。
基准模型为混合精度(gpu-fp16)训练时,建议使用高精度(gpu-fp32/cpu-fp32)模式训练并能够得到相同的准确度结果。
如果由于内存、硬件等限制无法获得高精度模式训练的结果,那么至少需要确保多次重复训练能够得到相同的准确度结果。
思路
昇腾AI处理器(简称NPU)硬件架构仅支持用户模型执行在混合精度训练模式下,故用户模型也需要在GPU上以混合精度训练确保模型收敛后作为参考基准。如果用户模型未在GPU的混合精度模式下验证收敛,使用该参考基准迁移到NPU后可能会导致NPU训练不收敛。
如果混合精度训练和高精度训练相互对比不满足精度对比要求,那么该参考基准不适合用于精度对比,原因为:混合精度的fp16数据类型在该训练的场景下对精度引起了明显的差异,导致gpu混合精度以及npu混合精度训练均存在精度风险,此时需要调整模型结构以确保混合精度训练能够收敛。
参考步骤
- 确保基准模型使能混合精度训练模式。
- 确保使能动态loss_scale。
也可使能静态loss_scale,该方法较为复杂,不建议使用。原因是:静态loss_scale场景下,使用GPU的loss_scale值在NPU上训练时,可能会导致不期望的频繁溢出,影响收敛,此种场景下需要调整NPU的loss_scale值。
- 观察混合精度训练过程中的浮点异常发生次数,确保发生次数较少(异常次数建议在0.5%以下,global batch size较大时建议在0.1%以下)。
- 如果发生次数较多,修改loss_scale的初始值以及放大、缩小的步进阈值,直到训练发生的浮点异常次数非常少。
- 重复三次以上的训练,确保每次训练的验证准确度均一致。如果有不一致的现象,调整超参、模型结构并重复以上检查,直到满足各步骤需求。
父主题: 检查参考基准脚本