Share via


Treinamento distribuído

Quando possível, o Azure Databricks recomenda que você treine redes neurais em um único computador; o código distribuído para treinamento e inferência é mais complexo do que o código de uma única máquina e mais lento devido à sobrecarga de comunicação. No entanto, você deve considerar o treinamento distribuído e a inferência se seu modelo ou seus dados forem muito grandes para caber na memória em um único computador. Para essas cargas de trabalho, o Databricks Runtime ML inclui os pacotes TorchDistributor e spark-tensorflow-distributor.

O Azure Databricks também oferece treinamento distribuído para modelos Spark ML com o módulo pyspark.ml.connect, consulte Treinar modelos do Spark ML no Databricks Connect com pyspark.ml.connect.

Observação

O Databricks não recomenda executar o treinamento distribuído de vários nós usando VMs da série NC devido ao baixo desempenho de rede entre nós. Em vez disso, use um nó de várias GPU ou outro tamanho de VM de GPU, como a série NCasT4_v3, que dá suporte à rede acelerada.

Distribuidor DeepSpeed

O distribuidor DeepSpeed é construído sobre o TorchDistributor e é uma solução recomendada para clientes com modelos que exigem maior poder de computação, mas são limitados por restrições de memória. A DeepSpeed é uma biblioteca de código aberto desenvolvida pela Microsoft e oferece uso otimizado de memória, sobrecarga de comunicação reduzida e paralelismo de pipeline avançado. Saiba mais sobre o Treinamento distribuído com o distribuidor DeepSpeed

TorchDistributor

O TorchDistributor é um módulo de software livre no PySpark que ajuda o treinamento distribuído com o PyTorch em seus clusters Spark. Com ele, você pode iniciar trabalhos de treinamento do PyTorch como trabalhos do Spark. Em segundo plano, ele inicializa o ambiente e os canais de comunicação entre os trabalhadores e utiliza o comando torch.distributed.run da CLI para executar o treinamento distribuído entre os nós de trabalho. Saiba mais sobre o treinamento distribuído com o TorchDistributor.

spark-tensorflow-distributor

O spark-tensorflow-distribuidor é um pacote nativo de software livre no TensorFlow para treinamento distribuído com o TensorFlow nos clusters Spark. Saiba mais sobre o treinamento distribuído com o TensorFlow 2.

Ray

Ray é uma estrutura de código aberto especializada em processamento de computação paralelo para escalar fluxos de trabalho de ML e aplicativos de IA. Confira Usar o Ray no Azure Databricks.

Horovod

O Horovod é uma estrutura de treinamento distribuída para TensorFlow, Keras e PyTorch. O Azure Databricks dá suporte ao treinamento distribuído de aprendizado profundo usando o HorovodRunner e o pacote do horovod.spark. Para aplicativos de pipeline de ML do Spark que usam o Keras ou o PyTorch, use a horovod.sparkAPI de avaliador.

Requisitos

Databricks Runtime ML.

Usar o Horovod

Os seguintes artigos fornecem informações gerais sobre o aprendizado profundo distribuído com Horovod e notebooks de exemplo que ilustram como usar o HorovodRunner e o pacote do horovod.spark.

Instalar uma versão diferente do Horovod

Para atualizar ou fazer downgrade do Horovod com base na versão pré-instalada no cluster de ML, você deve recompilar o Horovod seguindo estas etapas:

  1. Desinstale a versão atual do Horovod.
%pip uninstall -y horovod
  1. Se estiver usando um cluster acelerado por GPU, instale as bibliotecas de desenvolvimento CUDA necessárias para compilar o Horovod. Para garantir a compatibilidade, deixe as versões do pacote inalteradas.
%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. Baixe a versão desejada do código-fonte do Horovod e compile com os sinalizadores adequados. Se você não precisa de nenhuma das extensões (como HOROVOD_WITH_PYTORCH), pode remover esses sinalizadores.

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. Use %pip para reinstalar o Horovod especificando o caminho do wheel do Python da saída do comando anterior. 0.21.3 é exibido neste exemplo.
%pip install --no-cache-dir /databricks/driver/horovod/dist/horovod-0.21.3-cp38-cp38-linux_x86_64.whl

Solucionar problemas de instalação do Horovod

Problema: a importação de horovod.{torch|tensorflow} gera ImportError: Extension horovod.{torch|tensorflow} has not been built

Solução: O Horovod vem pré-instalado no Databricks Runtime ML, portanto, esse erro normalmente ocorrerá se a atualização de um ambiente der errado. O erro indica que o Horovod foi instalado antes de uma biblioteca necessária (PyTorch ou TensorFlow). Como o Horovod é compilado durante a instalação, horovod.{torch|tensorflow} não será compilado se esses pacotes não estiverem presentes durante a instalação do Horovod. Para corrigir o problema, siga estas etapas:

  1. Verifique se você está em um cluster do Databricks Runtime ML.
  2. Verifique se o pacote PyTorch ou TensorFlow já está instalado.
  3. Desinstale o Horovod (%pip uninstall -y horovod).
  4. Instale cmake (%pip install cmake).
  5. Reinstalar horovod.