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.spark
API 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
.
- HorovodRunner: rozproszone uczenie głębokie za pomocą struktury Horovod
- Przykłady interfejsu HorovodRunner
horovod.spark
: rozproszone uczenie głębokie za pomocą struktury Horovod
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:
- Odinstaluj bieżącą wersję struktury Horovod.
%pip uninstall -y horovod
- 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
- 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
- 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:
- Sprawdź, czy korzystasz z klastra Databricks Runtime ML.
- Upewnij się, że pakiet PyTorch lub TensorFlow jest już zainstalowany.
- Odinstaluj strukturę Horovod (
%pip uninstall -y horovod
). - Zainstaluj program
cmake
(%pip install cmake
). - Ponownie zainstaluj strukturę
horovod
.