[英]How to use distributed training with a custom loss using 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.