混合精度训练(FP16 & FP32)

混合精度是指训练时在模型中同时使用单精度 float32和半精度 float16 浮点类型,从而加快运行速度,减少内存使用的一种训练方法

通过让模型的某些部分保持使用 32 位类型以保持数值稳定性,可以缩短模型的单步用时,而在评估指标(如准确率)方面仍可以获得同等的训练效果。

 

作为一名算法工程师,我们经常会遇到训练网络的事情,当前训练网络的整个过程基本上都是在N卡上面执行的,当我们的数据集比较大时,训练网络会耗费大量的时间。由于我们需要使用反向传播来更新具有细微变化的权重,因而我们在训练网络的过程中通常会选用FP32类型的数据和权重。说了这么多,那么混合精度到底是什么呢,有什么用呢?
  简而言之,所谓的混合精度训练,即当你使用N卡训练你的网络时,混合精度会在内存中用FP16做储存和乘法从而加速计算,用FP32做累加避免舍入误差。它的优势就是可以使你的训练时间减少一半左右。它的缺陷是只能在支持FP16操作的一些特定类型的显卡上面使用,而且会存在溢出误差和舍入误差。

 

NVIDIA GPU 使用 float16 执行运算的速度比使用 float32 快

 

混合精度训练(FP16 & FP32)

 

 

上一篇:AI中各种浮点精度概念集合:fp16,fp32,bf16,tf32,fp24,pxr24,ef32


下一篇:BF16是为深度学习而优化的新数字格式 预测精度的降低幅度最小