有没有办法像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 通过同步训练循环运行本地
非常感谢! ! –
非常感谢!我尝试了这种方法,当所有工人都在同一台机器上时,它运行良好。但是当我启动2个节点时,它会挂起,每个节点都有一个worker和一个ps。通常一次barrier()调用大约需要20分钟或更长时间。你有什么想法解决这个问题吗? –
未在多台机器上测试过。 20分钟后它真的会成功吗?单个sess.run调用在ps上增加多长时间? (你的网络是否慢?)它挂在哪个部分? –