【问题标题】:Is there anyway to do sth like MPI_BARRIER in tensorflow?在张量流中有没有像 MPI_BARRIER 这样的事情?
【发布时间】:2016-12-16 05:59:54
【问题描述】:

在进行分布式异步训练时,需要让所有工作人员在某个时间等待同步模型参数,例如,在一个 epoch 完成后同步并计算验证集上的 auc。

MPI_BARRIER 在使用 MPI 时已经足够好了,在 tensorflow 中有没有类似的东西?

【问题讨论】:

    标签: tensorflow distributed-computing


    【解决方案1】:

    您可以使用共享计数器变量来实现屏障。 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 在本地运行同步训练循环

    【讨论】:

    • 非常感谢!!!我尝试了这种方法,当所有工作人员都在同一台机器上时它运行良好。但是当我启动 2 个节点时它挂起,每个节点都有一个工人和一个 ps。通常,一个 barrier() 调用大约需要 20 分钟或更长时间。你有什么办法解决这个问题吗?
    • 没有在不止一台机器上测试过这个。 20分钟后真的成功了吗?单个 sess.run 调用需要多长时间才能在 ps 上递增? (你的网络慢吗?)它挂在哪个部分?
    • 是的,它在 20 分钟后成功。它只是挂在 sess.run(counter_add) 上。
    • 我用一些简单的 DNN 尝试了多机,效果很好。我想知道当多机访问同一个变量时是否有一些死锁?
    • 并发运行的数量是否多于操作线程? (默认为核心数)。您可以尝试为您的 `tf.train.Server(config=config) 增加 config=tf.ConfigProto(inter_op_parallelism_threads=..) -- github.com/tensorflow/tensorflow/issues/4455
    猜你喜欢
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 2013-07-07
    • 2021-09-14
    • 2020-02-22
    • 1970-01-01
    相关资源
    最近更新 更多