【发布时间】:2016-06-09 17:05:37
【问题描述】:
我对这两个概念有点困惑。
我在代码中看到了一些关于不使用集群和服务器的多 GPU 示例。
这两个有区别吗?有什么不同?
非常感谢!
【问题讨论】:
我对这两个概念有点困惑。
我在代码中看到了一些关于不使用集群和服务器的多 GPU 示例。
这两个有区别吗?有什么不同?
非常感谢!
【问题讨论】:
这在一定程度上取决于您看待它的角度。在任何多*设置中,无论是多 GPU 还是多机器,您都需要决定如何在并行资源之间拆分计算。在单节点、多 GPU 设置中,有两个非常合理的选择:
(1) 模型内并行性。如果一个模型具有较长且独立的计算路径,那么您可以将模型拆分到多个 GPU 上,并让每个 GPU 计算其中的一部分。这需要仔细了解模型和计算依赖关系。
(2) 重复训练。启动模型的多个副本,训练它们,然后同步它们的学习(梯度应用于它们的权重和偏差)。
我们的released Inception model 在自述文件中有一些很好的图表,展示了多 GPU 和分布式训练的工作原理。
但是对于 tl;dr 该消息来源:在多 GPU 设置中,通常最好通过将权重存储在 CPU 上(嗯,在其连接的 DRAM 中)来同步更新模型。但是在多机设置中,我们经常使用单独的“参数服务器”来存储和传播权重更新。要将其扩展到大量副本,您可以跨多个参数服务器分片参数。
使用多个 GPU 和参数服务器时,您会发现自己使用 with tf.device('/gpu:1') 等结构来放置设备时更加小心,或者使用 tf.train.replica_device_setter 在参数服务器上放置权重以将其分配给 /job:ps 或 @987654327 @。
一般来说,在单台机器上使用一堆 GPU 进行训练的效率要高得多——它需要超过 16 个分布式 GPU 才能达到单台机器上 8 个 GPU 的性能——但分布式训练可以让您扩展到甚至更大的数字,并利用更多的 CPU。
【讨论】:
直到最近,还没有开源集群版本的张量流——只有具有零个或多个 GPU 的单台机器。 新版本 v0.9 可能改变了也可能没有改变。 原始版本文档(2015 年 10 月)中的文章表明,Google 拥有基于集群的解决方案 - 但他们尚未将其开源。
whitepaper 是这样说的:
3.2 多设备执行 一旦一个系统有多个设备,有两个主要的复杂性:决定哪个设备在图中为每个节点放置计算,然后管理所需的 这些暗示的跨设备边界的数据通信 安置决定。本小节讨论这两个问题
【讨论】: