短版本:我们不能将变量存储在其中一个worker中而不能使用参数服务器吗?
长版: 我想在tensorflow中实现神经网络的同步分布式学习。我希望每个工人在培训期间都能获得完整的模型副本。
我已阅读distributed tensorflow tutorial和code 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? 如果与使用参数服务器的解决方案相比,这有效吗?
答案 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
的论文它进行同步训练并提供多种并行数据集读取器格式。
如果您需要更多帮助,我们将很乐意为您提供帮助!