有没有办法像MPI_BARRIER那样在tensorflow中做?

问题描述:

当进行分布式异步培训时,需要让所有员工在某个时间等待同步模型参数,例如,一旦时期完成就进行同步,并在验证集上计算出auc。有没有办法像MPI_BARRIER那样在tensorflow中做?

MPI_BARRIER在使用MPI时足够好,在张量流中是否有类似的东西?

您可以使用共享计数器变量来实现屏障。即,从Little Book of Semaphores以下3.6.4你可以做这样的事情

# N is number of workers 
def barrier(): 
    sess.run(counter_adder_ops[0]) 
    while sess.run(counter_vars[0]) % N != 0: 
     time.sleep(FLAGS.sleep_interval) 
    sess.run(counter_adder_ops[1]) 
    while sess.run(counter_vars[1]) % N != 0: 
     time.sleep(FLAGS.sleep_interval) 

培训

期间
for i in range(FLAGS.iters): 
     barrier() 
     sess.run(sync_op) 
     barrier() 
     old_val, updated_val = sess.run([local_param_var, train_op]) 

这里是一个完整的example 通过同步训练循环运行本地

+0

非常感谢! ! –

+0

非常感谢!我尝试了这种方法,当所有工人都在同一台机器上时,它运行良好。但是当我启动2个节点时,它会挂起,每个节点都有一个worker和一个ps。通常一次barrier()调用大约需要20分钟或更长时间。你有什么想法解决这个问题吗? –

+0

未在多台机器上测试过。 20分钟后它真的会成功吗?单个sess.run调用在ps上增加多长时间? (你的网络是否慢?)它挂在哪个部分? –