Потеря Tensorflow с несколькими графическими процессорами

Я изучаю, как реализовать обучение с несколькими графическими процессорами в Tensorflow. Теперь я читаю этот источник в соответствии с рекомендациями. в документации. Насколько я понимаю, в строке 178 переменные потери учитывают потери только для одного GPU (как указано в комментарии). Таким образом, в конце цикла, скажем, строки 192, потери сохранят значение потерь последнего рассмотренного GPU. Переменная потеря не изменяется до ее использования в строке 243, когда она передается в Session.run() для вычисления. Таким образом, значение потерь, напечатанное в строке 255, — это только потери последнего графического процессора, а не общие. Мне кажется сложным, что инженеры Google ошиблись в такой простой вещи, что я упускаю? Спасибо!


person lorenzop    schedule 14.02.2019    source источник


Ответы (1)


Не похоже, что вы что-то упускаете. Они считают, что достаточно распечатать стоимость потерь и сообщить сводные данные по одной башне.

Обычно вы отслеживаете потери/сводки для каждого графического процессора и/или вычисляете средние потери только для отладки, когда начинаете использовать новую модель на нескольких графических процессорах. После этого достаточно отслеживать только одну башню, поскольку каждая башня содержит одну и ту же копию модели.

Кстати, мне проще использовать tf.estimators для обучения с несколькими GPU, используя как tf.contrib.estimator.replicate_model_fn(...), так и tf.contrib.estimator.TowerOptimizer(...) для распределения модели и оптимизатора.

person Olivier Dehaene    schedule 14.02.2019