在分布式张量流学习中使用参数服务器的原因是什么?
What is the reason to use parameter server in distributed tensorflow learning?
简短版本:我们不能将变量存储在其中一个 worker 中而不使用参数服务器吗?
长版:
我想在tensorflow中实现神经网络的同步分布式学习。我希望每个工人在训练期间都有一份完整的模型。
我读过 distributed tensorflow tutorial and code of distributed training imagenet 但不明白为什么我们需要参数服务器。
我看到它们用于存储变量的值并且 replica_device_setter 负责变量在参数服务器之间均匀分布(可能它做了更多的事情,我无法完全理解代码) .
问题是:我们为什么不使用其中一个worker来存储变量呢?如果我使用
我会实现吗?
with tf.device('/job:worker/task:0/cpu:0'):
而不是
with tf.device(tf.train.replica_device_setter(cluster=cluster_spec)):
对于变量?
如果可行,与使用参数服务器的解决方案相比有缺点吗?
使用参数服务器可以提高网络利用率,并让您将模型扩展到更多机器。
一个具体的例子,假设你有250M个参数,在每个worker上计算梯度需要1秒,有10个worker。这意味着每个工作人员每秒必须 send/receive 向其他 9 个工作人员发送 1 GB 数据,这需要每个工作人员具备 72 Gbps 全双工网络容量,这是不切实际的。
更现实地说,每个工作人员可以拥有 10 Gbps 的网络容量。您可以通过使用分布在 8 台机器上的参数服务器来防止网络瓶颈。每台worker机器与每台参数机器通信1/8的参数。
另一种可能是使用分布式版本的TensorFlow,通过后端MPI自动处理数据在多个节点上的分发和执行。
我们最近在 MaTEx 开发了一个这样的版本:https://github.com/matex-org/matex, and a paper describing https://arxiv.org/abs/1704.04560
同步训练并提供多个并行数据集reader格式。
如果您需要更多帮助,我们很乐意为您提供帮助!
简短版本:我们不能将变量存储在其中一个 worker 中而不使用参数服务器吗?
长版: 我想在tensorflow中实现神经网络的同步分布式学习。我希望每个工人在训练期间都有一份完整的模型。
我读过 distributed tensorflow tutorial and code of distributed training imagenet 但不明白为什么我们需要参数服务器。
我看到它们用于存储变量的值并且 replica_device_setter 负责变量在参数服务器之间均匀分布(可能它做了更多的事情,我无法完全理解代码) .
问题是:我们为什么不使用其中一个worker来存储变量呢?如果我使用
我会实现吗?with tf.device('/job:worker/task:0/cpu:0'):
而不是
with tf.device(tf.train.replica_device_setter(cluster=cluster_spec)):
对于变量? 如果可行,与使用参数服务器的解决方案相比有缺点吗?
使用参数服务器可以提高网络利用率,并让您将模型扩展到更多机器。
一个具体的例子,假设你有250M个参数,在每个worker上计算梯度需要1秒,有10个worker。这意味着每个工作人员每秒必须 send/receive 向其他 9 个工作人员发送 1 GB 数据,这需要每个工作人员具备 72 Gbps 全双工网络容量,这是不切实际的。
更现实地说,每个工作人员可以拥有 10 Gbps 的网络容量。您可以通过使用分布在 8 台机器上的参数服务器来防止网络瓶颈。每台worker机器与每台参数机器通信1/8的参数。
另一种可能是使用分布式版本的TensorFlow,通过后端MPI自动处理数据在多个节点上的分发和执行。
我们最近在 MaTEx 开发了一个这样的版本:https://github.com/matex-org/matex, and a paper describing https://arxiv.org/abs/1704.04560
同步训练并提供多个并行数据集reader格式。
如果您需要更多帮助,我们很乐意为您提供帮助!