Skip to content

关于 batch_size

复制本地路径 | 在线编辑

batch_size 大小对训练的影响

  • batch_size 变大的优点:
  • 每一次 CPU 向 GPU 发送 batch_size 大小数据,变大就意味着 GPU 每次处理数据增多,因此变快了。
  • 训练时的下降方向变得更加准确,引起训练震荡越小(原因尚不知)。
  • batch_size 变大的缺点:
  • 每一轮(epoch)训练的批次减小,也就是调整参数的机会变少,从而一轮参数反而收敛的慢。因此训练反而还有可能变慢。
  • 过大收敛可能会导致梯度下降方向不再变化(原因尚不知)。

综合上面来看,其实就是对速度和精度的影响。中庸思想,选择合理的 batch size 对速度精度都有好处。

batch_size 调参

  1. DataLoader 中的 pin_memory 改成 False:虽然网上说要设置为 True,这样直接 GPU 和 CPU 内存映射,免去数据搬运时间。但当数据量过大时,会非常消耗内存,反而限制了速度。
  2. DataLoader 中的 num_workers 根据 CPU 核数调成合适的数目:这一步的目的是设置多线程数据搬运,为了加快后续调参速度。直接根据硬件条件来设,如对于 CPU 16 核,那么设成 8 比较合适。
  3. 开始调整 batch_size,每次打印一轮时间,调整为合适数目。
  4. 调整 DataLoader 的 pin_memory:第一步中设为了 False,因为该参数可能会压制 batchsize 较大时的运行速度。这一步打开后,看看速度变化情况,判断是否需要打开。
  5. 调整 DataLoader 的 num_workers:之前只是简单的根据硬件设了一个数,现在 batchsize 已经设好了,那就把 num_workers 变大变小,看看时间变化。

Comments