为什么训练速度不随批量大小而变化?

时间:2018-01-15 17:22:31

标签: tensorflow object-detection

我很惊讶增加批量大小不会增加GPU上的总处理速度。我的测量结果:

  • batch_size = 1:0.33秒/步
  • batch_size = 2:0.6秒/步
  • batch_size = 3:0.8秒/步
  • batch_size = 4:1.0秒/步

我的期望是,由于GPU上的并行化,该步骤的时间将保持(几乎)不变。但是,它几乎与批量大小成线性关系。为什么?我误解了什么吗?

我正在使用Tensorflow Object Detection API,重新训练预训练的 faster_rcnn_resnet101_coco 模型,预定义的batch_size为1,我们的GPU(Nvidia 1080 Ti)最多可以处理4张图像所以我想要利用它来加速培训。

2 个答案:

答案 0 :(得分:0)

经常错误地提到批量学习比在线培训快或快。实际上,批量学习一次改变权重,整个数据集(批处理)已经呈现给网络。因此,重量更新频率相当慢。这解释了为什么测量中的处理速度与您观察到的一样。

要进一步了解培训技巧,请查看2003年的论文The general inefficiency of batch training for gradient descent learning。它涉及批量和在线学习的比较。

编辑:

关于你的评论:

我不认为在单个GPU上发生模型或数据并行化。 GPU并行化了训练算法中涉及的向量和矩阵运算,但批处理学习算法仍然计算如下:

loop maxEpochs times
  for each training item
    compute weights and bias deltas for curr item
    accumulate the deltas
  end for
  adjust weights and bias deltas using accumulated deltas
end loop

正如您所看到的,虽然权重调整仅适用于整批,但仍需要为批次中的每个元素计算权重和偏差增量。因此,与在线学习相比,恕我直言的批处理学习算法没有大的性能优势。

答案 1 :(得分:-1)

以下是最近对三种不同GPU上不同批量大小的每秒图像的研究:

https://www.pugetsystems.com/labs/hpc/GPU-Memory-Size-and-Deep-Learning-Performance-batch-size-12GB-vs-32GB----1080Ti-vs-Titan-V-vs-GV100-1146/

验证了使用更大的批量大小可以提高某些GPU上的每个图像处理速度,原因如下:

  

更大的批量大小还可以通过减少将训练数据移动到GPU所导致的通信开销来提高性能。这会导致每次迭代都会在卡上运行更多的计算周期。

因此,如果您使用的是1080 Ti,那么使用较大的批量大小时,您可能不会在每秒图像方面看到很多改进。也就是说,GPU并不是真正并行处理图像。

相关问题