Tensorflow中的数据并行性。哪一个更好?

时间:2018-03-27 00:03:18

标签: python tensorflow parallel-processing

我在Tensorflow中遇到了两个数据并行性的例子。

1)CIFAR-10示例:https://github.com/tensorflow/models/blob/master/tutorials/image/cifar10/cifar10_multi_gpu_train.py#L65

2)有效的Tensorflow https://github.com/vahidk/EffectiveTensorflow

正如我在[1]中所理解的那样,我们为每个GPU创建一个新模型副本,然后收集并最小化损失 在[2]中,我们将一个小批量分解成不同GPU的块。

[2]似乎对我来说更简单。

一种方法比另一种方法有什么优势吗?

1 个答案:

答案 0 :(得分:0)

两种实现都使用与minibatch相同的并行化方式。在两者中,每个gpu都有自己的模型图,但是id> = 1的所有gpus都获得了reuse=True的变量范围,因此所有gpu都可以处理相同的变量。

第170行的[1]中的循环几乎与[2]中for i in range(num_gpus):函数内的循环make_parallel相同。唯一的区别是[1]将tf.train.AdamOptimizer(0.1).minimize(tf.reduce_mean(loss))分为先获得渐变(第187行为opt.compute_gradients),然后在并行循环(opt.apply_gradients第205行)之后应用它们。他们这样做是为了在应用之前平均一个小批量的所有梯度。