Entrenamiento distribuido

Cuando sea posible, Azure Databricks recomienda entrenar redes neuronales en una sola máquina; el código distribuido para el entrenamiento y las inferencias es más complejo que el código de una sola máquina y es más lento debido a la sobrecarga en la comunicación. Sin embargo, debe considerar la inferencia y el entrenamiento distribuido si el modelo o los datos son demasiado grandes como para caber en la memoria de un solo equipo. Para estas cargas de trabajo, Databricks Runtime ML incluye los paquetes TorchDistributor, Horovod y spark-tensorflow-distributor.

Azure Databricks también ofrece entrenamiento distribuido para modelos de Spark ML con el módulopyspark.ml.connect, consulte Entrenamiento de modelos de Spark ML en Databricks Connect con pyspark.ml.connect.

Nota:

Databricks no recomienda la ejecución del entrenamiento distribuido de varios nodos con máquinas virtuales de la serie NC debido a su bajo rendimiento de red entre nodos. En su lugar, use un nodo de varias GPU o un tamaño de máquina virtual de GPU distinto, como la serie NCasT4_v3, que admite redes aceleradas.

Distribuidor de DeepSpeed

El distribuidor DeepSpeed se basa en TorchDistributor y es una solución recomendada para los clientes con modelos que requieren una mayor potencia de proceso, pero están limitadas por restricciones de memoria. DeepSpeed es una biblioteca de código abierto desarrollada por Microsoft y ofrece un uso optimizado de memoria, una sobrecarga de comunicación reducida y paralelismo avanzado de canalización. Obtenga más información sobre el entrenamiento distribuido con DeepSpeed

TorchDistributor

TorchDistributor es un módulo de código abierto en PySpark que ayuda a los usuarios a hacer el entrenamiento distribuido con PyTorch en sus clústeres de Spark, por lo que permite iniciar trabajos de entrenamiento de PyTorch como trabajos de Spark. En segundo plano, inicializa el entorno y los canales de comunicación entre los trabajadores y utiliza el comando torch.distributed.run de la CLI para ejecutar el entrenamiento distribuido en los nodos de trabajo. Obtenga más información sobre el entrenamiento distribuido con TorchDistributor.

spark-tensorflow-distributor

spark-tensorflow-distributor es un paquete nativo de código abierto de TensorFlow para el entrenamiento distribuido con TensorFlow en los clústeres de Spark. Obtenga más información sobre el entrenamiento distribuido con TensorFlow 2.

Ray

Ray es un marco de trabajo de código abierto especializado en el procesamiento informático paralelo para escalar flujos de trabajo de ML y aplicaciones de IA. Consulte Usar Ray en Azure Databricks.

Horovod

Horovod es un marco de aprendizaje distribuido para TensorFlow, Keras y PyTorch. Azure Databricks admite el entrenamiento de aprendizaje profundo distribuido mediante HorovodRunner y el paquete horovod.spark. En el caso de las aplicaciones de canalización de ML de Spark que usan Keras o PyTorch, puede usar la API del estimador de horovod.spark.

Requisitos

Databricks Runtime ML.

Uso de Horovod

En los siguientes artículos se proporciona información general sobre el aprendizaje profundo distribuido con Horovod, así como cuadernos de ejemplo que ilustran cómo se usa HorovodRunner y el paquete horovod.spark.

Instalación de otra versión de Horovod

Para actualizar Horovod o cambiarlo a una versión anterior desde la versión preinstalada en el clúster de Machine Learning, es preciso debe volver a compilar Horovod, para lo que se deben seguir estos pasos:

  1. Desinstale la versión actual de Horovod.
%pip uninstall -y horovod
  1. Si usa un clúster acelerado por GPU, instale las bibliotecas de desarrollo de CUDA necesarias para compilar Horovod. Para garantizar la compatibilidad, no modifique las versiones del paquete.
%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. Descargue la versión que desee del código fuente de Horovod y realice la compilación con las marcas adecuadas. Si no necesita ninguna de las extensiones (como HOROVOD_WITH_PYTORCH ), puede quitar las marcas.

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. Se utiliza %pip para reinstalar Horovod especificando la ruta de la rueda Python de la salida del comando anterior. En este ejemplo, se muestra 0.21.3.
%pip install --no-cache-dir /databricks/driver/horovod/dist/horovod-0.21.3-cp38-cp38-linux_x86_64.whl

Solución de problemas de instalación de Horovod

Problema: La importación de horovod.{torch|tensorflow} genera ImportError: Extension horovod.{torch|tensorflow} has not been built

Solución: Horovod viene preinstalado en Databricks Runtime ML, por lo que este error suele producirse si la actualización de un entorno no se realiza correctamente. El error indica que Horovod se instaló antes que una biblioteca requerida (PyTorch o TensorFlow). Dado que Horovod se compila durante la instalación, horovod.{torch|tensorflow} no se compilará si esos paquetes no están presentes durante la instalación de Horovod. Para solucionar el problema, siga estos pasos:

  1. Compruebe que se encuentre en un clúster de Databricks Runtime ML.
  2. Asegúrese de que los paquetes PyTorch o TensorFlow ya están instalados.
  3. Desinstalación de Horovod (%pip uninstall -y horovod).
  4. Instalación de cmake (%pip install cmake)
  5. Vuelva a instalar horovod.