Gedistribueerde training

Indien mogelijk wordt door Azure Databricks aanbevolen neurale netwerken op één computer te trainen; gedistribueerde code voor training en deductie is complexer dan code op één machine en langzamer vanwege communicatie-overhead. Overweeg echter gedistribueerde training en deductie als uw model of gegevens te groot zijn voor het geheugen op één computer. Voor deze workloads bevat Databricks Runtime ML de TorchDistributor-, Horovod- en spark-tensorflow-distributor-pakketten.

Azure Databricks biedt ook gedistribueerde training voor Spark ML-modellen met de pyspark.ml.connect module. Zie Spark ML-modellen trainen op Databricks Verbinding maken met pyspark.ml.connect.

Notitie

Databricks raadt niet aan om gedistribueerde training met meerdere knooppunten uit te voeren met VM's uit de NC-serie vanwege lage netwerkprestaties tussen knooppunten. Gebruik in plaats daarvan één knooppunt met meerdere GPU's of gebruik een andere GPU-VM-grootte, zoals de NCasT4_v3-serie, die versneld netwerken ondersteunt.

DeepSpeed-distributeur

De DeepSpeed-distributeur is gebouwd op TorchDistributor en is een aanbevolen oplossing voor klanten met modellen die een hogere rekenkracht vereisen, maar worden beperkt door geheugenbeperkingen. DeepSpeed is een opensource-bibliotheek die is ontwikkeld door Microsoft en biedt geoptimaliseerd geheugengebruik, verminderde communicatieoverhead en geavanceerde pijplijnparallelisme. Meer informatie over gedistribueerde training met DeepSpeed-distributeur

TorchDistributor

TorchDistributor is een opensource-module in PySpark waarmee gebruikers gedistribueerde training kunnen uitvoeren met PyTorch in hun Spark-clusters, zodat u hiermee PyTorch-trainingstaken kunt starten als Spark-taken. Onder de schermen wordt de omgeving en de communicatiekanalen tussen de werkrollen geïnitialiseerd en wordt de CLI-opdracht torch.distributed.run gebruikt om gedistribueerde training uit te voeren op de werkknooppunten. Meer informatie over gedistribueerde training met TorchDistributor.

spark-tensorflow-distributor

spark-tensorflow-distributor is een opensource systeemeigen pakket in TensorFlow voor gedistribueerde training met TensorFlow op Spark-clusters. Meer informatie over gedistribueerde training met TensorFlow 2.

Ray

Ray is een opensource-framework dat gespecialiseerd is in parallelle rekenverwerking voor het schalen van ML-werkstromen en AI-toepassingen. Zie Ray gebruiken in Azure Databricks.

Horovod

Horovod is een framework voor gedistribueerde training voor TensorFlow, Keras en PyTorch. Azure Databricks ondersteunt gedistribueerde Deep Learning-training met behulp van HorovodRunner en het pakket horovod.spark. Voor Spark ML-pijplijntoepassingen met Keras of PyTorch kunt u de horovod.sparkestimator-API gebruiken.

Vereisten

Databricks Runtime ML.

Horovod gebruiken

De volgende artikelen bieden algemene informatie over gedistribueerde Deep Learning met Horovod en voorbeeldnotebooks waarin wordt gedemonstreerd hoe u HorovodRunner en het pakket horovod.spark gebruikt.

Een andere versie van Horovod installeren

Als u Horovod wilt upgraden of downgraden van de vooraf geïnstalleerde versie in uw ML-cluster, moet u Horovod opnieuw compileren door de volgende stappen uit te voeren:

  1. Verwijder de huidige versie van Horovod.
%pip uninstall -y horovod
  1. Als u een met GPU versneld cluster gebruikt, installeert u CUDA-ontwikkelbibliotheken die nodig zijn om Horovod te compileren. Laat de pakketversies ongewijzigd om compatibiliteit te garanderen.
%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. Download de gewenste versie van de broncode van Horovod en compileer met de juiste vlaggen. Als u geen extensies nodig hebt (zoals HOROVOD_WITH_PYTORCH), kunt u deze vlaggen verwijderen.

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. Gebruik %pip dit om Horovod opnieuw te installeren door het Python-wielpad op te geven uit de uitvoer van de vorige opdracht. 0.21.3 wordt weergegeven in dit voorbeeld.
%pip install --no-cache-dir /databricks/driver/horovod/dist/horovod-0.21.3-cp38-cp38-linux_x86_64.whl

Problemen met de installatie van Horovod oplossen

Probleem: Het importeren horovod.{torch|tensorflow} treedt op ImportError: Extension horovod.{torch|tensorflow} has not been built

Oplossing: Horovod is vooraf geïnstalleerd op Databricks Runtime ML, dus deze fout treedt meestal op als het bijwerken van een omgeving fout gaat. De fout geeft aan dat Horovod is geïnstalleerd voor een vereiste bibliotheek (PyTorch of TensorFlow). Aangezien Horovod tijdens de installatie wordt gecompileerd, wordt horovod.{torch|tensorflow} niet gecompileerd als die pakketten niet aanwezig zijn tijdens de installatie van Horovod. Volg deze stappen om het probleem op te lossen:

  1. Controleer of u zich in een Databricks Runtime ML-cluster bevindt.
  2. Zorg ervoor dat het PyTorch- of TensorFlow-project al is geïnstalleerd.
  3. Verwijder Horovod (%pip uninstall -y horovod).
  4. Installeer cmake (%pip install cmake).
  5. Installeer horovod opnieuw.