目前还不完全清楚参数服务器如何知道在分布式张量流训练中该做什么.
例如,在此SO问题中,以下代码用于配置参数服务器和辅助任务:
if FLAGS.job_name == "ps":
server.join()
elif FLAGS.job_name == "worker":
##some training code
Run Code Online (Sandbox Code Playgroud)
如何server.join()指示给定任务应该是参数服务器?参数是否为任务提供了一种默认行为?还有什么可以/应该告诉参数服务任务吗?
编辑:这个SO问题解决了我的一些问题:"那里的逻辑确保将Variable对象均匀地分配给充当参数服务器的工作者." 但参数服务器如何知道它是一个参数服务器?是否server.join()足够?
mrr*_*rry 12
TL; DR: TensorFlow对"参数服务器"一无所知,但它支持在不同进程中跨多个设备运行图形.其中一些进程具有名称以其开头的设备,这些设备包含"/job:ps"变量.工作人员驱动培训过程,当他们运行时,train_op他们将导致"/job:ps"设备上发生工作,这将更新共享变量.
该server.join()方法只是告诉TensorFlow阻塞并侦听请求,直到服务器关闭(这当前意味着它会永久阻塞,或直到你终止进程,因为当前没有实现干净关闭).
在我之前的回答中的示例中,PS任务是被动的,并且所有内容都由工作任务控制... in ## some training code.如果将代码分割到多个设备上,TensorFlow将添加适当的通信,这将扩展到不同进程中的设备.该with tf.device(tf.train.replica_device_setter(...)):块告诉TensorFlow通过将其设备设置为"/job:ps/task:{i}"(对于{i}以循环方式选择的不同值)将每个变量放在不同的PS任务上.
当您调用时sess.run(train_op),TensorFlow将运行依赖于并更新变量的图形,并包括更新它们的操作.这部分计算将在"/job:ps"设备上进行,因此这些设备将像参数服务器一样工作.
| 归档时间: |
|
| 查看次数: |
4323 次 |
| 最近记录: |