赞
踩
通常情况下,在深度学习中使用梯度下降算法进行训练时,往往需要较大的batch-size才能获得良好的性能。而当我们选择比较大型的网络时(如DenseNet121),由于GPU资源有限,我们往往要减小batch-size。但是batch-size太小的话会影响性能,这时候如果硬件条件允许的情况下可以使用多GPU进行训练。
多GPU又分为单机多卡和多机多卡。这篇博客仅介绍单机多卡。
单机单卡,前向传播和反向传播都在一个GPU上进行,模型参数更新时只涉及一个GPU。训练是一个batch一个batch的计算,如果想要训练4个batch的话,这些计算是顺序计算的,这样的速度比较慢。
多GPU分为模型并行和数据并行。模型并行指模型的不同部分在不同GPU上运行。数据并行指不同GPU上训练数据不同,但模型是同一个(相当于是同一个模型的副本)。一般情况下我们常用的是数据并行。
下面是训练过程模型图。
单机多GPU-数据并行的训练机制:
如果单机多GPU-数据并行训练4个batch的话,CPU会将4个batch数据分到4个GPU中,在每个 GPU 上放一个模型副本,然后每个GPU处理一个batch的计算,最后4个GPU计算得到的梯度传回给CPU,CPU计算平均梯度,然后更新参数。然后循环整个过程至模型收敛。
不同的 GPU设备有同一模型的多个副本,将数据分片并分配到每个GPU上,然后将所有GPU的计算结果按照某种方式合并,进而可以增加训练数据的batch-size。主要可以解决单卡训练时只能将batch-size设置成1的情况。或者可以通过增大batch-size进而提高训练速度。
参考:
https://www.tensorflow.org/tutorials/images/deep_cnn
https://www.jianshu.com/p/fdb93e44a8cc
作者:GL3_24
来源:CSDN
著作权归作者所有。转载请联系作者获得授权。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。