Стратегия Tensorflow Mirror и стратегия распределения Horovod
Я пытаюсь понять, в чем принципиальная разница между стратегией Tensorflow Mirror и стратегией распределения Horovod.
Из документации и исследования исходного кода я обнаружил, что Horovod ( https://github.com/horovod/horovod) использует протокол передачи сообщений (MPI) для связи между несколькими узлами. В частности, он использует all_reduce, all_gather MPI.
Из моих наблюдений (я могу ошибаться) в Зеркальной стратегии также используется алгоритм all_reduce ( https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/distribute).
Оба они используют синхронный учебный подход с параллельными данными. Так что я немного запутался, чем они отличаются? Разница только в реализации или есть другая (теоретическая) разница?
А какова производительность зеркальной стратегии по сравнению с хороводом?
0 ответов
Что касается производительности, один из моих коллег провел эксперименты перед использованием 4-х графических процессоров Tesla V100, используя коды отсюда. Результаты показали, что лучше всего работают 3 настройки:
replicated
с участием
all_reduce_spec=nccl
,
collective_all_reduce
с правильно настроенным
allreduce_merge_scope
(например, 32), и
horovod
. Я не увидел существенных различий между этими 3.
Стратегия зеркалирования имеет собственный алгоритм all_reduce, который использует удаленные процедурные вызовы (gRPC) под капотом.
Как вы упомянули, Horovod использует MPI/GLOO для связи между несколькими процессами.