Entraînement distribué

Dans la mesure du possible, Azure Databricks conseille d’entraîner les réseaux neuronaux sur une seule machine ; le code distribué pour l’entraînement et l’inférence est plus complexe que le code d’une seule machine, mais aussi plus lent en raison du traitement des communications. Toutefois, optez pour l’entraînement distribué et l’inférence si votre modèle ou vos données sont trop volumineux pour tenir en mémoire sur une seule machine. Pour ces charges de travail, Databricks Runtime ML comprend les packages TorchDistributor, Horovod et spark-tensorflow-distributor.

Azure Databricks offre également une formation distribuée pour les modèles Spark ML avec le module pyspark.ml.connect, consultez Entraîner des modèles Spark ML sur Databricks Connect avec pyspark.ml.connect.

Remarque

Databricks ne recommande pas l’exécution d’un entraînement distribué multinœud avec des machines virtuelles de la série NC en raison des faibles performances réseau inter-nœuds. Utilisez plutôt un nœud multi-GPU ou une autre taille de machine virtuelle GPU telle que la série NCasT4_v3, qui prend en charge l’accélération réseau.

Serveur de distribution DeepSpeed

Le serveur de distribution DeepSpeed repose sur TorchDistributor et est une solution recommandée pour les clients dont les modèles nécessitent une puissance de calcul plus élevée, mais qui sont limités par des contraintes de mémoire. DeepSpeed est une bibliothèque open source développée par Microsoft qui offre une utilisation optimisée de la mémoire, une surcharge de communication réduite et un parallélisme de pipeline avancé. En savoir plus sur l’entraînement distribué avec le serveur de distribution DeepSpeed

TorchDistributor

TorchDistributor est un module open source dans PySpark qui aide les utilisateurs à effectuer une formation distribuée avec PyTorch sur leurs clusters Spark. Il vous permet donc de lancer des travaux d’entraînement PyTorch en tant que travaux Spark. Sous le capot, il initialise l’environnement et les canaux de communication entre les workers et utilise la commande torch.distributed.run CLI pour exécuter une formation distribuée sur les nœuds Worker. En savoir plus sur l’entraînement distribué avec TorchDistributor 2.

spark-tensorflow-distributor

spark-tensorflow-distributor est un package natif open source dans TensorFlow qui permet d’effectuer un entraînement distribué avec TensorFlow sur les clusters Spark. En savoir plus sur l’entraînement distribué avec TensorFlow 2.

Ray

Ray est une infrastructure open source spécialisée dans le traitement de calcul parallèle pour la mise à l’échelle des workflows Machine Learning et des applications IA. Consultez Utiliser Ray sur Azure Databricks.

Horovod

Horovod est un framework d’entraînement distribué pour TensorFlow, Keras et PyTorch. Azure Databricks prend en charge l’entraînement de deep learning distribué avec HorovodRunner et le package horovod.spark. Pour les applications de pipeline Spark ML utilisant Keras ou PyTorch, vous pouvez utiliser l’API de l’estimateurhorovod.spark.

Spécifications

Databricks Runtime ML.

Utiliser Horovod

Les articles suivants fournissent des informations générales sur le deep learning distribué avec Horovod et des exemples de notebook montrant comment utiliser HorovodRunner et le package horovod.spark.

Installer une autre version de Horovod

Pour passer à une version supérieure ou antérieure de Horovod à partir de la version préinstallée dans votre cluster ML, vous devez recompiler Horovod en suivant ces étapes :

  1. Désinstallez la version actuelle de Horovod.
%pip uninstall -y horovod
  1. Si vous utilisez un cluster accéléré par GPU, installez les bibliothèques de développement CUDA requises pour compiler Horovod. Pour garantir la compatibilité, laissez les versions du package inchangées.
%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. Téléchargez la version souhaitée du code source de Horovod et compilez avec les indicateurs appropriés. Si vous n’avez besoin d’aucune extension (comme HOROVOD_WITH_PYTORCH), vous pouvez supprimer ces indicateurs.

UC

%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. Utilisez %pip pour réinstaller Horovod en spécifiant le chemin d’accès du wheel Python de la sortie de la commande précédente. 0.21.3 est illustré dans cet exemple.
%pip install --no-cache-dir /databricks/driver/horovod/dist/horovod-0.21.3-cp38-cp38-linux_x86_64.whl

Résoudre les problèmes d’installation Horovod

Problème : l’importation de horovod.{torch|tensorflow} lève ImportError: Extension horovod.{torch|tensorflow} has not been built

Solution : Horovod est préinstallé sur Databricks Runtime ML, donc cette erreur se produit généralement si la mise à jour d’un environnement rencontre un problème. L’erreur indique que Horovod a été installé avant une bibliothèque requise (PyTorch ou TensorFlow). Comme Horovod est compilé pendant l’installation, horovod.{torch|tensorflow} n’est pas compilé si ces packages ne sont pas présents pendant l’installation de Horovod. Pour résoudre ce problème, effectuez les étapes suivantes :

  1. Vérifiez que vous êtes sur un cluster Databricks Runtime ML.
  2. Assurez-vous que le package PyTorch ou TensorFlow est déjà installé.
  3. Désinstallez Horovod (%pip uninstall -y horovod).
  4. Installez cmake (%pip install cmake).
  5. Réinstallez horovod.