背景:
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 字节存储.
其中, sign 位表示正负, exponent 位表示指数 2^(n-15+1(n=0)),fraction 位表示分数(m/1024).
为什么要使用 FP16, 理由有三个:1.减少显存占用;2.加快训练和推断的计算, 能带来多一倍速的体验;3.张量核心的普及(NVIDIA Tensor Core), 低精度计算是未来深度学习的一个重要趋势.
但凡事都有两面性, FP16 也带来了些问题
来源: http://www.bubuko.com/infodetail-3719227.html