TL; DR:
TensorFlow对“参数服务器”一无所知,但它支持在不同进程中跨多个设备运行图形。其中一些进程的设备名称以开头
"/job:ps",并且其中包含变量。工人负责培训过程,当他们运行培训过程时,
train_op将导致
"/job:ps"设备上发生工作,这将更新共享变量。
该
server.join()方法只是告诉TensorFlow阻塞并监听请求,直到服务器关闭为止(这意味着它永远永久阻塞,或者直到您终止进程为止,因为当前尚未实现干净关闭)。
在我上一个答案的示例中,PS任务是被动的,并且一切都由…中的工作程序任务控制
##some training pre。如果您将代码拆分到多个设备上,TensorFlow将添加适当的通信,这将扩展到不同进程中的设备。该
withtf.device(tf.train.replica_device_setter(...)):块告诉TensorFlow通过将其设备设置为
"/job:ps/task:{i}"(对于的不同值{i},以循环方式选择)将每个变量置于不同的PS任务上。当您调用时
sess.run(train_op),TensorFlow将运行一个依赖并更新变量的图,并包括更新变量的操作。这部分计算将在
"/job:ps"设备上进行,因此这些设备将充当参数服务器。



