tensorflow:多GPU与分布式张量流之间的差异

时间:2016-06-09 17:05:38

标签: tensorflow deep-learning

我对这两个概念感到困惑。

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

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

非常感谢!

2 个答案:

答案 0 :(得分:26)

这取决于您从中看待它的视角。在任何多*设置(多GPU或多机器)中,您需要决定如何跨并行资源分割计算。在单节点,多GPU设置中,有两个非常合理的选择:

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

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

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

但是对于来源:在多GPU设置中,通常最好通过将权重存储在CPU(以及其附加的DRAM)中来同步更新模型。但在多机器设置中,我们经常使用单独的“参数服务器”来存储和传播权重更新。要将其扩展到许多副本,可以在多个参数服务器之间对参数进行分片。

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

一般来说,在一台机器上对一堆GPU进行培训效率更高 - 在一台机器上需要超过16个分布式GPU才能达到8个GPU的性能 - 但分布式培训可让您扩展到均匀更大的数字,并利用更多的CPU。

答案 1 :(得分:0)

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

以下是whitepaper所说的内容:

  3.2多设备执行一旦系统有多个设备,就会出现两个主要的复杂情况:决定在图表中为每个节点放置计算的设备,然后管理所需的设备   跨这些设备边界的数据通信   安置决定。本小节讨论了这两个问题