分散式訓練

可能的話,Azure Databricks 建議您在單一計算機上定型神經網路;用於定型和推斷的分散式程式代碼比單一機器程式代碼複雜,而且因為通訊額外負荷而變慢。 不過,如果您的模型或數據太大而無法容納單一計算機上的記憶體,您應該考慮分散式定型和推斷。 針對這些工作負載,Databricks Runtime ML 包含 TorchDistributor、Horovod 和 spark-tensorflow-distributor 套件。

Azure Databricks 也透過模組提供 Spark ML 模型的pyspark.ml.connect分散式定型,請參閱使用 pyspark.ml.connect 在 Databricks 上將 Spark ML 模型定型 連線。

注意

由於節點間網路效能低,Databricks 不建議使用 NC 系列 VM 執行多節點分散式定型。 請改用一個多 GPU 節點,或使用不同的 GPU VM 大小,例如 支援加速網路的 NCasT4_v3 系列

DeepSpeed 散發者

DeepSpeed 散發者建置在 TorchDistributor 之上,是針對需要較高計算能力但受記憶體限制之模型的客戶的建議解決方案。 DeepSpeed 是由 Microsoft 開發的開放原始碼連結庫,可提供優化的記憶體使用量、降低通訊額外負荷,以及進階管線平行處理原則。 深入瞭解 使用 DeepSpeed 散發者的分散式定型

TorchDistributor

TorchDistributor 是 PySpark 中的開放原始碼模組,可協助使用者在 Spark 叢集上使用 PyTorch 進行分散式訓練,因此可讓您以 Spark 作業的形式啟動 PyTorch 訓練作業。 在背景下,它會初始化背景工作角色之間的環境和通道,並利用CLI命令 torch.distributed.run 跨背景工作節點執行分散式訓練。 深入瞭解 使用 TorchDistributor 進行分散式訓練。

spark-tensorflow-distributor

spark-tensorflow-distributor 是 TensorFlow 中的開放原始碼原生套件,可用於在 Spark 叢集上使用 TensorFlow 進行分散式定型。 深入瞭解 TensorFlow 2 的分散式訓練。

射線

Ray 是開放原始碼架構,專門用於調整 ML 工作流程和 AI 應用程式的平行計算處理。 請參閱 在 Azure Databricks 上使用 Ray。

Horovod

Horovod 是 TensorFlow、Keras 和 PyTorch 的分散式訓練架構。 Azure Databricks 支援使用 HorovodRunner 和 horovod.spark 套件的分散式深度學習訓練。 針對使用 Keras 或 PyTorch 的 horovod.sparkSpark ML 管線應用程式,您可以使用估算器 API

需求

Databricks Runtime ML。

使用 Horovod

下列文章提供使用 Horovod 的分散式深度學習的一般資訊,以及說明如何使用 HorovodRunner 和套件的 horovod.spark 範例筆記本。

安裝不同版本的 Horovod

若要從 ML 叢集中預安裝的版本升級或降級 Horovod,您必須遵循下列步驟重新編譯 Horovod:

  1. 卸載目前版本的 Horovod。
%pip uninstall -y horovod
  1. 如果使用 GPU 加速叢集,請安裝編譯 Horovod 所需的 CUDA 開發連結庫。 若要確保相容性,請將套件版本維持不變。
%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. 下載 Horovod 原始程式碼所需的版本,並使用適當的旗標進行編譯。 如果您不需要任何延伸模組(例如 HOROVOD_WITH_PYTORCH),您可以移除這些旗標。

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. 使用 %pip 指定上一個命令輸出中的 Python 滾輪路徑,以重新安裝 Horovod。 0.21.3 在這裡範例中會顯示 。
%pip install --no-cache-dir /databricks/driver/horovod/dist/horovod-0.21.3-cp38-cp38-linux_x86_64.whl

針對 Horovod 安裝進行疑難解答

問題:匯入 horovod.{torch|tensorflow} 引發 ImportError: Extension horovod.{torch|tensorflow} has not been built

解決方案:Horovod 已預安裝在 Databricks Runtime ML 上,因此更新環境時通常會發生此錯誤。 錯誤指出 Horovod 是在必要的連結庫之前安裝 (PyTorch 或 TensorFlow)。 由於 Horovod 會在安裝期間編譯, horovod.{torch|tensorflow} 因此如果 Horovod 安裝期間沒有這些套件,將不會進行編譯。 若要修正此問題,請遵循下列步驟:

  1. 確認您位於 Databricks Runtime ML 叢集上。
  2. 請確定已安裝 PyTorch 或 TensorFlow 套件。
  3. 卸載 Horovod (%pip uninstall -y horovod)。
  4. 安裝 cmake%pip install cmake)。
  5. 重新安裝 horovod