Поделиться через


Horovod

Внимание

Horovod и HorovodRunner теперь устарели. Выпуски после 15.4 машинного обучения LTS не будут установлены в этом пакете. Для распределенного глубокого обучения Databricks рекомендует использовать TorchDistributor для распределенного обучения с PyTorch или tf.distribute.Strategy API для распределенного обучения с TensorFlow.

Платформа распределенного обучения 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.