『技术』一行代码让训练速度提升2倍,飞桨自动混合精度技术详解( 三 )


sgd = SGDOptimizer(learning_rate=1e-3)mp_sgd = fluid.contrib.mixed_precision.decorator.decorate(sgd,init_loss_scaling=2**15,incr_every_n_steps=2000,use_dynamic_loss_scaling=True)mp_sgd.minimize(avg_loss)多卡 GPU 训练的优化
在新发布的飞桨核心框架 1.7 版本上 , AMP 技术深度优化了多卡 GPU 训练 。 如图 2 所示 , 在优化之前的参数梯度更新过程中 , 梯度计算时虽然使用的是半精度数据类型 , 但是不同 GPU 卡之间的梯度传输数据类型仍为单精度 。
『技术』一行代码让训练速度提升2倍,飞桨自动混合精度技术详解
本文插图
图 2 1.7 版本之前的参数梯度更新过程示意图
为了降低 GPU 多卡之间的梯度传输带宽 , 我们将梯度传输这个过程提到 Cast 操作之前 , 而每个 GPU 卡在得到对应的半精度梯度后再执行 Cast 操作 , 将其转变为单精度类型 , 如图 3 所示 。 这一优化在训练网络复杂度较大的模型时 , 对减少带宽占用方面非常有效 , 如多卡训练 BERT-Large 模型 。
『技术』一行代码让训练速度提升2倍,飞桨自动混合精度技术详解
本文插图
图 3 1.7 版本的参数梯度更新过程示意图
训练性能对比(AMP VS FP32)
飞桨 AMP 技术在 ResNet50、Transformer 等模型上训练速度相对于 FP32 训练来说有非常大的优势 , 下面以 ResNet50 模型为例 , 从下图中可以看出 , ResNet50 的 AMP 训练相对与 FP32 训练 , 单卡加速比可达 2.9 倍 , 八卡加速比可达 2.8 倍 。
『技术』一行代码让训练速度提升2倍,飞桨自动混合精度技术详解
本文插图
相关资料

  • Mixed Precision Training:https://arxiv.org/abs/1710.03740
  • 使用自动混合精度加速 PaddlePaddle 训练:https://on-demand-gtc.gputechconf.com/gtcnew/sessionview.php?sessionName=cn9312-使用自动混合精度加速+paddlepaddle+训练
如果您加入官方 QQ 群 , 您将遇上大批志同道合的深度学习同学 。 官方 QQ 群:703252161 。
如果您想详细了解更多飞桨的相关内容 , 请参阅以下文档 。
官网地址:https://www.paddlepaddle.org.cn
飞桨核心框架项目地址:https://github.com/PaddlePaddle/Paddle


推荐阅读