1
當進行分佈式異步培訓時,需要讓所有員工在某個時間等待同步模型參數,例如,一旦時期完成就進行同步,並在驗證集上計算出auc。有沒有辦法像MPI_BARRIER那樣在tensorflow中做?
MPI_BARRIER在使用MPI時足夠好,在張量流中是否有類似的東西?
當進行分佈式異步培訓時,需要讓所有員工在某個時間等待同步模型參數,例如,一旦時期完成就進行同步,並在驗證集上計算出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上增加多長時間? (你的網絡是否慢?)它掛在哪個部分? –