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



我正在处理在多gpu服务器上训练神经网络的问题。我正在使用TensorFlow 2.1中的MirroredStrategy API,这让我有点困惑。

我有8个GPU(Nvidia V100 32GB(

  • 我指定的批量大小为32(如何管理?每个gpu将有一批32个样本?我是否应该指定256作为批量大小-32x8-?(
  • 反向传播何时以及如何应用?我读到MirroredStrategy是同步的:这是否意味着在前向步骤之后,所有批次都被分组为一个大小为32x8的批次,然后应用反向传播?还是按顺序为每批尺寸为32的产品应用一次背部支撑

我真的很想确定我向服务器提交了什么样的实验,因为每项训练工作都很耗时,并且根据可用GPU的数量改变批量大小会影响结果的正确性。

感谢您提供的任何帮助。

使用MirroredStrategy时,批大小是指全局批大小。你可以在这里的文档中看到

例如,如果使用具有2个GPU的MirroredStrategy,则每批大小为10的GPU将被划分为2个GPU,每个GPU在每个步骤中接收5个输入示例。

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

每个GPU将在输入数据的不同切片上计算通过模型的正向和反向通过。然后,来自这些切片中的每一个的计算梯度在所有设备上进行聚合,并在称为AllReduce的过程中减少(通常是平均值(。优化器然后用这些减小的梯度执行参数更新,从而保持设备同步。

最新更新