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

10

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

我看到一些多GPU的例子,但是代码中没有使用集群和服务器。

它们是不同的吗?有什么区别?

非常感谢!

2个回答

27

这取决于您看待问题的角度。在任何多重设置中,无论是多GPU还是多台机器,您都需要决定如何将计算分配到并行资源上。在单节点多GPU设置中,有两种非常合理的选择:

(1) 模型内并行。如果模型具有长而独立的计算路径,则可以将模型分割成多个部分,并让每个GPU计算其中一部分。这需要对模型和计算依赖关系进行仔细的理解。

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

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

但是简单来说,对于多GPU的设置,最好通过将权重存储在CPU上(或其附加的DRAM中)同步更新模型。但是在多机设置中,我们通常使用单独的“参数服务器”来存储和传播权重更新。为了将其扩展到大量副本,可以将参数分片到多个参数服务器上。
使用多个GPU和参数服务器时,您需要更加谨慎地使用设备放置,使用诸如with tf.device('/gpu:1')之类的结构,或者使用tf.train.replica_device_setter/job:ps/job:worker上分配参数服务器上的权重。
一般来说,在单个机器上使用一堆GPU进行训练效率更高--需要超过16个分布式GPU才能达到单个机器上8个GPU的性能--但是分布式训练可以让您扩展到更大的数量,并利用更多的CPU。

非常感谢您的解释! - xyd
初始链接已损坏。这里提供了另一个示例。 - Albert

0

直到最近,TensorFlow没有开源的集群版本 - 只有单机器零个或多个GPU。

新版本v0.9可能已经改变了这种情况。

原始发布文档(2015年10月)中的文章显示,Google拥有基于集群的解决方案 - 但它们尚未开源。

以下是whitepaper的内容:

3.2 多设备执行

一旦系统具有多个设备,就会出现两个主要问题:决定将计算放置在图中每个节点的哪个设备上,然后管理由这些放置决策所暗示的跨设备边界的数据通信。本小节讨论这两个问题。


谢谢您的回答!然而,他们宣布在v0.8中发布了分布式TensorFlow,并且有一个教程页面:https://www.tensorflow.org/versions/r0.8/how_tos/distributed/index.html。那不是真正的分布式TensorFlow吗? - xyd
这是个好消息!希望有人能够“熟悉此事”并介入其中。 - GavinBrelstaff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接