TensorFlow 的 Mirrored 策略、batch size 和 Back Propagation
TensorFlow's Mirrored strategy, batch size and Back Propagation
我正在处理在多 GPU 服务器上训练神经网络。我正在使用 TensorFlow 2.1 中的 MirroredStrategy API,我有点困惑。
我有 8 个 GPU (Nvidia V100 32GB)
- 我指定的批量大小为 32(如何管理?每个 gpu 将有一批 32 个样本?我应该指定 256 作为批量大小 -32x8- 吗?)
- 何时以及如何应用反向传播?我读过 MirroredStrategy 是同步的:这是否意味着在前向步骤之后,所有批次都被分组为一批大小为 32x8 的批次,然后应用反向传播?或者按顺序对每批大小为 32 的 Back-prop 应用一次?
我真的很想确定我向服务器提交了什么样的实验,因为每个训练作业都非常耗时,并且根据可用 GPU 的数量影响批量大小来改变(和反向传播)结果正确性。
感谢您提供的任何帮助。
使用MirroredStrategy时,batch size指的是全局batch size。 You can see in the docs here
For instance, if using MirroredStrategy with 2 GPUs, each batch of size 10 will get divided among the 2 GPUs, with each receiving 5 input examples in each step.
因此在您的情况下,如果您希望每个 GPU 每步处理 32 个样本,您可以将批量大小设置为 32 * strategy.num_replicas_in_sync
。
每个 GPU 将在输入数据的不同切片上计算通过模型的正向和反向传递。然后,从这些切片中的每一个计算出的梯度在所有设备上聚合,并在称为 AllReduce 的过程中减少(通常是平均值)。然后,优化器使用这些减小的梯度执行参数更新,从而使设备保持同步。
我正在处理在多 GPU 服务器上训练神经网络。我正在使用 TensorFlow 2.1 中的 MirroredStrategy API,我有点困惑。
我有 8 个 GPU (Nvidia V100 32GB)
- 我指定的批量大小为 32(如何管理?每个 gpu 将有一批 32 个样本?我应该指定 256 作为批量大小 -32x8- 吗?)
- 何时以及如何应用反向传播?我读过 MirroredStrategy 是同步的:这是否意味着在前向步骤之后,所有批次都被分组为一批大小为 32x8 的批次,然后应用反向传播?或者按顺序对每批大小为 32 的 Back-prop 应用一次?
我真的很想确定我向服务器提交了什么样的实验,因为每个训练作业都非常耗时,并且根据可用 GPU 的数量影响批量大小来改变(和反向传播)结果正确性。
感谢您提供的任何帮助。
使用MirroredStrategy时,batch size指的是全局batch size。 You can see in the docs here
For instance, if using MirroredStrategy with 2 GPUs, each batch of size 10 will get divided among the 2 GPUs, with each receiving 5 input examples in each step.
因此在您的情况下,如果您希望每个 GPU 每步处理 32 个样本,您可以将批量大小设置为 32 * strategy.num_replicas_in_sync
。
每个 GPU 将在输入数据的不同切片上计算通过模型的正向和反向传递。然后,从这些切片中的每一个计算出的梯度在所有设备上聚合,并在称为 AllReduce 的过程中减少(通常是平均值)。然后,优化器使用这些减小的梯度执行参数更新,从而使设备保持同步。