繁体   English   中英

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

[英]Tensorflow: Using Parameter Servers in Distributed Training

尚不清楚参数服务器如何知道分布式张量流训练中的操作。

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

if FLAGS.job_name == "ps":
    server.join()
elif FLAGS.job_name == "worker":
    ##some training code

server.join()如何指示给定的任务应该是参数服务器? 参数是否充当任务的默认行为? 您还能/应该告诉参数服务任务做什么?

编辑 :此SO问题解决了我的一些问题:“逻辑确保将Variable对象均匀分配给充当参数服务器的工作程序。” 但是参数服务器如何知道它是参数服务器? server.join()足够?

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

server.join()方法只是告诉TensorFlow阻塞并监听请求,直到服务器关闭为止(这意味着它永远永久阻塞,或者直到您终止该进程为止,因为当前尚未实现干净关闭)。

在我之前的答案中的示例中,PS任务是被动的,并且一切都由工作任务控制...在## some training code 如果您将代码拆分到多个设备上,TensorFlow将添加适当的通信,这将扩展到不同进程中的设备。 with tf.device(tf.train.replica_device_setter(...)):块通过将其变量设置为"/job:ps/task:{i}" (针对不同的变量with tf.device(tf.train.replica_device_setter(...)):告诉TensorFlow将每个变量置于不同的PS任务上{i}值,以循环方式选择)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM