【问题标题】:What is the reason to use parameter server in distributed tensorflow learning?分布式tensorflow学习中使用参数服务器的原因是什么?
【发布时间】:2017-01-26 07:37:21
【问题描述】:

短版:我们不能在其中一个worker中存储变量而不使用参数服务器吗?

加长版: 我想在tensorflow中实现神经网络的同步分布式学习。我希望每个工人在训练期间都拥有模型的完整副本。

我读过distributed tensorflow tutorialcode of distributed training imagenet,但不明白我们为什么需要参数服务器。

我看到它们用于存储变量的值,并且 replica_device_setter 负责变量在参数服务器之间均匀分布(可能它做了更多的事情,我无法完全理解代码)。

问题是:我们为什么不使用其中一个工人来存储变量?如果我使用

,我会实现吗?
with tf.device('/job:worker/task:0/cpu:0'):

而不是

with tf.device(tf.train.replica_device_setter(cluster=cluster_spec)):

对于变量? 如果这样可行,与使用参数服务器的解决方案相比是否有缺点?

【问题讨论】:

    标签: tensorflow distributed


    【解决方案1】:

    使用参数服务器可以提高网络利用率,并让您将模型扩展到更多机器。

    一个具体的例子,假设你有 250M 的参数,计算每个 worker 的梯度需要 1 秒,并且有 10 个 worker。这意味着每个工作人员每秒必须向其他 9 个工作人员发送/接收 1 GB 的数据,这需要每个工作人员上 72 Gbps 的全双工网络容量,这是不切实际的。

    更现实地说,每个工作人员可以拥有 10 Gbps 的网络容量。您可以通过将参数服务器拆分为 8 台机器来防止网络瓶颈。每台worker机器与每台参数机器通信1/8的参数。

    【讨论】:

    • 不确定您是如何得到上述数字的。例如,在直接工作人员到工作人员的情况下:如果我们假设每个参数使用 64 位(现在标准是 64 位浮点数),每秒更新 250M 参数,那就是 250 * 64 = 16,000M 位/秒= 16Gbps (2GB/sec) 单向,也就是说,对于每对工作人员 A 和 B,您需要每秒从 A 传输 2GB 到 B,从 B 传输到 A 2GB。这将需要总容量为 32 Gbps 的 A 和 B 之间的连接(16 Gbps 上行链路和 16 GBps 下行链路)。您如何获得总计 8Gbps 的速度?
    【解决方案2】:

    另一种可能是使用分布式版本的TensorFlow,它通过在后端使用MPI自动处理多个节点上的数据分布和执行。

    我们最近在 MaTEx 开发了一个这样的版本:https://github.com/matex-org/matex,以及一篇描述 https://arxiv.org/abs/1704.04560 的论文

    它进行同步训练并提供多种并行数据集阅读器格式。

    如果您需要更多帮助,我们很乐意为您提供帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-04
      • 2010-09-10
      • 2016-07-26
      • 2011-06-04
      • 2018-01-18
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多