2016-12-16 76 views

回答

0

您可以使用共享計數器變量來實現屏障。即,從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上增加多長時間? (你的網絡是否慢?)它掛在哪個部分? –

相關問題