2016-09-18 33 views
5

简短版本:我们不能将变量存储在其中一个工作者中而不使用参数服务器吗?在分布式张量流学习中使用参数服务器的原因是什么?

长版本: 我想在张量流中实现神经网络的同步分布式学习。我希望每位工作人员在培训期间都有完整的模型副本。

我读过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)): 

为Variaibles? 与参数服务器解决方案相比,如果这样做有缺点吗?

回答

14

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

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

更为现实的,你可以有每个工人10 Gbps的网络容量。通过使用参数服务器分割8台机器来防止网络瓶颈。每个工人机器与每个参数机器通信的参数为1/8。

0

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

我们最近开发一个这样的版本在MATEX:https://github.com/matex-org/matex和纸张描述https://arxiv.org/abs/1704.04560

它做同步训练,并提供了几个数据集并行读写格式。

如果您需要更多帮助,我们将竭诚为您服务!

相关问题