GPU 対応コンピューティング

Note

一部の GPU 対応インスタンスの種類はベータであり、コンピューティングの作成時にドライバーとワーカーの種類を選択するときに、ドロップダウン リストに表示されます。

概要

Azure Databricks は、グラフィックス処理装置 (GPU) を使用したコンピューティングの高速化をサポートしています。 この記事では、GPU 対応インスタンスを使用してコンピューティングを作成する方法と、それらのインスタンスにインストールされている GPU ドライバーとライブラリについて説明します。

GPU 対応コンピューティングのディープ ラーニングの詳細については、「ディープ ラーニング」をご覧ください。

GPU コンピューティングの作成

GPU コンピューティングの作成は、Spark コンピューティングの作成と似ています。 次の制限があることに留意する必要があります。

  • Databricks Runtime バージョンは、Runtime 13.3 LTS ML (GPU、Scala 2.12.15、Spark 3.4.1) などの GPU 対応バージョンである必要があります。
  • ワーカーの種類ドライバーの種類は、GPU インスタンスの種類である必要があります。
  • Spark を使用しない単一コンピューターのワークフローの場合、ワーカーの数を 0 に設定できます。

サポートされているインスタンスの種類

Azure Databricks では、次のインスタンスの種類がサポートされます。

サポートされている GPU インスタンスの種類とその可用性リージョンの最新の一覧については、Azure Databricks の価格を参照してください。 GPU 対応コンピューティングを起動するには、Azure Databricks デプロイがサポートされているリージョンに存在している必要があります。

GPU のスケジューリング

Databricks Runtime は、Apache Spark 3.0 の GPU 対応スケジューリングをサポートしています。 これは、Azure Databricks によって GPU コンピューティング上に事前構成されます。

GPU スケジューリングは、単一ノード コンピューティングでは有効になっていません。

spark.task.resource.gpu.amount は、変更が必要になる可能性のある GPU 対応スケジューリングに関連する唯一の Spark 構成です。 既定の構成では、タスクごとに 1 つの GPU を使用します。これは、すべての GPU ノードを使用する場合に、分散推論ワークロードと分散トレーニングに最適です。 分散トレーニング中の通信オーバーヘッドを削減するために、ノードのサブセットで分散トレーニングを行うには、Databricks では、コンピューティング Spark 構成spark.task.resource.gpu.amount をワーカー ノードあたりの GPU の数に設定することをお勧めします。

PySpark タスクの場合、Azure Databricks は、割り当てられている GPU をインデックス 0、1、... に自動的に再マップします。 タスクごとに 1 つの GPU を使用する既定の構成では、コードは、タスクに割り当てられている GPU を確認することなく、単に既定の GPU を使用できます。 タスクごとに複数の GPU を設定した場合 (4 つなど)、コードでは、割り当てられた GPU のインデックスは常に 0、1、2、3 であると想定できます。 割り当てられた GPU の物理インデックスが必要な場合は、CUDA_VISIBLE_DEVICES 環境変数から取得できます。

Scala を使用すると、タスクに割り当てられている GPU のインデックスを TaskContext.resources().get("gpu") から取得できます。

7.0 より前の Databricks Runtime リリースでは、同じ GPU を使用しようとして複数の Spark タスクが競合することを避けるため、Azure Databricks では、ノードごとに実行中のタスクが 1 つだけになるように GPU コンピューティングが自動的に構成されます。 このようにすることで、タスクでは、他のタスクとの競合を回避して、ノード上のすべての GPU を使用できます。

NVIDIA GPU ドライバー、CUDA、cuDNN

Azure Databricks は、Spark ドライバーとワーカー インスタンスで GPU を使用するために必要な次の NVIDIA ドライバーとライブラリをインストールします。

  • CUDA Toolkit/usr/local/cuda にインストールされます。
  • cuDNN: NVIDIA CUDA Deep Neural Network Library。
  • NCCL: NVIDIA Collective Communications Library。

含まれている NVIDIA ドライバーのバージョンは 535.54.03 で、CUDA 11.0 がサポートされています。 NV A10 v5 インスタンスの種類シリーズ の場合、含まれる NVIDIA ドライバーのバージョンは 525.105.17 です。

含まれているライブラリのバージョンについては、使用している特定の Databricks Runtime バージョンのリリース ノートを参照してください。

注意

このソフトウェアには、NVIDIA Corporation によって提供されるソース コードが含まれています。 具体的には、GPU をサポートするために、Azure Databricks には、CUDA サンプルからのコードが含まれています。

NVIDIA エンド ユーザー ライセンス契約 (EULA)

Azure Databricks で GPU 対応の "Databricks Runtime バージョン" を選択した場合、CUDA、cuDNN、Tesla ライブラリに関する NVIDIA EULA に記載されている利用規約と、NCCL ライブラリの NVIDIA 使用許諾契約書 (NCCL の補助情報を含む) に対して暗黙的に同意するものとします。

GPU コンピューティング上の Databricks コンテナー サービス

重要

この機能はパブリック プレビュー段階にあります。

GPU を搭載したコンピューティングで Databricks Container Services を使用して、カスタマイズされたライブラリを備えたポータブル ディープ ラーニング環境を作成できます。 詳細については、「Databricks コンテナー サービスを使用してコンテナーをカスタマイズする」を参照してください。

GPU コンピューティング用のカスタムイメージを作成するには、GPU 向けの Databricks Runtime ML ではなく、標準ランタイム バージョンを選択する必要があります。 [独自の Docker コンテナーを使用する] を選択すると、標準ランタイム バージョンの GPU コンピューティングを選択できます。 GPU コンピューティング用のカスタム イメージは、公式の CUDA コンテナーに基づいています。これは、GPU 向けの Databricks Runtime ML とは異なります。

GPU コンピューティング用のカスタム イメージを作成する場合、NVIDIA ドライバーのバージョンを変更することはできません。これは、ホスト コンピューター上のドライバーのバージョンと一致する必要があるためです。

databricksruntimeDocker Hub には、GPU 機能を備えた基本イメージの例が含まれています。 これらのイメージを生成するために使用される Dockerfiles は、サンプルのコンテナー GitHub リポジトリに配置されています。これには、例のイメージが提供する内容とカスタマイズ方法についての詳細も含まれています。