treinamento distribuído

Quando possível, a Databricks recomenda que você ensine rede neural em uma única máquina; o código distribuído para treinamento e inferência é mais complexo do que o código de máquina única 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 de uma única máquina. Para essas cargas de trabalho, o Databricks Runtime ML inclui o pacote TorchDistributor, Horovod e spark-tensorflow-distributor.

O Databricks também oferece treinamento distribuído para modelos Spark ML com o módulo pyspark.ml.connect. Consulte ensinar modelos Spark ML no Databricks Connect com PySpark.ml.connect.

Distribuidor DeepSpeed

O distribuidor DeepSpeed é construído sobre o TorchDistributor e é uma solução recomendada para clientes com modelos que exigem maior poder compute , mas são limitados por restrições de memória. 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

Distribuidor de tochas

TorchDistributor é um módulo de código aberto no PySpark que ajuda os usuários a fazer treinamento distribuído com PyTorch em seus clusters Spark, permitindo que você inicie Job de treinamento PyTorch como Spark Job. Sob o capô, ele inicializa o ambiente e o canal de comunicação entre o worker e utiliza o comando CLI torch.distributed.run para executar o treinamento distribuído entre os nós worker . Saiba mais sobre treinamento distribuído com TorchDistributor.

spark-tensorflow-distributor

spark-tensorflow-distributor é um pacote nativo de código aberto no TensorFlow para treinamento distribuído com TensorFlow em clusters Spark. Saiba mais sobre o treinamento distribuído com o TensorFlow 2.

Ray

Ray é uma estrutura de código aberto especializada em processamento paralelo compute para dimensionar o fluxo de trabalho de ML e aplicativos de IA. Consulte Usar Ray em Databricks.

Horovod

Horovod é uma estrutura de treinamento distribuído para TensorFlow, Keras e PyTorch. O Databricks oferece suporte ao treinamento distribuído de aprendizagem profunda usando HorovodRunner e o pacote horovod.spark . Para aplicativos ML pipelines usando Keras ou PyTorch, você pode usar a API do estimador horovod.spark .

Requisitos

Databricks Runtime ML.

Usar Horovod

Os artigos a seguir fornecem informações gerais sobre a aprendizagem profunda distribuída com o Horovod e Notebook de exemplo ilustrando como usar o HorovodRunner e o pacote horovod.spark.

Instale uma versão diferente do Horovod

Para atualizar ou fazer downgrade do Horovod da versão pré-instalada em seus clusters de ML, você deve recompilar o Horovod seguindo estas passos:

  1. Desinstale a versão atual do Horovod.

%pip uninstall -y horovod
  1. Se estiver usando clusters acelerados 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. downloads a versão desejada do código-fonte do Horovod e compila com os sinalizadores apropriados. Se você não precisar de nenhuma das extensões (como HOROVOD_WITH_PYTORCH), poderá remover esses sinalizadores.

%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
%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 Python wheel na saída do comando anterior. 0.21.3 é mostrado 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: Importando horovod.{torch|tensorflow} aumentos ImportError: Extension horovod.{torch|tensorflow} has not been built

soluções: O Horovod vem pré-instalado no Databricks Runtime ML, então esse erro normalmente ocorre 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 passos:

  1. Verifique se você está em clusters 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. Reinstale horovod.