Pytorch自动混合精度(AMP)介绍

背景:

 pytorch从1.6版本开始,已经内置了torch.cuda.apex,采用自动混合精度训练就不需要加载第三方NVIDIA的apex库了。本文主要从三个方面来介绍AMP:

 1.什么是AMP?

    2.为什么要使用AMP?

 3.如何使用AMP?

 

正文:

 1.什么是AMP?

     默认情况下,大多数深度学习框架都采用32位浮点算法进行训练。2017年,NVIDIA研究了一种用于混合精度训练的方法,该方法在训练网络时将单精度(FP32)与半精度(FP16)结合在一起,并使用相同的超参数实现了与FP32相同的精度。在介绍AMP之前,先来理解下FP16与FP32,半精度是一种计算机使用的二进制浮点数据类型,使用2字节存储。

Pytorch自动混合精度(AMP)介绍

其中,sign位表示正负,exponent位表示指数2^(n-15+1(n=0)),fraction位表示分数(m/1024)。

Pytorch自动混合精度(AMP)介绍

为什么要使用FP16,理由有三个:1.减少显存占用;2.加快训练和推断的计算,能带来多一倍速的体验;3.张量核心的普及(NVIDIA Tensor Core),低精度计算是未来深度学习的一个重要趋势。

但凡事都有两面性,FP16也带来了些问题:1.溢出错误;2.舍入误差;

1.溢出错误:由于FP16的动态范围比FP32位的狭窄很多,因此,在计算过程中很容易出现上溢出和下溢出,溢出之后就会出现"NaN"的问题。在深度学习中,由于激活函数的梯度往往要比权重梯度小,更易出现下溢出的情况

Pytorch自动混合精度(AMP)介绍

2.舍入误差

 舍入误差指的是当梯度过小时,小于当前区间内的最小间隔时,该次梯度更新可能会失败:

Pytorch自动混合精度(AMP)介绍

上一篇:【转载】挂载文件系统SD卡读写


下一篇:阿里云HaaS100物联网开发板学习笔记(五)推送js代码的步骤--基于更新过的固件