2023年11月26日发(作者:)

基于pytorch的⾃动混合精度(AMP)

AMP:Automatic mixed precision,⾃动混合精度,可以在神经⽹络推理过程中,针对不同的层,采⽤不同的数据精度进⾏计算,从⽽实现节

省显存和加快速度的⽬的。

1、什么是⾃动混合精度训练?

2、为什么需要⾃动混合精度?

3、如何在PyTorch中使⽤⾃动混合精度?

Pytorch 1.6版本以后,Pytorch将amp的功能吸收⼊官⽅库,位于模块下。

【介绍】

提供了对混合精度的⽀持。为实现⾃动混合精度训练,需要结合使⽤如下两个模块:

但是需要FP32吗?

FP16实际上可以很好地表⽰⼤多数权重和渐变。因此,拥有存储和使⽤FP32所需的所有这些额外位只是浪费。

【如何使⽤Tensor Core】如何使⽤Tensor Core】

2.加快训练和推断的计算,能带来多⼀倍速的体验;

3.张量核⼼的普及(NVIDIA Tensor Core),低精度计算是未来深度学习的⼀个重要趋势。

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

__matmul__

model=Net().cuda()

NaN).所以,动态估计原理就是在不出现if或NaN梯度的情况下,尽可能的增⼤scaler值。在每次(optimizer)中,都会检查是否有inf

1.判断GPU是否⽀持FP16,⽀持Tensor core的GPU(2080Ti,Titan,Tesla等),不⽀持的(Pascal系列)不建议;

2.常数范围:为了保证计算不溢出,⾸先保证⼈⼯设定的常数不溢出。如epsilon,INF等;

3.Dimension最好是8的倍数:维度是8的倍数,性能最好;

4.涉及sum的操作要⼩⼼,容易溢出,softmax操作,建议⽤官⽅API,并定义成layer写在模型初始化⾥;

【 DistributedDataParallel, multiple GPUs per process】

与DataParallel的使⽤相同,在模型构建时,对forward函数的定义⽅式进⾏修改,保证autocast在进程内部⽣效。