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.
- HorovodRunner: Verteiltes Deep Learning mit Horovod
- HorovodRunner-Beispiele
horovod.spark
: Verteiltes Deep Learning mit Horovod
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:
- Deinstallieren Sie die aktuelle Version von Horovod.
%pip uninstall -y horovod
- 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
- 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
- Verwenden Sie
%pip
für die Neuinstallation von Horovod, indem Sie den Python-Pfad aus der Ausgabe des vorherigen Befehls angeben. In diesem Beispiel wird0.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:
- Vergewissern Sie sich, dass Sie sich in einem Databricks Runtime ML-Cluster befinden.
- Stellen Sie sicher, dass das PyTorch- oder TensorFlow-Paket bereits installiert ist.
- Deinstallieren Sie Horovod (
%pip uninstall -y horovod
). - Installieren Sie
cmake
(%pip install cmake
). - Installieren Sie
horovod
neu.