tensorflow:多GPU和分布式tensorflow的区别

tensorflow: difference between multi GPUs and distributed tensorflow

我对这两个概念有点困惑。

我在代码中看到了一些不使用集群和服务器的多 GPU 示例。

这两个有区别吗?有什么不同?

非常感谢!

嗯,直到最近还没有张量流的开源集群版本——只有零个或更多 GPU 的单机。 新版本 v0.9 可能有也可能没有改变。 原始发布文档(2015 年 10 月)中的文章显示 Google 有基于集群的解决方案——但他们没有开源它们。

whitepaper 是这样说的:

3.2 Multi-Device Execution Once a system has multiple devices, there are two main complications: deciding which device to place the computation for each node in the graph, and then managing the required communication of data across device boundaries implied by these placement decisions. This subsection discusses these two issues

这在一定程度上取决于您看待它的角度。在任何多*设置中,无论是多 GPU 还是多机器,您都需要决定如何在并行资源之间拆分计算。在单节点、多 GPU 设置中,有两个非常合理的选择:

(1) 模型内并行性。如果一个模型有长而独立的计算路径,那么您可以将模型拆分到多个 GPU 上,每个 GPU 计算其中的一部分。这需要仔细理解模型和计算依赖性。

(2) 重复训练。启动模型的多个副本,训练它们,然后同步它们的学习(应用于它们的权重和偏差的梯度)。

我们的 released Inception model 自述文件中有一些很好的图表,展示了多 GPU 和分布式训练的工作原理。

但 tl;dr 那个来源:在多 GPU 设置中,通常最好通过将权重存储在 CPU(好吧,在其附加的 DRAM 中)来同步更新模型。但是在多机设置中,我们经常使用单独的 "parameter server" 来存储和传播权重更新。要将其扩展到大量副本,您可以跨多个参数服务器对参数进行分片。

对于多个 GPU 和参数服务器,您会发现自己在使用 with tf.device('/gpu:1') 等结构放置设备时更加小心,或者使用 tf.train.replica_device_setter 将权重分配给参数服务器/job:ps/job:worker.

一般来说,在一台机器上训练一组 GPU 的效率要高得多——它需要超过 16 个分布式 GPU 才能达到一台机器上 8 个 GPU 的性能——但分布式训练可以让你扩展到更大的数字,并利用更多 CPU.