Distribuované trénování
Azure Databricks doporučuje, abyste, pokud možno, neurální sítě trénovali v jednom počítači. Distribuovaný kód pro trénování a odvozování je složitější, než je kód pro jeden počítač, a je pomalejší z důvodu komunikační režie. Distribuované trénování a odvozování byste však měli zvážit, pokud mají vaše data nebo model příliš velkou velikost, než aby se vešla do paměti v jednom počítači. Pro tyto úlohy zahrnuje Databricks Runtime ML balíčky TorchDistributor, Horovod a spark-tensorflow-distributor.
Azure Databricks také nabízí distribuované trénování modelů Spark ML pomocí pyspark.ml.connect
modulu, viz trénování modelů Spark ML v Databricks Připojení pomocí pyspark.ml.connect.
Poznámka:
Databricks nedoporučuje spouštět distribuované trénování s více uzly pomocí virtuálních počítačů řady NC kvůli nízkému výkonu sítě mezi uzly. Místo toho použijte jeden uzel s více GPU nebo použijte jinou velikost virtuálního počítače GPU, například NCasT4_v3-series, která podporuje akcelerované síťové služby.
Distributor DeepSpeed
Distributor DeepSpeed je postaven na torchDistributor a je doporučeným řešením pro zákazníky s modely, které vyžadují vyšší výpočetní výkon, ale jsou omezené omezeními paměti. DeepSpeed je opensourcová knihovna vyvinutá Microsoftem a nabízí optimalizované využití paměti, menší komunikační režii a pokročilý paralelismus kanálu. Další informace o distribuovaném trénování s distributorem DeepSpeed
TorchDistributor
TorchDistributor je opensourcový modul v PySparku, který uživatelům pomáhá provádět distribuované trénování pomocí PyTorchu v jejich clusterech Spark, takže umožňuje spouštět trénovací úlohy PyTorch jako úlohy Sparku. Inicializuje prostředí a komunikační kanály mezi pracovními procesy a využívá příkaz torch.distributed.run
rozhraní příkazového řádku ke spuštění distribuovaného trénování napříč pracovními uzly. Přečtěte si další informace o distribuovaném trénování pomocí torchDistributoru.
spark-tensorflow-distributor
spark-tensorflow-distributor je opensourcový nativní balíček v TensorFlow pro distribuované trénování s využitím TensorFlow ve sparkových clusterech. Přečtěte si další informace o distribuovaném trénování pomocí TensorFlow 2.
Ray
Ray je opensourcová architektura, která se specializuje na paralelní výpočetní zpracování pro škálování pracovních postupů ML a aplikací umělé inteligence. Viz Použití Ray v Azure Databricks.
Horovod
Horovod je architektura pro distribuované trénování pro TensorFlow, Keras a PyTorch. Azure Databricks podporuje distribuované trénování hlubokého učení s využitím HorovodRunneru a balíčku horovod.spark
. Pro aplikace kanálů Spark ML pomocí Kerasu nebo PyTorchu můžete použít horovod.spark
rozhraní API pro odhadce.
Požadavky
Databricks Runtime ML.
Použití Horovodu
V následujících článcích najdete obecné informace o distribuovaném hlubokém učení s využitím Horovodu a ukázkové poznámkové bloky, které ilustrují použití HorovodRunneru a balíčku horovod.spark
.
- HorovodRunner: distribuované hluboké učení s využitím Horovodu
- Příklady HorovodRunneru
horovod.spark
: distribuované hluboké učení s využitím Horovodu
Instalace jiné verze Horovodu
Pokud chcete upgradovat nebo downgradovat Horovod z předinstalované verze v clusteru ML, musíte horovod znovu zkompilovat pomocí následujících kroků:
- Odinstalujte aktuální verzi Horovodu.
%pip uninstall -y horovod
- Pokud používáte cluster s akcelerovaným gpu, nainstalujte vývojové knihovny CUDA potřebné ke kompilaci Horovodu. Pokud chcete zajistit kompatibilitu, ponechte verze balíčků beze změny.
%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
- Stáhněte si požadovanou verzi zdrojového kódu Horovodu a zkompilujte s příslušnými příznaky. Pokud nepotřebujete žádná rozšíření (například
HOROVOD_WITH_PYTORCH
), můžete tyto příznaky odebrat.
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
- Slouží
%pip
k přeinstalaci Horovodu zadáním cesty kola Pythonu z výstupu předchozího příkazu.0.21.3
je znázorněno v tomto příkladu.
%pip install --no-cache-dir /databricks/driver/horovod/dist/horovod-0.21.3-cp38-cp38-linux_x86_64.whl
Řešení potíží s instalací Horovodu
Problém: Import vyvolání horovod.{torch|tensorflow}
ImportError: Extension horovod.{torch|tensorflow} has not been built
Řešení: Horovod je předinstalovaný ve službě Databricks Runtime ML, takže k této chybě obvykle dochází v případě, že se aktualizace prostředí nepovede. Tato chyba indikuje, že Horovod byl nainstalovaný před požadovanou knihovnou (PyTorch nebo TensorFlow). Vzhledem k tomu, že Horovod se kompiluje během instalace, horovod.{torch|tensorflow}
se nezkompiluje, pokud tyto balíčky nejsou během instalace Horovodu k dispozici.
Pokud chcete tento problém vyřešit, postupujte následovně:
- Ověřte, že jste v clusteru Databricks Runtime ML.
- Ujistěte se, že balíček pro PyTorch nebo TensorFlow je už nainstalovaný.
- Odinstalujte Horovod (
%pip uninstall -y horovod
). - Nainstalujte
cmake
(%pip install cmake
). - Znovu nainstalujte
horovod
.