引言
通常情况下,在深度学习中使用梯度下降算法进行训练时,往往需要较大的batch-size才能获得良好的性能。而当我们选择比较大型的网络时(如DenseNet121),由于GPU资源有限,我们往往要减小batch-size。但是batch-size太小的话会影响性能,这时候如果硬件条件允许的情况下可以使用多GPU进行训练。
多GPU又分为单机多卡和多机多卡。这篇博客仅介绍单机多卡。
单机单卡(单GPU)
单机单卡,前向传播和反向传播都在一个GPU上进行,模型参数更新时只涉及一个GPU。训练是一个batch一个batch的计算,如果想要训练4个batch的话,这些计算是顺序计算的,这样的速度比较慢。
单机多卡(多GPU)
多GPU分为模型并行和数据并行。模型并行指模型的不同部分在不同GPU上运行。数据并行指不同GPU上训练数据不同,但模型是同一个(相当于是同一个模型的副本)。一般情况下我们常用的是数据并行。
下面是训练过程模型图。
单机多GPU-数据并行的训练机制:
如果单机多GPU-数据并行训练4个batch的话,CPU会将4个batch数据分到4个GPU中,在每个 GPU 上放一个模型副本,然后每个GPU处理一个batch的计算,最后4个GPU计算得到的梯度传回给CPU,CPU计算平均梯度,然后更新参数。然后循环整个过程至模型收敛。