带有MirroredStratgy多GPU训练的tf1.13估算器是拆分批处理还是多批处理?

时间:2019-05-05 15:46:35

标签: tensorflow

我正在使用tensorflow的1.13版,我尝试将tf.estimatorMirroredStratgy一起使用以实现多GPU(例如4 GPU)。使用ds = ds.batch(64),我是向每个GPU发送64个样本还是向每个GPU发送64/4=16个样本?

2 个答案:

答案 0 :(得分:1)

默认情况下,MirroredStrategy在所有GPU上复制全局批处理大小,因此,在您的情况下,您将向每个GPU发送64个样本。镜像策略还具有make_dataset_iteratormake_input_fn_iterator方法,可以拆分全局批处理大小

答案 1 :(得分:1)

我想指出的是,MirroredStrategy实际上将每个gpu的全局批处理大小 进行了划分。

因此,全局批次大小为64每个 GPU(假设我们正在使用4个GPU进行训练)将在每个训练步骤中收到64/4=16个输入示例。


Distributed training with TensorFlow上的tensorflow docs曾说过以下提供训练数据和评估输入的方法 (强调我自己):

从tf.data.Dataset加载数据

dataset = tf.data.Dataset.from_tensors(([1.], [1.])).repeat(100).batch(10)
model.fit(dataset, epochs=2)
model.evaluate(dataset)

从Numpy数组加载数据

import numpy as np
inputs, targets = np.ones((100, 1)), np.ones((100, 1))
model.fit(inputs, targets, epochs=2, batch_size=10)

在两种情况下(数据集或numpy),给定输入的每批均在多个副本之间均分。例如,如果将MirroredStrategy与2个GPU结合使用,则每批10号的大小将被划分为2个GPU,每个GPU在每个步骤中都会收到5个输入示例