Szkolenie rozproszone

Jeśli to możliwe, w usłudze Azure Databricks zaleca się trenowanie sieci neuronowych na jednym komputerze. Kod rozproszony na potrzeby trenowania i wnioskowania jest bardziej złożony niż kod z pojedynczego komputera i wolniejszy ze względu na narzut związany z komunikacją. Należy jednak rozważyć trenowanie i wnioskowanie rozproszone, jeśli model lub dane są zbyt duże, aby zmieściły się w pamięci na pojedynczym komputerze. W przypadku tych obciążeń środowisko Databricks Runtime ML obejmuje pakiety TorchDistributor, Horovod i spark-tensorflow-distributor.

Usługa Azure Databricks oferuje również rozproszone szkolenie dla modeli uczenia maszynowego platformy Spark za pomocą modułupyspark.ml.connect. Zobacz Trenowanie modeli uczenia maszynowego Spark w usłudze Databricks Połączenie za pomocą narzędzia pyspark.ml.connect.

Uwaga

Usługa Databricks nie zaleca uruchamiania trenowania rozproszonego z wieloma węzłami przy użyciu maszyn wirtualnych z serii NC ze względu na niską wydajność sieci między węzłami. Zamiast tego należy użyć jednego węzła z wieloma procesorami GPU lub użyć innego rozmiaru maszyny wirtualnej procesora GPU, takiego jak seria NCasT4_v3, która obsługuje przyspieszoną sieć.

Dystrybutor DeepSpeed

Dystrybutor DeepSpeed jest oparty na torchDistributor i jest zalecanym rozwiązaniem dla klientów z modelami wymagającymi wyższej mocy obliczeniowej, ale są ograniczone przez ograniczenia pamięci. DeepSpeed to biblioteka typu open source opracowana przez firmę Microsoft i oferuje zoptymalizowane użycie pamięci, mniejsze obciążenie komunikacji i zaawansowane równoległość potoków. Dowiedz się więcej na temat trenowania rozproszonego za pomocą dystrybutora DeepSpeed

TorchDistributor

TorchDistributor to moduł typu open source w programie PySpark, który ułatwia użytkownikom trenowanie rozproszone za pomocą rozwiązania PyTorch w swoich klastrach Spark, dzięki czemu umożliwia uruchamianie zadań szkoleniowych PyTorch jako zadań platformy Spark. Under-the-hood inicjuje środowisko i kanały komunikacji między procesami roboczymi i wykorzystuje polecenie interfejsu wiersza polecenia torch.distributed.run do uruchamiania rozproszonego szkolenia między węzłami procesu roboczego. Dowiedz się więcej o trenowaniu rozproszonym za pomocą narzędzia TorchDistributor.

spark-tensorflow-distributor

Pakiet spark-tensorflow-distributor to natywny pakiet typu open source w bibliotece TensorFlow do trenowania rozproszonego za pomocą biblioteki TensorFlow w klastrach platformy Spark. Dowiedz się więcej na temat trenowania rozproszonego za pomocą biblioteki TensorFlow 2.

Ray

Ray to platforma typu open source, która specjalizuje się w równoległym przetwarzaniu obliczeniowym na potrzeby skalowania przepływów pracy uczenia maszynowego i aplikacji sztucznej inteligencji. Zobacz Use Ray on Azure Databricks (Używanie raya w usłudze Azure Databricks).

Horovod

Horovod to platforma do trenowania rozproszonego dla bibliotek TensorFlow, Keras i PyTorch. Usługa Azure Databricks obsługuje trenowanie rozproszone dla uczenia głębokiego przy użyciu interfejsu HorovodRunner i pakietu horovod.spark. W przypadku aplikacji potoków spark ML przy użyciu interfejsu Keras lub PyTorch można użyć interfejsu horovod.sparkAPI narzędzia do szacowania.

Wymagania

Databricks Runtime ML.

Używanie struktury Horovod

Poniższe artykuły zawierają ogólne informacje o rozproszonym uczeniu głębokim przy użyciu struktury Horovod oraz przykładowe notesy pokazujące, jak korzystać z interfejsu HorovodRunner i pakietu horovod.spark.

Instalowanie innej wersji struktury Horovod

Aby uaktualnić lub obniżyć wersję horovod ze wstępnie zainstalowanej wersji w klastrze uczenia maszynowego, należy ponownie skompilować bibliotekę Horovod, wykonując następujące kroki:

  1. Odinstaluj bieżącą wersję struktury Horovod.
%pip uninstall -y horovod
  1. W przypadku korzystania z klastra przyspieszonego przez procesor GPU zainstaluj biblioteki programistyczne CUDA wymagane do skompilowania struktury Horovod. Aby zapewnić zgodność, pozostaw niezmienione wersje pakietu.
%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. Pobierz żądaną wersję kodu źródłowego horovodu i skompiluj ją z odpowiednimi flagami. Jeśli nie potrzebujesz żadnych rozszerzeń (takich jak HOROVOD_WITH_PYTORCH), możesz usunąć te flagi.

Procesora

%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. Użyj polecenia %pip , aby ponownie zainstalować platformę Horovod, określając ścieżkę koła języka Python z danych wyjściowych poprzedniego polecenia. 0.21.3 pokazano w tym przykładzie.
%pip install --no-cache-dir /databricks/driver/horovod/dist/horovod-0.21.3-cp38-cp38-linux_x86_64.whl

Rozwiązywanie problemów z instalacją struktury Horovod

Problem: Importowanie horovod.{torch|tensorflow} zgłaszanych problemów ImportError: Extension horovod.{torch|tensorflow} has not been built

Rozwiązanie: Platforma Horovod jest wstępnie zainstalowana w środowisku Databricks Runtime ML, więc ten błąd zwykle występuje w przypadku nieprawidłowego aktualizowania środowiska. Błąd wskazuje, że struktura Horovod została zainstalowana przed wymaganą biblioteką (PyTorch lub TensorFlow). Ponieważ struktura Horovod jest kompilowana podczas instalacji, moduł horovod.{torch|tensorflow} nie zostanie skompilowany, jeśli te pakiety nie będą obecne podczas instalowania struktury Horovod. Aby rozwiązać problem, wykonaj następujące kroki:

  1. Sprawdź, czy korzystasz z klastra Databricks Runtime ML.
  2. Upewnij się, że pakiet PyTorch lub TensorFlow jest już zainstalowany.
  3. Odinstaluj strukturę Horovod (%pip uninstall -y horovod).
  4. Zainstaluj program cmake (%pip install cmake).
  5. Ponownie zainstaluj strukturę horovod.