2016-06-09 101 views

回答

23

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

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

(2)复制式培训。启动模型的多个副本,训练他们,然后同步他们的学习(应用于他们的权重&偏差的渐变)。

我们的released Inception model在自述文件中有一些很好的图表,显示了多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。

+0

非常感谢您的解释! – xyd

+0

启动链接已损坏。 [Here](https://github.com/tensorflow/models/blob/16e4679834e1bf3e805703b197d377e35504fa09/tutorials/image/cifar10/cifar10_multi_gpu_train.py)是另一个例子。 – Albert

0

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

这里是什么whitepaper说:

3.2多设备执行一旦系统具有多个设备,有两个主要的并发症:决定哪些设备放置计算为图表中的每个节点,并然后管理这些 放置决定所隐含的跨设备边界的所需数据通信。本小节讨论这两个问题

+0

感谢您的回答!然而,他们宣布他们发布了分布式tensorflow与他们的v0.8,他们有一个教程页面:https://www.tensorflow.org/versions/r0.8/how_tos/distributed/index.html。那不是真正的分布式张量流? – xyd

+0

这是个好消息! - 让我们希望有人能够在这个问题上接近谁是“炙手可热”的。 – GavinBrelstaff