深度学习分布式训练小结

Posted Cy_coding

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度学习分布式训练小结相关的知识,希望对你有一定的参考价值。

分布式训练本质上是为了加快模型的训练速度,面对较为复杂的深度学习模型以及大量的数据。单机单GPU很难在有限的时间内达成模型的收敛。这时候就需要用到分布式训练。

分布式训练又分为模型并行和数据并行两大类。

1. 数据并行

数据并行在于将不同batch的数据分别交给不同的GPU来运算。如下图所示,灰色部分表示数据,蓝色表示模型。

数据并行中的一类就是参数平均,比如将第一个Batch的256个数据交给第一个U
第二个batch的256个数据交给第二个U
参数平均就是在他们分别通过整个神经网络计算出结果后取平均值,再修改模型中的参数。这样实现实际上在不考虑多GPU与CPU的通信成本上,与单GPU以batchsize为512来进行训练是一样的,但因为同时进行了两个batch的运算,运算速度在理想情况下是线性增加的。参数平均同时也是一个同步更新的过程,多个GPU的运算结果会统一结束并计算平均参数,这在我们使用同算力GPU的时候可以做到效率最大化。

除了同步更新,我们还有异步随机梯度下降。这意味着不同的GPU不需要等待每一个epoch中所有GPU的运算完毕就可以直接更新参数。这很显然进一步提升了多个U的效率,因为我们不再需要保证多个GPU的同步性,更大加快了模型的收敛。但不可避免地是,由于异步的特点,当某一个GPU完成运算并更新参数的时候,可能这时候模型中的全局参数已经经过了多次的改变,这可能会导致绝对误差的放大,优化过程可能不稳定。

2. 模型并行

说完了数据并行,我们来看一下专门用于优化非常复杂的深度学习网络的模型并行。与数据并行不同的是,这次我们通过将模型拆分为几个小的部分,分别交给多个GPU来进行运算。每次仍然给每个模型一个batch的数据来进行计算,将多个GPU作为节点。最后将运算结果进行合并。实际上是一种将模型切割为几个子模型按顺序计算的过程。

参考文本 :
【深度学习】— 分布式训练常用技术简介
【分布式深度学习part1】:神经网络的分布式训练

以上是关于深度学习分布式训练小结的主要内容,如果未能解决你的问题,请参考以下文章

[源码解析] 深度学习分布式训练框架 horovod --- 后台线程架构

深度学习中的分布式训练

深度神经网络 分布式训练 动手学深度学习v2

如何将深度学习训练速度提升一百倍?PAISoar 来了

深度学习分布式训练Collective通信操作及Pytorch示例

项目小结训练BERT模型加入到深度学习网络层中——keras_bert库使用填坑指南