关于 batch_size
复制本地路径 | 在线编辑
batch_size 大小对训练的影响
- batch_size 变大的优点:
- 每一次 CPU 向 GPU 发送 batch_size 大小数据,变大就意味着 GPU 每次处理数据增多,因此变快了。
- 训练时的下降方向变得更加准确,引起训练震荡越小(原因尚不知)。
- batch_size 变大的缺点:
- 每一轮(epoch)训练的批次减小,也就是调整参数的机会变少,从而一轮参数反而收敛的慢。因此训练反而还有可能变慢。
- 过大收敛可能会导致梯度下降方向不再变化(原因尚不知)。
综合上面来看,其实就是对速度和精度的影响。中庸思想,选择合理的 batch size 对速度精度都有好处。
batch_size 调参
- DataLoader 中的 pin_memory 改成 False:虽然网上说要设置为 True,这样直接 GPU 和 CPU 内存映射,免去数据搬运时间。但当数据量过大时,会非常消耗内存,反而限制了速度。
- DataLoader 中的 num_workers 根据 CPU 核数调成合适的数目:这一步的目的是设置多线程数据搬运,为了加快后续调参速度。直接根据硬件条件来设,如对于 CPU 16 核,那么设成 8 比较合适。
- 开始调整 batch_size,每次打印一轮时间,调整为合适数目。
- 调整 DataLoader 的 pin_memory:第一步中设为了 False,因为该参数可能会压制 batchsize 较大时的运行速度。这一步打开后,看看速度变化情况,判断是否需要打开。
- 调整 DataLoader 的 num_workers:之前只是简单的根据硬件设了一个数,现在 batchsize 已经设好了,那就把 num_workers 变大变小,看看时间变化。