分散トレーニング

可能であれば、Azure Databricks では、単一マシンでニューラル ネットワークをトレーニングすることを推奨しています。トレーニングと推論のための分散コードは単一マシン コードよりも複雑で、通信オーバーヘッドのため低速になります。 ただし、モデルまたはデータが大きすぎて単一マシンのメモリに収まらない場合は、分散型のトレーニングと推論を検討する必要があります。 これらのワークロードに対して、Databricks Runtime ML には、TorchDistributor、Horovod、spark-tensorflow-distributor パッケージが含まれています。

Azure Databricks からはまた、pyspark.ml.connect モジュールで Spark ML モデルの分散トレーニングが提供されます。「pyspark.ml.connect を使用して Databricks Connect で Spark ML モデルをトレーニングする」を参照してください。

Note

Databricks では、ノード間のネットワーク パフォーマンスが低いため、NC シリーズ VM を使用してマルチノード分散トレーニングを実行することを推奨していません。 代わりに、1 つのマルチ GPU ノードを使用するか、高速ネットワークをサポートする NCasT4_v3 シリーズなどの別の GPU VM サイズを使用してください。

DeepSpeed ディストリビューター

DeepSpeed ディストリビューターは TorchDistributor をベースに構築されており、高い計算処理能力を必要とするが、メモリに制約されるモデルをご利用のお客様にお勧めのソリューションです。 DeepSpeed は、Microsoft によって開発されたオープンソース ライブラリであり、メモリ使用の最適化、通信オーバーヘッドの削減、高度なパイプライン並列処理といった仕様になっています。 DeepSpeed を使用した分散トレーニングの詳細を確認してください。

TorchDistributor

TorchDistributor は、ユーザーが自分の Spark クラスターで PyTorch を使用して分散トレーニングを行うのに役立つ PySpark のオープンソース モジュールであるため、Spark ジョブとして PyTorch トレーニング ジョブを起動できます。 その内部では、ワーカー間の環境と通信チャネルが初期化され、CLI コマンド torch.distributed.run を使用してワーカー ノード間で分散トレーニングが実行されます。 TorchDistributor を使用した分散トレーニングの詳細を確認してください。

spark-tensorflow-distributor

spark-tensorflow-distributor は、TensorFlow のオープンソースのネイティブ パッケージであり、Spark クラスターで TensorFlow を使って分散トレーニングを行うことができます。 TensorFlow 2 を使用した分散トレーニングの詳細を確認してください。

Ray

Ray は、ML ワークフローと AI アプリケーションのスケーリングを行うための並列コンピューティング処理に特化したオープンソースのフレームワークです。 「Azure Databricks で Ray を使用する」を参照してください。

Horovod

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 を再コンパイルする必要があります。

  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 を使用し、前のコマンドの出力からホイール パスを指定して 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 にプレインストールされているため、このエラーは通常、環境の更新に問題が生じた場合に発生します。 このエラーは、必要なライブラリ (PyTorch または TensorFlow) の前に、Horovod がインストールされたことを示しています。 Horovod はインストール時にコンパイルされるため、Horovod のインストール中にこれらのパッケージが存在しない場合、horovod.{torch|tensorflow} はコンパイルされません。 この問題を修正するには、次の手順に従ってください。

  1. Databricks Runtime ML クラスターを使用していることを確認します。
  2. PyTorch または TensorFlow パッケージが既にインストールされていることを確認します。
  3. Horovod をアンインストールします (%pip uninstall -y horovod)。
  4. cmake をインストールします (%pip install cmake)。
  5. horovod を再インストールします。