分散トレーニングDistributed training

可能であれば、Azure Databricks では、単一マシンでニューラル ネットワークをトレーニングすることを推奨しています。トレーニングと推論のための分散コードは単一マシン コードよりも複雑で、通信オーバーヘッドのため低速になります。When possible, Azure Databricks recommends that you train neural networks on a single machine; distributed code for training and inference is more complex than single-machine code and slower due to communication overhead. ただし、モデルまたはデータが大きすぎて単一マシンのメモリに収まらない場合は、分散型のトレーニングと推論を検討する必要があります。However, you should consider distributed training and inference if your model or your data are too large to fit in memory on a single machine. これらのワークロードに対して、Databricks Runtime ML には Horovod および spark-tensorflow-distributor パッケージが含まれています。For these workloads, Databricks Runtime ML includes the Horovod and spark-tensorflow-distributor packages.

注意

高速ネットワークは、Azure Databricks でサポートされている GPU VM では使用できません。Accelerated networking is not available on the GPU VMs supported by Azure Databricks. したがって、複数 ノードの GPU クラスターで分散型ディープ ラーニング トレーニングを実行することはお勧めしません。Therefore we do not recommend running distributed deep learning training on a multiple node GPU cluster. 分散型ディープ ラーニング トレーニングには、単一のマルチ GPU ノード、または複数ノードの CPU クラスターを使用できます。You can use a single multi-GPU node or a multiple node CPU cluster for distributed deep learning training.

HorovodHorovod

Horovod は、TensorFlow、Keras、および PyTorch 向けの分散トレーニング フレームワークです。Horovod is a distributed training framework for TensorFlow, Keras, and PyTorch. Azure Databricks では、HorovodRunner および horovod.spark パッケージを使用した分散型ディープ ラーニング トレーニングをサポートしています。Azure Databricks supports distributed deep learning training using HorovodRunner and the horovod.spark package. Keras または PyTorch を使用する Spark ML パイプライン アプリケーションの場合は、horovod.spark estimator API を使用できます。For Spark ML pipeline applications using Keras or PyTorch, you can use the horovod.spark estimator API.

必要条件Requirements

Databricks Runtime ML。Databricks Runtime ML.

Horovod を使用するUse Horovod

次の記事では、Horovod を使用した分散型ディープ ラーニングに関する一般的な情報と、HorovodRunner と horovod.spark パッケージの使用方法を示すサンプル ノートブックについて説明しています。The following articles provide general information about distributed deep learning with Horovod and example notebooks illustrating how to use HorovodRunner and the horovod.spark package.

別のバージョンの Horovod をインストールするInstall a different version of Horovod

ML クラスターにプレインストールされているバージョンから Horovod をアップグレードまたはダウングレードするには、これらの手順に従って Horovod を再コンパイルする必要があります。To upgrade or downgrade Horovod from the pre-installed version in your ML cluster, you must recompile Horovod by following these steps:

  1. 現在のバージョンの Horovod をアンインストールします。Uninstall the current version of Horovod.
%pip uninstall -y horovod
  1. Databricks Runtime 8.1 ML 以降で GPU 高速化クラスターを使用する場合は、Horovod をコンパイルするために必要な CUDA 開発ライブラリをインストールします。If using a GPU-accelerated cluster on Databricks Runtime 8.1 ML or above, install CUDA development libraries required to compile Horovod. 互換性を確保するため、パッケージのバージョンは変更しないでください。To ensure compatibility, leave the package versions unchanged.
%sh
wget[https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin](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](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/](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](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.7.8-1+cuda11.0 libcusparse-dev-11-0=11.1.1.245-1
  1. 目的のバージョンの Horovod のソース コードをダウンロードし、適切なフラグを指定してコンパイルします。Download the desired version of Horovod’s source code and compile with the appropriate flags. 拡張機能 (HOROVOD_WITH_PYTORCH など) が不要な場合は、これらのフラグを削除できます。If you don’t need any of the extensions (such as HOROVOD_WITH_PYTORCH), you can remove those flags.

CPUCpu

%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 \
sudo /databricks/conda/envs/databricks-ml/bin/python setup.py bdist_wheel
readlink -f dist/horovod-*.whl

GPUGpu

%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 \
sudo /databricks/conda/envs/databricks-ml-gpu/bin/python setup.py bdist_wheel
readlink -f dist/horovod-*.whl
  1. %pip を使用し、前のコマンドの出力からホイール パスを指定して Horovod を再インストールします。Use %pip to reinstall Horovod by specifying the wheel path from the previous command’s output. この例では 0.21.3 が示されています。0.21.3 is shown in this example.
%pip install –no-cache-dir /databricks/driver/horovod/dist/horovod-0.21.3-cp38-cp38-linux_x86_64.whl

Horovod のインストールに関するトラブルシューティングTroubleshoot Horovod installation

問題点:horovod.{torch|tensorflow} のインポートで ImportError: Extension horovod.{torch|tensorflow} has not been built が発生するProblem: Importing horovod.{torch|tensorflow} raises ImportError: Extension horovod.{torch|tensorflow} has not been built

解決策:Horovod は Databricks Runtime ML にプレインストールされているため、このエラーは通常、環境の更新に問題が生じた場合に発生します。Solution: Horovod comes pre-installed on Databricks Runtime ML, so this error typically occurs if updating an environment goes wrong. このエラーは、必要なライブラリ (PyTorch または TensorFlow) の前に、Horovod がインストールされたことを示しています。The error indicates that Horovod was installed before a required library (PyTorch or TensorFlow). Horovod はインストール時にコンパイルされるため、Horovod のインストール中にこれらのパッケージが存在しない場合、horovod.{torch|tensorflow} はコンパイルされません。Since Horovod is compiled during installation, horovod.{torch|tensorflow} will not get compiled if those packages aren’t present during the installation of Horovod. この問題を修正するには、次の手順に従ってください。To fix the issue, follow these steps:

  1. Databricks Runtime ML クラスターを使用していることを確認します。Verify that you are on a Databricks Runtime ML cluster.
  2. PyTorch または TensorFlow パッケージが既にインストールされていることを確認します。Ensure that the PyTorch or TensorFlow package is already installed.
  3. Horovod をアンインストールします (%pip uninstall -y horovod)。Uninstall Horovod (%pip uninstall -y horovod).
  4. cmake をインストールします (%pip install cmake)。Install cmake (%pip install cmake).
  5. horovodを再インストールします。Reinstall horovod.

HorovodEstimatorHorovodEstimator

Databricks Runtime ML 6.6 以下では、HorovodEstimator がサポートされています。これは、HorovodRunner に似ていますが、ユーザーは、TensorFlow Estimator および Apache Spark ML パイプライン の API に制限されます。Databricks Runtime ML 6.6 and below support HorovodEstimator, which is similar to HorovodRunner but constrains you to TensorFlow Estimators and Apache Spark ML Pipeline APIs.

spark-tensorflow-distributorspark-tensorflow-distributor

spark-tensorflow-distributor は、TensorFlow のオープンソースのネイティブ パッケージであり、Spark クラスターで TensorFlow を使って分散トレーニングを行うことができます。spark-tensorflow-distributor is an open-source native package in TensorFlow for distributed training with TensorFlow on Spark clusters.