2016-12-16 5 views
1

При выполнении распределенной асинхронной тренировки необходимо, чтобы все работники ожидали в какой-то момент синхронизации параметров модели, например, синхронизации после завершения эпохи и вычисления auc в наборе проверки.Есть ли способ сделать так, как MPI_BARRIER в тензорном потоке?

MPI_BARRIER достаточно хорош при использовании MPI, есть ли что-то подобное в тензорном потоке?

ответ

0

Вы можете использовать общие переменные счетчика для реализации барьера. IE, после 3.6.4 из Little Book of Semaphores вы могли бы сделать что-то вроде этого

# 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 узла, каждый с рабочим и ps. Обычно для вызова одного барьера() требуется около 20 минут или более. У вас есть идея исправить это? –

+0

Не тестировали это на нескольких машинах. Действительно ли это происходит через 20 минут? Как долго длится один вызов sess.run для увеличения на ps? (Ваша сеть медленная?) Какую часть она поддерживает? –