3

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

我有 8 个 GPU(Nvidia V100 32GB)

  • 我指定批量大小为 32(它是如何管理的?每个 gpu 将有一批 32 个样本?我应该将 256 指定为批量大小 -32x8- 吗?)
  • 何时以及如何应用反向传播?我读过 MirroredStrategy 是同步的:这是否意味着在前向步骤之后所有批次都被分组为一批大小为 32x8 并在应用反向传播之后?还是按顺序对每批大小为 32 的批次应用一次反向支持?

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

感谢您提供的任何帮助。

4

1 回答 1

3

使用 MirroredStrategy 时,批大小是指全局批大小。您可以在此处的文档中看到

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

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

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

于 2020-11-24T02:30:27.120 回答