Verteiltes Training

Wenn möglich, empfiehlt Azure Databricks, neuronale Netzwerke auf einem einzelnen Computer zu trainieren. Verteilter Code für Trainingszwecke und Rückschlüsse ist komplexer als Code für einzelne Computer und aufgrund höherer Kommunikationsauslastung verlangsamt. Ziehen Sie verteiltes Training und Rückschlüsse in Erwägung, wenn Ihr Modell oder Ihre Daten zu groß für den Arbeitsspeicher auf einem einzelnen Computer sind. Für diese Workloads beinhaltet Databricks Runtime ML die Pakete „TorchDistributor”, „Horovod” und „spark-tensorflow-distributor”.

Azure Databricks bietet außerdem verteiltes Training für Spark ML-Modelle mit dem Modul pyspark.ml.connect. Weitere Informationen dazu finden Sie unter Trainieren von Spark ML-Modellen in Databricks Connect mit pyspark.ml.connect.

Hinweis

Databricks empfiehlt aufgrund einer geringen Netzwerkleistung zwischen Knoten kein verteiltes Training mit mehreren Knoten mithilfe von VMs der NC-Serie. Stattdessen sollten Sie einen Multi-GPU-Knoten oder eine andere GPU-VM-Größe verwenden, z. B. die NCasT4_v3-Serie, die den beschleunigten Netzwerkbetrieb unterstützt.

DeepSpeed-Verteiler

Der DeepSpeed-Verteiler basiert auf TorchDistributor und ist eine empfohlene Lösung für Kunden mit Modellen, die eine höhere Computeleistung erfordern, aber durch Speichereinschränkungen begrenzt sind. DeepSpeed ist eine Open-Source-Bibliothek, die von Microsoft entwickelt wurde und eine optimierte Speicherauslastung, einen geringeren Kommunikationsaufwand und erweiterte Pipelineparallelität bietet. Erfahren Sie mehr über verteiltes Training mit dem DeepSpeed-Verteiler.

TorchDistributor

TorchDistributor ist ein Open-Source-Modul in PySpark, mit dem Benutzer verteilte Schulungen mit PyTorch auf ihren Spark-Clustern durchführen können, sodass Sie PyTorch-Trainingsaufträge als Spark-Aufträge starten können. Im Hintergrund initialisiert er die Umgebung und die Kommunikationskanäle zwischen den Workern und verwendet den CLI-Befehl torch.distributed.run, um verteiltes Training auf den Workerknoten auszuführen. Erfahren Sie mehr über verteiltes Training mit TorchDistributor.

spark-tensorflow-distributor

Bei spark-tensorflow-distributor handelt es sich um ein natives Open-Source-Paket in TensorFlow für verteiltes Training mit TensorFlow in Spark-Clustern. Erfahren Sie mehr über verteiltes Training mit TensorFlow 2.

Ray

Ray ist ein Open-Source-Framework, das auf parallele Computeverarbeitung für die Skalierung von ML-Workflows und AI-Anwendungen spezialisiert ist. Weitere Informationen finden Sie unter Verwenden von Ray in Azure Databricks.

Horovod

Horovod ist ein Framework für verteiltes Training für TensorFlow, Keras und PyTorch. Azure Databricks unterstützt verteiltes Deep Learning-Training unter Verwendung von HorovodRunner und des Pakets horovod.spark. Für Spark ML-Pipelineanwendungen, die Keras oder PyTorch nutzen, können Sie die Estimator-API von horovod.spark verwenden.

Anforderungen

Databricks Runtime ML.

Verwenden von Horovod

Die folgenden Artikeln enthalten allgemeine Informationen zu verteiltem Deep Learning mit Horovod sowie Beispielnotebooks, die die Verwendung von HorovodRunner und des Pakets horovod.spark veranschaulichen.

Installieren einer anderen Horovod-Version

Wenn Sie die in Ihrem ML-Cluster vorinstallierte Horovod-Version upgraden oder herabstufen möchten, müssen Sie Horovod mit den folgenden Schritten erneut kompilieren:

  1. Deinstallieren Sie die aktuelle Version von Horovod.
%pip uninstall -y horovod
  1. Wenn Sie einen GPU-beschleunigten Cluster verwenden, installieren Sie CUDA-Entwicklungsbibliotheken, die zum Kompilieren von Horovod erforderlich sind. Lassen Sie die Paketversionen unverändert, um die Kompatibilität sicherzustellen.
%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. Laden Sie die gewünschte Version des Horovod-Quellcodes herunter, und kompilieren Sie ihn mit den entsprechenden Flags. Wenn Sie keine der Erweiterungen (etwa HOROVOD_WITH_PYTORCH) benötigen, können Sie diese Flags entfernen.

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. Verwenden Sie %pip für die Neuinstallation von Horovod, indem Sie den Python-Pfad aus der Ausgabe des vorherigen Befehls angeben. In diesem Beispiel wird 0.21.3 gezeigt.
%pip install --no-cache-dir /databricks/driver/horovod/dist/horovod-0.21.3-cp38-cp38-linux_x86_64.whl

Beheben von Problemen bei der Horovod-Installation

Problem: Beim Importieren von horovod.{torch|tensorflow} wird ImportError: Extension horovod.{torch|tensorflow} has not been built ausgelöst.

Lösung: Horovod ist in Databricks Runtime ML vorinstalliert. Dieser Fehler tritt in der Regel dann auf, wenn eine Umgebung nicht ordnungsgemäß aktualisiert werden kann. Der Fehler weist darauf hin, dass Horovod vor einer erforderlichen Bibliothek (PyTorch or TensorFlow) installiert wurde. Da Horovod während der Installation kompiliert wird, wird horovod.{torch|tensorflow} nicht kompiliert, wenn diese Pakete bei der Installation von Horovod nicht vorhanden sind. Führen Sie diese Schritte aus, um das Problem zu beheben:

  1. Vergewissern Sie sich, dass Sie sich in einem Databricks Runtime ML-Cluster befinden.
  2. Stellen Sie sicher, dass das PyTorch- oder TensorFlow-Paket bereits installiert ist.
  3. Deinstallieren Sie Horovod (%pip uninstall -y horovod).
  4. Installieren Sie cmake (%pip install cmake).
  5. Installieren Sie horovod neu.