TensorFlow的镜像策略,批量大小和反向传播

问题描述

我正在处理多GPU服务器上的神经网络训练。我正在使用TensorFlow 2.1中的MirroredStrategy API,但感到有点困惑。

我有8个GPU(Nvidia V100 32GB)

  • 我指定的批处理大小为32(如何管理?每个gpu将有一批32个样本?我应该将256指定为批处理大小-32x8-吗?)
  • 何时以及如何应用反向传播?我已经了解到MirroredStrategy是同步的:这是否意味着在向前执行步骤之后,所有批次都被分组为一个大小为32x8的批次,并且在应用了反向传播之后?还是按顺序将Back-prop应用于每批大小为32的批次?

我真的想确定我要提交给服务器的哪种实验,因为每项训练工作实际上都很耗时,并且根据可用GPU的数量更改批处理大小(以及反向支持)会影响结果的正确性

感谢您提供的任何帮助。

解决方法

使用MirroredStrategy时,批次大小是指全局批次大小。 You can see in the docs here

例如,如果将MirroredStrategy与2个GPU一起使用,则每批大小为10的批处理将分配给2个GPU,每个步骤在每个步骤中接收5个输入示例。

因此,如果您希望每个GPU每步处理32个样本,则可以将批处理大小设置为32 * strategy.num_replicas_in_sync

每个GPU都会在输入数据的不同切片上计算通过模型的正向和反向传递。然后,将这些切片中每个切片计算出的梯度汇总到所有设备上,并以称为AllReduce的过程进行缩减(通常是平均)。然后,优化程序以这些减小的梯度执行参数更新,从而使设备保持同步。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...