0.深入理解GPU训练加速原理
GPU是如何加速的呢?
我打算从两个方面来解答:
- 单个GPU较于CPU加速:
在训练网络中,其实大量的运算资源都消耗在了数值计算上面,大部分网络训练的过程都是1.计算loss,2.根据loss求梯度,3.再根据梯度更新参数(梯度下降原理)。无论在GPU还是CPU中,都是不断重复123步。但是由于CPU是通用计算单元(并不擅长数值运行),而GPU特长是图像处理(数值计算)。所以GPU更加适合训练网络,从而起到加速效果。
- 多GPU较于单GPU加速:
一般在GPU训练中,同一个GPU中,batch_size的大小,决定训练的速度,batch_size越小,训练一轮所需的步数(data_len/batch_size)就会越大,从而花费时间越多。
下面介绍下使用多GPU数据并行加速原理:
假设一台机器上有k块GPU。给定需要训练的模型,每块GPU及其相应的显存将分别独立维护一份完整的模型参数。在模型训练的任意一次迭代中,给定一个随机小批量,我们将该批量中的样本划分成k份并分给每块显卡的显存一份。然后,每块GPU将根据相应显存所分