次の方法で共有


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

Note

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

概要

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

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

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

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

  • Databricks Runtime バージョンは、Runtime 13.3 LTS ML (GPU、Scala 2.12.15、Spark 3.4.1) などの GPU 対応バージョンである必要があります。
  • ワーカーの種類ドライバーの種類は、GPU インスタンスの種類である必要があります。

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

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

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

GPU のスケジューリング

GPU スケジューリングでは、Spark タスクが多数の GPU に効率的に分散されます。

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

Note

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

ユーザー定義 GPU スケジューリングは、Databricks Runtime 7.1 以降でのみ使用できます。 Databricks Runtime の以前のバージョンでは、Databricks は GPU コンピューティングを自動的に構成し、ノードごとに実行中のタスクが 1 つだけになるようにします。 これにより、タスクはノード上のすべての GPU を他のタスクと競合することなく使用できます。

AI と ML の GPU スケジューリング

spark.task.resource.gpu.amount は、構成が必要になる可能性のある GPU 対応スケジューリングに関連する唯一の Spark 構成です。 既定の構成では、タスクごとに 1 つの GPU が割り当てられます。これは、すべての GPU ノードを使用する場合に、分散推論ワークロードと分散トレーニングの最適な基準となります。

分散トレーニング中の通信オーバーヘッドを削減するために、Databricks では、コンピューティング Spark 構成spark.task.resource.gpu.amount をワーカー ノードあたりの GPU の数に設定することをお勧めします。 これにより、Spark ワーカーごとに 1 つの Spark タスクのみが作成され、そのワーカー ノード内のすべての GPU が同じタスクに割り当てられます。

分散ディープ ラーニング推論の並列化を高めるには、 spark.task.resource.gpu.amount を 1/2、1/3、1/4 などの分数値に設定できます。 1/N これにより、GPU よりも多くの Spark タスクが作成され、推論要求を並列で処理できる同時実行タスクが増加します。 たとえば、 spark.task.resource.gpu.amount0.50.33、または 0.25 に設定すると、使用可能な GPU は、タスクの数が 2 倍、3 倍、または 4倍にした数で分割して使われます。

GPU インデックス

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

Scala を使用すると、タスクに割り当てられている GPU のインデックスを TaskContext.resources().get("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 ドライバーのバージョンは 535.154.05 です。

含まれているライブラリのバージョンについては、使用している特定の 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 ドライバーのバージョンを変更することはできません。これは、ホスト コンピューター上のドライバーのバージョンと一致する必要があるためです。

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