Distribuerad träning

Azure Databricks rekommenderar att du tränar neurala nätverk på en enskild dator när det är möjligt. Distribuerad kod för träning och slutsatsdragning är mer komplicerat än endatorskod och långsammare på grund av tillhörande kommunikationsinformation. Men du bör överväga distribuerad träning och slutsatsdragning om din modell eller dina data är för stora för att få plats i minnet på en enda dator. För dessa arbetsbelastningar innehåller Databricks Runtime ML paketen TorchDistributor, Horovod och spark-tensorflow-distributor.

Azure Databricks erbjuder även distribuerad träning för Spark ML-modeller med modulenpyspark.ml.connect, se Träna Spark ML-modeller på Databricks Anslut med pyspark.ml.connect.

Kommentar

Databricks rekommenderar inte att du kör distribuerad träning med flera noder med hjälp av virtuella datorer i NC-serien på grund av låga nätverksprestanda mellan noder. Använd i stället en nod med flera GPU:er eller använd en annan GPU VM-storlek, till exempel NCasT4_v3-serien, som stöder accelererat nätverk.

DeepSpeed-distributör

DeepSpeed-distributören bygger på TorchDistributor och är en rekommenderad lösning för kunder med modeller som kräver högre beräkningskraft, men som begränsas av minnesbegränsningar. DeepSpeed är ett bibliotek med öppen källkod som utvecklats av Microsoft och erbjuder optimerad minnesanvändning, minskad kommunikationsbelastning och avancerad pipelineparallellitet. Läs mer om distribuerad utbildning med DeepSpeed-distributör

TorchDistributor

TorchDistributor är en modul med öppen källkod i PySpark som hjälper användare att utföra distribuerad utbildning med PyTorch i sina Spark-kluster, så att du kan starta PyTorch-träningsjobb som Spark-jobb. Under huven initierar den miljön och kommunikationskanalerna mellan arbetarna och använder CLI-kommandot torch.distributed.run för att köra distribuerad utbildning över arbetsnoderna. Läs mer om distribuerad träning med TorchDistributor.

spark-tensorflow-distributor

spark-tensorflow-distributor är ett internt paket med öppen källkod i TensorFlow för distribuerad träning med TensorFlow i Spark-kluster. Läs mer om distribuerad träning med TensorFlow 2.

Ray

Ray är ett ramverk med öppen källkod som är specialiserat på parallell beräkningsbearbetning för skalning av ML-arbetsflöden och AI-program. Se Använda Ray på Azure Databricks.

Horovod

Horovod är ett ramverk för distribuerad träning för TensorFlow, Keras och PyTorch. Azure Databricks stöder distribuerad djupinlärningsträning med HorovodRunner och horovod.spark-paketet. För Spark ML-pipelineprogram med Keras eller PyTorch kan du använda beräknings-API:et.horovod.spark

Behov

Databricks Runtime ML.

Använda Horovod

Följande artiklar innehåller allmän information om distribuerad djupinlärning med Horovod, och exempel på notebook-filer som illustrerar hur du använder HorovodRunner och horovod.spark-paketet.

Installera en annan version av Horovod

Om du vill uppgradera eller nedgradera Horovod från den förinstallerade versionen i ML-klustret måste du kompilera om Horovod genom att följa dessa steg:

  1. Avinstallera den aktuella versionen av Horovod.
%pip uninstall -y horovod
  1. Om du använder ett GPU-accelererat kluster installerar du DE CUDA-utvecklingsbibliotek som krävs för att kompilera Horovod. Lämna paketversionerna oförändrade för att säkerställa kompatibilitet.
%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. Ladda ned den önskade versionen av Horovods källkod och kompilera med lämpliga flaggor. Om du inte behöver något av tilläggen (till exempel HOROVOD_WITH_PYTORCH) kan du ta bort flaggorna.

Cpu

%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. Använd %pip för att installera om Horovod genom att ange Python-hjulsökvägen från föregående kommandos utdata. 0.21.3 visas i det här exemplet.
%pip install --no-cache-dir /databricks/driver/horovod/dist/horovod-0.21.3-cp38-cp38-linux_x86_64.whl

Felsöka installationen av Horovod

Problem: Import av horovod.{torch|tensorflow} höjningar ImportError: Extension horovod.{torch|tensorflow} has not been built

Lösning: Horovod är förinstallerat på Databricks Runtime ML, så det här felet inträffar vanligtvis om det går fel att uppdatera en miljö. Felet indikerar att Horovod installerades före ett obligatoriskt bibliotek (PyTorch eller TensorFlow). Eftersom Horovod kompileras under installationen kompileras inte horovod.{torch|tensorflow} om dessa paket inte är tillgängliga under installationen av Horovod. Följ dessa anvisningar för att lösa problemet:

  1. Kontrollera att du använder ett Databricks Runtime ML-kluster.
  2. Kontrollera att PyTorch- eller TensorFlow-paketet redan är installerat.
  3. Avinstallera Horovod (%pip uninstall -y horovod).
  4. Installera cmake (%pip install cmake).
  5. Installera om horovod.