nvidia深度学习加速库apex简单介绍

介绍地址:https://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/index.html

本人英文水平有限,有误请指正。

使用理由

使用精度低于32位浮点的数值格式有许多好处。首先,它们需要更少的内存,从而能够训练和部署更大的神经网络。其次,它们需要较少的内存带宽,从而加快数据传输操作。第三,数学运算在降低精度方面运行得更快,特别是在具有TensorCore支持的GPU上。混合精确训练(Mixed Precision Training)实现了所有这些好处,同时确保与完全精确训练相比,不会丢失特定任务的准确性。它这样做的方法是识别需要完全精确的步骤,只对这些步骤使用32位浮点,而在其他地方使用16位浮点。

Mixed Precision Training

使用Mixed Precision Training需要两个步骤:
1、在适当的情况下移植模型以使用FP16数据类型。
2、增加损失缩放以保持较小的梯度值。
以低精度(如FP16)训练深度神经网络的能力在Pascal结构中引入,CUDA 8及更高版本应该都是支持的。

优点 使用Mixed Precision Training能减少内存需求,加快训练/ inference的速度。

使用Mixed Precision Training需要以下三个步骤:
1、在可能的情况下将模型转换为使用float16数据类型。
2、保持float32主权重,以累积每次迭代的更新权重。
3、使用损失缩放来保持较小的梯度值。
各种深度学习框架中如何使用请看:https://developer.nvidia.com/automatic-mixed-precision

在PyTorch中的使用:
首先需要安装其apex库(我还没装过),其github地址:https://github.com/NVIDIA/apex。
然后在训练的脚本(代码)中简单添加几句就可以了

from apex as amp

amp.init()
amp.init_trainer(trainer)
with amp.scale_loss(loss, trainer) as scaled_loss:
   autograd.backward(scaled_loss) 

以上仅为学习(因为maskrcnn-benchmark框架更新后使用了APEX用以加速,所以去看了文档),后续实践之后可能会有更新。

你可能感兴趣的:(deep,learning)