在分布式张量流学习中使用参数服务器的原因是什么?

时间:2016-09-18 15:11:42

标签: tensorflow distributed

短版本:我们不能将变量存储在其中一个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)):

for Variaibles? 如果与使用参数服务器的解决方案相比,这有效吗?

2 个答案:

答案 0 :(得分:21)

使用参数服务器可以为您提供更好的网络利用率,并允许您将模型扩展到更多计算机。

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

更现实地说,每个工作人员可以拥有10 Gbps的网络容量。通过使用分割8台计算机的参数服务器来防止网络瓶颈。每台工人机器与每台参数机器进行通信,以获得1/8的参数。

答案 1 :(得分:1)

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

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

的论文

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

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

相关问题