Python TensorFlow';s镜像策略、批量大小和反向传播
我正在处理在多gpu服务器上训练神经网络的问题。我使用的是TensorFlow 2.1中的MirroredStrategy API,我有点困惑 我有8个GPU(Nvidia V100 32GB)Python TensorFlow';s镜像策略、批量大小和反向传播,python,tensorflow,tensorflow2.0,distributed-computing,batchsize,Python,Tensorflow,Tensorflow2.0,Distributed Computing,Batchsize,我正在处理在多gpu服务器上训练神经网络的问题。我使用的是TensorFlow 2.1中的MirroredStrategy API,我有点困惑 我有8个GPU(Nvidia V100 32GB) 我指定的批大小为32(如何管理?每个gpu将有一批32个样本?是否应指定256作为批大小-32x8-?) 何时以及如何应用反向传播?我读过MirroredStrategy是同步的:这是否意味着在前进步骤之后,所有批次都被分组为一个32x8大小的批次,然后应用反向传播?还是按顺序为每批尺寸为32的产品使
- 我指定的批大小为32(如何管理?每个gpu将有一批32个样本?是否应指定256作为批大小-32x8-?)
- 何时以及如何应用反向传播?我读过MirroredStrategy是同步的:这是否意味着在前进步骤之后,所有批次都被分组为一个32x8大小的批次,然后应用反向传播?还是按顺序为每批尺寸为32的产品使用一次后支撑
感谢您提供的帮助。使用MirroredStrategy时,批大小指全局批大小 例如,如果将MirroredStrategy与2个GPU一起使用,则大小为10的每批将在2个GPU中进行划分,每个步骤中接收5个输入示例 因此,在您的情况下,如果希望每个GPU每一步处理32个样本,您可以在同步中将批大小设置为
32*strategy.num\u replications\u
每个GPU将在输入数据的不同切片上计算通过模型的向前和向后传递。然后,从这些切片中计算出的梯度在所有设备中聚合,并在称为AllReduce的过程中减少(通常是平均值)。优化器然后使用这些降低的梯度执行参数更新,从而保持设备同步。如果提供32个批量大小,则每个GPU将获得一批32个样本,如果使用
tf.data.dataset
和tf.distribute.MirroredStrategy
@SwapnilMasurekar,则反向传播如何?您能为您的陈述提供参考吗?反向传播分别应用于每个副本,并使用某种策略(如“全部减少”算法等)聚合权重。您可以参考本文提到的“关键点”来验证批次大小@SwapnilMasurekar。我实际上使用的是生成器,但我认为反向传播仍然是单独进行的。