我正在使用tensorflow
的1.13版,我尝试将tf.estimator
与MirroredStratgy
一起使用以实现多GPU(例如4 GPU)。使用ds = ds.batch(64)
,我是向每个GPU发送64
个样本还是向每个GPU发送64/4=16
个样本?
答案 0 :(得分:1)
默认情况下,MirroredStrategy
在所有GPU上复制全局批处理大小,因此,在您的情况下,您将向每个GPU发送64个样本。镜像策略还具有make_dataset_iterator
和make_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个输入示例。