Share via


Training distribuito

Quando possibile, Azure Databricks consiglia di eseguire il training delle reti neurali in un singolo computer. Il codice distribuito per il training e l'inferenza è più complesso del codice per un singolo computer ed è anche più lento a causa del sovraccarico delle comunicazioni. Può tuttavia essere opportuno prendere in considerazione il training e l'inferenza distribuiti se il modello o i dati sono troppo grandi per essere gestiti dalla memoria di un solo computer. Per questi carichi di lavoro, Databricks Runtime ML include i pacchetti TorchDistributor, Horovod e spark-tensorflow-distributor.

Azure Databricks offre anche il training distribuito per i modelli di Spark ML con il modulo. Vedere Eseguire il pyspark.ml.connect training di modelli spark ML in Databricks Connessione con pyspark.ml.connect.

Nota

Databricks non consiglia di eseguire il training distribuito multinodo usando macchine virtuali serie NC a causa di prestazioni di rete internodo basse. Usare invece un nodo multi-GPU o usare una dimensione di VM GPU diversa, ad esempio la serie di NCasT4_v3, che supporta la rete accelerata.

Distributore DeepSpeed

Il server di distribuzione DeepSpeed è basato su TorchDistributor ed è una soluzione consigliata per i clienti con modelli che richiedono una potenza di calcolo superiore, ma sono limitati dai vincoli di memoria. DeepSpeed è una libreria open source sviluppata da Microsoft e offre un utilizzo ottimizzato della memoria, un sovraccarico di comunicazione ridotto e un parallelismo avanzato della pipeline. Altre informazioni sul training distribuito con il server di distribuzione DeepSpeed

TorchDistributor

TorchDistributor è un modulo open source in PySpark che consente agli utenti di eseguire il training distribuito con PyTorch nei cluster Spark, in modo da consentire l'avvio di processi di training pyTorch come processi Spark. Inizializza l'ambiente e i canali di comunicazione tra i ruoli di lavoro e usa il comando dell'interfaccia della riga di comando torch.distributed.run per eseguire il training distribuito tra i nodi di lavoro. Altre informazioni sul training distribuito con TorchDistributor.

spark-tensorflow-distributor

spark-tensorflow-distributor è un pacchetto nativo open source disponibile in TensorFlow per il training distribuito con TensorFlow nei cluster Spark. Altre informazioni sul training distribuito con TensorFlow 2.

Raggio

Ray è un framework open source specializzato nell'elaborazione parallela di calcolo per il ridimensionamento dei flussi di lavoro di Machine Learning e delle applicazioni di intelligenza artificiale. Vedere Usare Ray in Azure Databricks.

Horovod

Horovod è un framework di training distribuito per TensorFlow, Keras e PyTorch. Azure Databricks supporta il training di Deep Learning distribuito tramite HorovodRunner e il pacchetto horovod.spark. Per le applicazioni della pipeline spark ML che usano Keras o PyTorch, è possibile usare l'API horovod.sparkdi stima.

Requisiti

Databricks Runtime ML.

Usare Horovod

Gli articoli seguenti contengono informazioni generali su Deep Learning distribuito con Horovod ed esempi di notebook che illustrano come usare HorovodRunner e il pacchetto horovod.spark.

Installare una versione diversa di Horovod

Per eseguire l'aggiornamento o il downgrade di Horovod dalla versione preinstallata nel cluster ml, è necessario ricompilare Horovod seguendo questa procedura:

  1. Disinstallare la versione corrente di Horovod.
%pip uninstall -y horovod
  1. Se si usa un cluster con accelerazione GPU, installare le librerie di sviluppo CUDA necessarie per compilare Horovod. Per garantire la compatibilità, lasciare invariate le versioni del pacchetto.
%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. Scaricare la versione desiderata del codice sorgente di Horovod e compilare con i flag appropriati. Se non sono necessarie estensioni , ad esempio HOROVOD_WITH_PYTORCH, è possibile rimuovere tali flag.

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. Usare %pip per reinstallare Horovod specificando il percorso della rotellina Python dall'output del comando precedente. 0.21.3 è illustrato in questo esempio.
%pip install --no-cache-dir /databricks/driver/horovod/dist/horovod-0.21.3-cp38-cp38-linux_x86_64.whl

Risolvere i problemi di installazione di Horovod

Problema: l'importazione horovod.{torch|tensorflow} genera ImportError: Extension horovod.{torch|tensorflow} has not been built

Soluzione: Horovod è preinstallato in Databricks Runtime ML, quindi questo errore si verifica in genere se l'aggiornamento di un ambiente non è corretto. L'errore indica che Horovod è stato installato prima di una libreria obbligatoria (PyTorch o TensorFlow). Poiché Horovod viene compilato durante l'installazione, la compilazione di horovod.{torch|tensorflow} non verrà eseguita se tali pacchetti non sono presenti durante l'installazione di Horovod. Per correggere il problema, attenersi alla seguente procedura:

  1. Verificare di trovarsi in un cluster Databricks Runtime ML.
  2. Assicurarsi che il pacchetto PyTorch o TensorFlow sia già installato.
  3. Disinstallare Horovod (%pip uninstall -y horovod).
  4. Installare cmake (%pip install cmake).
  5. Reinstallare horovod.