Открыть сервис

TensorFlow Horovod

TensorFlow Horovod — это библиотека для распределённого обучения глубоких нейронных сетей, разработанная компанией Uber Technologies и впоследствии переданная в управление сообществу Linux Foundation. Она предоставляет высокоуровневый интерфейс для параллельного обучения моделей на нескольких графических процессорах (GPU) или узлах кластера, используя алгоритм синхронного обмена градиентами (all-reduce). Horovod интегрируется с популярными фреймворками машинного обучения, включая TensorFlow, PyTorch и Apache MXNet, и позволяет значительно ускорить обучение моделей за счёт эффективного масштабирования.

История

Библиотека Horovod была создана в 2017 году инженерами компании Uber для решения проблем, связанных с масштабированием обучения моделей на больших кластерах GPU. До появления Horovod распределённое обучение в TensorFlow требовало использования сложных и ресурсоёмких схем, таких как параметрические серверы (Parameter Server), которые создавали узкие места при передаче данных. В 2018 году Uber опубликовала исходный код Horovod под лицензией Apache 2.0, и библиотека быстро получила распространение в сообществе машинного обучения. В 2020 году проект был передан под управление Linux Foundation, что обеспечило его независимость и долгосрочную поддержку. Ключевым вкладом Horovod стало внедрение алгоритма all-reduce, основанного на технологии NVIDIA NCCL (NVIDIA Collective Communications Library), который позволяет эффективно объединять градиенты со всех узлов без единой точки отказа.

Архитектура и принцип работы

Алгоритм all-reduce

Основой Horovod является алгоритм синхронного обмена градиентами, известный как all-reduce. В отличие от традиционных подходов, где каждый узел отправляет градиенты на центральный сервер, all-reduce выполняет агрегацию градиентов непосредственно между узлами. Это достигается за счёт использования кольцевой топологии (ring all-reduce), где каждый узел передаёт данные только соседним узлам, что минимизирует задержки и нагрузку на сеть. Процесс состоит из двух этапов: scatter-reduce (распределение и суммирование) и all-gather (сборка полного результата). В результате каждый узел получает одинаковые обновлённые градиенты, что позволяет синхронно обновлять веса модели.

Интеграция с TensorFlow

Horovod предоставляет API для интеграции с TensorFlow, которое заменяет стандартные механизмы распределённого обучения. Для использования Horovod с TensorFlow необходимо:

  1. Инициализировать Horovod с помощью hvd.init().
  2. Закрепить каждый GPU за отдельным процессом с помощью hvd.local_rank().
  3. Обернуть оптимизатор TensorFlow в hvd.DistributedOptimizer, который автоматически вычисляет и синхронизирует градиенты.
  4. Использовать hvd.BroadcastGlobalVariablesHook для синхронизации начальных весов модели на всех узлах.

Пример кода на Python: ```python import tensorflow as tf import horovod.tensorflow as hvd

hvd.init() config = tf.ConfigProto() config.gpu_options.visible_device_list = str(hvd.local_rank())

model = tf.keras.models.Sequential([...]) optimizer = tf.keras.optimizers.SGD(0.01) optimizer = hvd.DistributedOptimizer(optimizer)

model.compile(optimizer=optimizer, loss='categorical_crossentropy') callbacks = [hvd.callbacks.BroadcastGlobalVariablesCallback(0)]

model.fit(x_train, y_train, callbacks=callbacks, steps_per_epoch=500 // hvd.size()) ```

Классификация и виды

По типу поддерживаемых фреймворков

Horovod поддерживает интеграцию с несколькими фреймворками машинного обучения:

  • TensorFlow — полная поддержка, включая TensorFlow 1.x и 2.x, а также Keras.
  • PyTorch — поддержка через модуль horovod.torch.
  • Apache MXNet — поддержка через модуль horovod.mxnet.
  • Spark — интеграция с Apache Spark через horovod.spark.

По типу используемых коммуникационных библиотек

Horovod может использовать различные бэкенды для передачи данных:

  • NCCL — оптимизирован для GPU от NVIDIA, обеспечивает максимальную производительность на кластерах с GPU.
  • MPI — стандартный протокол для распределённых вычислений, подходит для CPU-кластеров.
  • Gloo — библиотека для коллективных коммуникаций, разработанная Facebook (организация Meta признана экстремистской и запрещена в РФ), используется для CPU-кластеров.

Применение

Обучение больших моделей

Horovod широко используется для обучения моделей, которые не помещаются в память одного GPU. Например, модели с миллиардами параметров, такие как GPT-3 (разработана OpenAI) или BERT (разработана Google), требуют распределённого обучения на сотнях и тысячах GPU. Horovod позволяет эффективно масштабировать обучение, достигая линейного ускорения при увеличении числа узлов.

Исследования и промышленность

Библиотека применяется в исследовательских лабораториях и промышленных компаниях для ускорения экспериментов. Например, в Uber Horovod используется для обучения моделей прогнозирования времени поездок и оптимизации маршрутов. В области компьютерного зрения Horovod применяется для обучения моделей распознавания изображений на больших наборах данных, таких как ImageNet.

Обучение с подкреплением

В задачах обучения с подкреплением, где требуется многократное взаимодействие с симулятором, Horovod позволяет параллельно запускать несколько агентов на разных узлах, что ускоряет сбор данных и обучение.

Преимущества и недостатки

Преимущества

  • Простота использования: Horovod требует минимальных изменений в коде по сравнению с другими системами распределённого обучения.
  • Масштабируемость: алгоритм all-reduce обеспечивает почти линейное ускорение при увеличении числа узлов.
  • Совместимость: библиотека работает с большинством современных фреймворков и аппаратных платформ.
  • Отказоустойчивость: Horovod поддерживает механизмы восстановления после сбоев, такие как hvd.elastic, позволяющий динамически добавлять или удалять узлы.

Недостатки

  • Синхронность: Horovod использует синхронное обновление градиентов, что может приводить к задержкам при наличии медленных узлов (stragglers).
  • Потребление памяти: при использовании all-reduce требуется дополнительная память для хранения промежуточных результатов.
  • Зависимость от сети: производительность сильно зависит от пропускной способности сети и задержек между узлами.

Сравнение с альтернативами

TensorFlow Distributed Strategy

TensorFlow предоставляет встроенный механизм распределённого обучения — tf.distribute.Strategy, который включает различные стратегии, такие как MirroredStrategy, MultiWorkerMirroredStrategy и ParameterServerStrategy. Horovod отличается от них тем, что:

  • использует all-reduce вместо параметрических серверов, что снижает задержки;
  • поддерживает больше фреймворков, а не только TensorFlow;
  • предоставляет более гибкий контроль над распределением данных.

PyTorch Distributed Data Parallel (DDP)

PyTorch DDP является стандартным инструментом для распределённого обучения в PyTorch. Horovod может быть альтернативой, если требуется единый интерфейс для нескольких фреймворков или если необходимо использовать специфические бэкенды, такие как MPI.

Интересные факты

  • Название «Horovod» происходит от русского слова «хоровод», что символизирует круговую передачу данных между узлами.
  • В 2019 году Horovod был использован для обучения модели BERT на 64 GPU, что позволило сократить время обучения с нескольких недель до нескольких дней.
  • Библиотека поддерживает обучение на смешанной точности (mixed precision) с использованием NVIDIA Tensor Cores, что дополнительно ускоряет вычисления.

Источники

  1. Uber Engineering. «Horovod: fast and easy distributed deep learning in TensorFlow». — 2017.
  2. Документация Horovod. — Linux Foundation, 2023.
  3. Sergeev, A., Del Balso, M. «Meet Horovod: Uber’s Open Source Distributed Deep Learning Framework for TensorFlow». — Uber Engineering Blog, 2017.
  4. NVIDIA. «NCCL: NVIDIA Collective Communications Library». — 2022.
  5. TensorFlow Documentation. «Distributed training with TensorFlow». — 2023.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →