Я изучаю, как реализовать обучение с несколькими графическими процессорами в Tensorflow. Теперь я читаю этот источник в соответствии с рекомендациями. в документации. Насколько я понимаю, в строке 178 переменные потери учитывают потери только для одного GPU (как указано в комментарии). Таким образом, в конце цикла, скажем, строки 192, потери сохранят значение потерь последнего рассмотренного GPU. Переменная потеря не изменяется до ее использования в строке 243, когда она передается в Session.run() для вычисления. Таким образом, значение потерь, напечатанное в строке 255, — это только потери последнего графического процессора, а не общие. Мне кажется сложным, что инженеры Google ошиблись в такой простой вещи, что я упускаю? Спасибо!
Потеря Tensorflow с несколькими графическими процессорами
Ответы (1)
Не похоже, что вы что-то упускаете. Они считают, что достаточно распечатать стоимость потерь и сообщить сводные данные по одной башне.
Обычно вы отслеживаете потери/сводки для каждого графического процессора и/или вычисляете средние потери только для отладки, когда начинаете использовать новую модель на нескольких графических процессорах. После этого достаточно отслеживать только одну башню, поскольку каждая башня содержит одну и ту же копию модели.
Кстати, мне проще использовать tf.estimators
для обучения с несколькими GPU, используя как tf.contrib.estimator.replicate_model_fn(...)
, так и tf.contrib.estimator.TowerOptimizer(...)
для распределения модели и оптимизатора.
person
Olivier Dehaene
schedule
14.02.2019