Horovod
重要
Horovod 和 HorovodRunner 现已弃用。 15.4 LTS ML 之后的版本不会预安装此包。 对于分布式深度学习,Databricks 建议使用 TorchDistributor 通过 PyTorch 进行分布式训练,或使用 tf.distribute.Strategy
API 通过 TensorFlow 进行分布式训练。
Horovod 是适用于 TensorFlow、Keras 和 PyTorch 的分布式训练框架。 Azure Databricks 支持使用 HorovodRunner 和 horovod.spark
包进行分布式深度学习训练。 对于使用 Keras 或 PyTorch 的 Spark ML 管道应用程序,可使用 horovod.spark
估算器 API。
要求
Databricks Runtime ML。
使用 Horovod
下面的文章提供了有关使用 Horovod 进行分布式深度学习的一般信息,以及演示如何使用 HorovodRunner 和 horovod.spark
包的示例笔记本。
安装其他版本的 Horovod
若要在 ML 群集中从预安装的版本进行升级或降级,必须执行以下步骤来重新编译 Horovod:
- 卸载 Horovod 的当前版本。
%pip uninstall -y horovod
- 如果使用 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
- 下载所需版本的 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
- 通过指定上一命令输出中的 Python wheel 路径,使用
%pip
重新安装 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 安装过程中没有这些包,系统不会编译 horovod.{torch|tensorflow}
。
要解决该问题,请执行以下步骤:
- 验证是否位于 Databricks Runtime ML 群集上。
- 确保已安装 PyTorch 或 TensorFlow 包。
- 卸载 Horovod (
%pip uninstall -y horovod
)。 - 安装
cmake
(%pip install cmake
)。 - 重新安装
horovod
。