我对这两个概念有些困惑。
我看到一些多GPU的例子,但是代码中没有使用集群和服务器。
它们是不同的吗?有什么区别?
非常感谢!
我对这两个概念有些困惑。
我看到一些多GPU的例子,但是代码中没有使用集群和服务器。
它们是不同的吗?有什么区别?
非常感谢!
这取决于您看待问题的角度。在任何多重设置中,无论是多GPU还是多台机器,您都需要决定如何将计算分配到并行资源上。在单节点多GPU设置中,有两种非常合理的选择:
(1) 模型内并行。如果模型具有长而独立的计算路径,则可以将模型分割成多个部分,并让每个GPU计算其中一部分。这需要对模型和计算依赖关系进行仔细的理解。
(2) 复制训练。启动多个模型的副本,对它们进行训练,然后同步它们的学习(应用于它们的权重和偏差的梯度)。
我们发布的Inception模型的自述文件中有一些良好的图表,展示了多GPU和分布式训练的工作原理。
但是简单来说,对于多GPU的设置,最好通过将权重存储在CPU上(或其附加的DRAM中)同步更新模型。但是在多机设置中,我们通常使用单独的“参数服务器”来存储和传播权重更新。为了将其扩展到大量副本,可以将参数分片到多个参数服务器上。with tf.device('/gpu:1')
之类的结构,或者使用tf.train.replica_device_setter
在/job:ps
或/job:worker
上分配参数服务器上的权重。直到最近,TensorFlow没有开源的集群版本 - 只有单机器零个或多个GPU。
新版本v0.9可能已经改变了这种情况。
原始发布文档(2015年10月)中的文章显示,Google拥有基于集群的解决方案 - 但它们尚未开源。
以下是whitepaper的内容:
3.2 多设备执行
一旦系统具有多个设备,就会出现两个主要问题:决定将计算放置在图中每个节点的哪个设备上,然后管理由这些放置决策所暗示的跨设备边界的数据通信。本小节讨论这两个问题。