Tensorflow Multi-GPU重用和复制?

时间:2018-05-10 16:56:25

标签: python tensorflow

要在多个GPU上训练模型,可以在第一个GPU上创建一组变量,并在cifar10_multi_gpu_train中在其他GPU上重复使用它们(tf.variable_scope(tf.get_variable_scope(), reuse=device_num != 0))。

但是我遇到official CNN benchmarks在本地复制设置中,他们为每个GPU使用新的变量范围(tf.variable_scope('v%s' % device_num))。由于所有变量都是随机初始化的,因此使用post init op将值从GPU:0复制到其他变量。

然后两个实现都在CPU上平均渐变并反向传播结果(至少这是我认为,因为基准代码是神秘的:)) - 可能导致相同的结果。

这两种方法之间有什么区别,更重要的是什么更快?

谢谢。

1 个答案:

答案 0 :(得分:0)

区别在于,如果要重复使用变量,则每次迭代都将从所有GPU的原始位置广播变量开始,而如果要复制变量,则不需要广播,因此共享不应该更快。

不共享的一个缺点是,某个地方的错误或数值不稳定会更容易导致不同的GPU最终为每个变量使用不同的值。