分散トレーニング

可能であれば、Databricks では、1 台のマシンでニューラルネットワークをトレーニングすることをお勧めします。トレーニングと推論のための分散コードは、単一マシンのコードよりも複雑で、通信オーバーヘッドのために低速です。 ただし、モデルまたはデータが大きすぎて 1 台のコンピューターのメモリに収まらない場合は、分散トレーニングと推論を検討する必要があります。 これらのワークロードのために、Databricks Runtime 機械学習には、TorchDistributor、Horovod、およびスパークテンソルフローディストリビューターパッケージが含まれています。

Databricks では、pyspark.ml.connect モジュールを使用した Spark 機械学習モデルの分散トレーニングも提供されています ( Databricks Connect で PySpark.ml.connect を使用してトレーニングする Spark 機械学習モデルに関するページを参照してください。

ディープスピードディストリビューター

DeepSpeed ディストリビューターは TorchDistributor の上に構築されており、より高いコンピュート電力を必要とするが、メモリの制約によって制限されるモデルを持つお客様に推奨されるソリューションです。 DeepSpeed は、Microsoft によって開発されたオープンソース ライブラリであり、メモリ使用量の最適化、通信オーバーヘッドの削減、および高度なパイプライン並列処理を提供します。 DeepSpeed ディストリビューターを使用した分散トレーニングの詳細

トーチディストリビューター

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

スパークテンソルフローディストリビューター

spark-tensorflow-distributor は、Spark クラスター上の TensorFlow を使用した分散トレーニング用の TensorFlow のオープンソース ネイティブ パッケージです。 TensorFlow 2 を使用した分散トレーニングの詳細については、こちらを参照してください。

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

Horovod

Horovod は、TensorFlow、Keras、および PyTorch 用の分散トレーニングフレームワークです。 Databricks は、HorovodRunner と horovod.spark パッケージを使用した分散ディープラーニング トレーニングをサポートしています。 Keras または PyTorch を使用する Spark 機械学習パイプライン アプリケーションでは、 horovod.spark 推定器 API を使用できます。

要件

Databricks Runtime 機械学習.

Horovod を使用する

次の記事では、Horovod を使用した分散ディープラーニングに関する一般的な情報と、HorovodRunner と horovod.spark パッケージの使用方法を示すノートブックの例を提供します。

別のバージョンの Horovod をインストールする

機械学習クラスターにプレインストールされているバージョンから 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など) が必要ない場合は、これらのフラグを削除できます。

%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
%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 を再インストールするには、前のコマンドの出力から Python wheel パスを指定します。 この例では、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 機械学習にプリインストールされているため、通常、このエラーは環境の更新がうまくいかなかった場合に発生します。 このエラーは、Horovod が必要なライブラリ (PyTorch または TensorFlow ) の前にインストールされたことを示します。 Horovod はインストール中にコンパイルされるため、Horovod のインストール中にこれらのパッケージが存在しない場合、 horovod.{torch|tensorflow} はコンパイルされません。 この問題を解決するには、次のステップに従います。

  1. Databricks Runtime 機械学習クラスターを使用していることを確認します。

  2. PyTorch または TensorFlow パッケージが既にインストールされていることを確認します。

  3. Horovod (%pip uninstall -y horovod) をアンインストールします。

  4. cmake (%pip install cmake) をインストールします。

  5. horovodを再インストールします。