python - Tensorflow 多 GPU 重用与复制?

标签 python tensorflow

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

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

这两种实现然后在 CPU 上平均梯度并反向传播结果(至少我是这么认为的,因为基准测试代码是神秘的:))——可能导致相同的结果。

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

谢谢。

最佳答案

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

p>

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

关于python - Tensorflow 多 GPU 重用与复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50277910/

相关文章:

python - 使用输入有没有办法输入范围

tensorflow - 为对抗性学习的张量板增加值(value)

python - ValueError : Dimensions must be equal,,但对于 'loss/output_1_loss/mul' 来说是 3 和 3072 (op : 'Mul' ) with input shapes: [? ,3], [?,3072]

python - Tensorflow - 分割、操作,然后求和 2D 数据点

python : name 'math' is not defined Error?

Python代码仅适用于标题标签,不适用于表格

python - 如何将其转换为 unicode 以便正确显示?

python - 如何为普通 pgm 格式编写 PIL 图像过滤器?

python - 如何从 tensorflow 检查点文件正确恢复网络训练?

tensorflow - 在 tensorflow 中将单词剥离为其组成字符