Распределенное обучение

Azure Databricks рекомендует обучать нейронные сети на одном компьютере, если это возможно. Распределенный код для обучения и вывода будет более сложным, чем код для работы на одном компьютере, и работает медленнее из-за затрат на поддержание связи. Но распределенное обучение и вывод могут быть хорошим вариантом, если ваша модель и (или) данные слишком велики для размещения в памяти одного компьютера. Для этих рабочих нагрузок databricks Runtime ML включает пакеты TorchDistributor, Horovod и spark-tensorflow-распространителя.

Azure Databricks также предлагает распределенное обучение для моделей машинного обучения Spark с pyspark.ml.connect помощью модуля, см. в статье Обучение моделей машинного обучения Spark в Databricks Подключение с помощью pyspark.ml.connect.

Примечание.

Databricks не рекомендует выполнять распределенное обучение с несколькими узлами с использованием виртуальных машин серии NC из-за низкой производительности сети между узлами. Вместо этого используйте один узел с несколькими GPU или другой размер виртуальной машины GPU, например серию NCasT4_v3, которая поддерживает ускоренную работу сети.

Распространитель DeepSpeed

Распространитель DeepSpeed построен на основе TorchDistributor и является рекомендуемым решением для клиентов с моделями, которые требуют более высокой вычислительной мощности, но ограничены ограничениями памяти. DeepSpeed — это библиотека с открытым исходным кодом, разработанная корпорацией Майкрософт и предлагает оптимизированное использование памяти, снижение затрат на обмен данными и расширенный параллелизм конвейера. Дополнительные сведения о распределенной подготовке с помощью распространителя DeepSpeed

ФакелDistributor

TorchDistributor — это модуль с открытым исходным кодом в PySpark, который помогает пользователям выполнять распределенное обучение с помощью PyTorch в кластерах Spark, поэтому он позволяет запускать задания обучения PyTorch в качестве заданий Spark. Она инициализирует среду и каналы связи между работниками и использует команду torch.distributed.run CLI для выполнения распределенного обучения между рабочими узлами. Дополнительные сведения о распределенной подготовке с помощью TorchDistributor.

spark-tensorflow-distributor

spark-tensorflow-distributor — это нативный пакет с открытым кодом в TensorFlow для распределенного обучения с помощью TensorFlow в кластерах Spark. Дополнительные сведения о распределенной подготовке с помощью TensorFlow 2.

Рэй

Ray — это платформа с открытым исходным кодом, которая специализируется на параллельной обработке вычислений для масштабирования рабочих процессов машинного обучения и приложений ИИ. См. сведения об использовании Ray в Azure Databricks.

Horovod

Платформа распределенного обучения Horovod предназначена для работы с TensorFlow, Keras и PyTorch. Azure Databricks поддерживает распределенное глубокое обучение с использованием HorovodRunner и пакета horovod.spark. Для приложений конвейера машинного обучения Spark, использующих Keras или PyTorch, вы можете применять API оценщикаhorovod.spark.

Требования

Databricks Runtime ML.

Использование Horovod

В указанных ниже статьях приведены общие сведения о распределенном глубоком обучении с помощью Horovod и примеры записных книжек для иллюстрации использования HorovodRunner и пакета horovod.spark.

Установка другой версии Horovod

Чтобы перейти на использование более ранней или более поздней версии Horovod с предустановленной версии в кластере машинного обучения, нужно перекомпилировать Horovod, сделав следующее:

  1. Удалите текущую версию Horovod.
%pip uninstall -y horovod
  1. Если используется кластер с ускорением GPU, установите библиотеки разработки CUDA, необходимые для компиляции Horovod. Чтобы обеспечить совместимость, оставьте версии пакета без изменений.
%sh
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/ /"

wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb
dpkg -i ./nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb

apt-get update
apt-get install --allow-downgrades --no-install-recommends -y \
cuda-nvml-dev-11-0=11.0.167-1 \
cuda-nvcc-11-0=11.0.221-1 \
cuda-cudart-dev-11-0=11.0.221-1 \
cuda-libraries-dev-11-0=11.0.3-1 \
libnccl-dev=2.11.4-1+cuda11.5\
libcusparse-dev-11-0=11.1.1.245-1
  1. Скачайте нужную версию исходного кода Horovod и скомпилируйте его с соответствующими флагами. Если расширения не требуются (например, HOROVOD_WITH_PYTORCH), эти флаги можно удалить.

ЦП

%sh
HOROVOD_VERSION=v0.21.3 # Change as necessary
git clone --recursive https://github.com/horovod/horovod.git --branch ${HOROVOD_VERSION}
cd horovod
rm -rf build/ dist/
HOROVOD_WITH_MPI=1 HOROVOD_WITH_TENSORFLOW=1 HOROVOD_WITH_PYTORCH=1 \
# For Databricks Runtime 8.4 ML and below, replace with /databricks/conda/envs/databricks-ml/bin/python
sudo /databricks/python3/bin/python setup.py bdist_wheel
readlink -f dist/horovod-*.whl

GPU

%sh
HOROVOD_VERSION=v0.21.3 # Change as necessary
git clone --recursive https://github.com/horovod/horovod.git --branch ${HOROVOD_VERSION}
cd horovod
rm -rf build/ dist/
HOROVOD_GPU_ALLREDUCE=NCCL HOROVOD_CUDA_HOME=/usr/local/cuda HOROVOD_WITH_MPI=1 HOROVOD_WITH_TENSORFLOW=1 HOROVOD_WITH_PYTORCH=1 \
# For Databricks Runtime 8.4 ML and below, replace with /databricks/conda/envs/databricks-ml-gpu/bin/python
sudo /databricks/python3/bin/python setup.py bdist_wheel
readlink -f dist/horovod-*.whl
  1. Используйте %pip для переустановки Horovod, указав путь к колесу Python из выходных данных предыдущей команды. В нашем примере используется 0.21.3.
%pip install --no-cache-dir /databricks/driver/horovod/dist/horovod-0.21.3-cp38-cp38-linux_x86_64.whl

Устранение неполадок при установке Horovod

Проблема: импорт horovod.{torch|tensorflow} приводит к появлению ошибки ImportError: Extension horovod.{torch|tensorflow} has not been built

Решение: Horovod поставляется предварительно установленной в Databricks Runtime ML, поэтому эта ошибка обычно возникает, если обновление среды происходит неправильно. Она указывает, что платформа Horovod была установлена до установки необходимой библиотеки (PyTorch или TensorFlow). Так как компиляция Horovod выполняется во время установки, horovod.{torch|tensorflow} не будет скомпилирован, если такие пакеты отсутствуют в ходе установки Horovod. Чтобы устранить проблему, сделайте следующее:

  1. Убедитесь, что вы работаете с кластером Databricks Runtime ML.
  2. Убедитесь, что пакет PyTorch или TensorFlow уже установлен.
  3. Отмените установку Horovod (%pip uninstall -y horovod).
  4. Установите cmake (%pip install cmake).
  5. Повторно установить horovod.