Python Tensorflow:在分布式培训中使用参数服务器

Python Tensorflow:在分布式培训中使用参数服务器,python,tensorflow,Python,Tensorflow,目前还不完全清楚参数服务器如何知道在分布式张量流训练中该做什么 例如,在此示例中,以下代码用于配置参数服务器和工作任务: if FLAGS.job_name == "ps": server.join() elif FLAGS.job_name == "worker": ##some training code server.join()如何指示给定任务应为参数服务器?参数服务于任务的一种默认行为吗?您还可以/应该告诉参数服务任务做什么 编辑:这解决了我的一些问题:“那里的逻辑确

目前还不完全清楚参数服务器如何知道在分布式张量流训练中该做什么

例如,在此示例中,以下代码用于配置参数服务器和工作任务:

if FLAGS.job_name == "ps":
    server.join()
elif FLAGS.job_name == "worker":
    ##some training code
server.join()
如何指示给定任务应为参数服务器?参数服务于任务的一种默认行为吗?您还可以/应该告诉参数服务任务做什么


编辑:这解决了我的一些问题:“那里的逻辑确保变量对象被均匀地分配给充当参数服务器的工作者。”但是参数服务器如何知道它是参数服务器呢?
server.join()是否足够?

TL;DR:TensorFlow对“参数服务器”一无所知,但它支持在不同进程中跨多个设备运行图形。其中一些进程具有名称以“
”/job:ps“
”开头的设备,这些设备包含变量。工人推动培训过程,当他们运行
培训操作时,他们将在
“/job:ps”
设备上工作,这将更新共享变量

该方法只是告诉TensorFlow在服务器关闭之前阻止并侦听请求(这意味着它将永远阻止请求,或者直到您终止进程,因为当前未实现干净关闭)

在我前面的回答中,PS任务是被动的,所有任务都由工作者任务控制。。。在
##一些培训代码中
。如果在多个设备上拆分代码,TensorFlow将添加适当的通信,这将扩展到不同进程中的设备。带有tf.device的
(tf.train.replica\u device\u setter(…):
块告诉TensorFlow通过将其设备设置为
“/job:PS/task:{i}”
(对于
{i}
的不同值,以循环方式选择),将每个变量放在不同的PS任务上


当您调用
sess.run(train_op)
时,TensorFlow将运行一个依赖并更新变量的图形,并包括更新变量的操作。这部分计算将在
“/job:ps”
设备上进行,因此这些设备将充当参数服务器。

“参数服务器”是保存变量的东西。这是从Google需要为存储变量的作业分离二进制文件时继承下来的传统命名。在tensorflow中,这是无关的区别,因为worker还可以存储变量。下面是两个相同启动的worker的示例,其中第一个充当参数服务器——这很有用。据我所知,为所有工作人员都可以进行通信的值(参数服务器)提供一个集中存储可能会更有效,而不是每个工作人员都必须与所有其他人进行通信。tensorflow会自动采用这种通信配置吗?不是真的——如果与tf.device(tf.replica\u device\u setter…)一起使用,它会将在该块中创建的变量放在一组“ps”worker上,因此这些worker充当分布式参数服务器。如果你不使用这个结构,你可能会有一个每个工人都与每个工人交谈的图表。那么实现分布式tensorflow的“最佳”实践是什么?与tf.device(tf.replica\u device\u setter…)一起使用还是不使用此构造?每种方法的优缺点是什么?这真的很有帮助!就我个人的理解而言,TF是否有任何方式控制任务的沟通方式?例如,是否有任何东西阻止工人在他们之间请求和更新参数值,这会破坏目的?这可能有点像杂草,但任何洞察都将不胜感激。谢谢TF在这方面几乎没有施加任何政策。创建
tf.train.Server
时,将集群定义为一组网络地址,这基本上建立了从设备名称(即
/job:{name}/task:{i}
部分)到网络地址的映射。在此之后,您可以自由定义跨任务的任何子集运行的图。如果您想在worker上缓存变量,您可以这样做,如果这有用的话,您当然可以添加直接的worker-to-worker通信。那么实现分布式tensorflow的“最佳”实践是什么?与tf.device(tf.replica\u device\u setter…)一起使用还是不使用此构造?每种方法的优点和缺点是什么?+++对于前面的问题@urey@mrry您能解释更多关于ps上工人原因变量更新的信息吗?我在这里提出了另一个问题