【发布时间】:2016-12-16 05:59:54
【问题描述】:
在进行分布式异步训练时,需要让所有工作人员在某个时间等待同步模型参数,例如,在一个 epoch 完成后同步并计算验证集上的 auc。
MPI_BARRIER 在使用 MPI 时已经足够好了,在 tensorflow 中有没有类似的东西?
【问题讨论】:
标签: tensorflow distributed-computing
在进行分布式异步训练时,需要让所有工作人员在某个时间等待同步模型参数,例如,在一个 epoch 完成后同步并计算验证集上的 auc。
MPI_BARRIER 在使用 MPI 时已经足够好了,在 tensorflow 中有没有类似的东西?
【问题讨论】:
标签: tensorflow distributed-computing
您可以使用共享计数器变量来实现屏障。 IE,在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 在本地运行同步训练循环
【讨论】:
tf.train.Server(config=config) 增加 config=tf.ConfigProto(inter_op_parallelism_threads=..) -- github.com/tensorflow/tensorflow/issues/4455