GPU 対応コンピュート

注:

一部の GPU 対応インスタンス タイプはベータ版であり、コンピュートの作成中にドライバーとワーカー タイプを選択するときにドロップダウン リストでそのようにマークされます。

概要

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

GPU 対応コンピュートのディープラーニングの詳細については、 ディープラーニングを参照してください。

GPUコンピュートを作成する

GPU コンピュートの作成は、他のコンピュートの作成と似ています。 次の点に注意してください。

  • Databricks Runtimeバージョンは、Runtime 13.3 LTS 機械学習 (GPU、Scala 2.12.15、Spark 3.4.1) などの GPU 対応バージョンである必要があります。

  • ワーカータイプドライバータイプ は GPU インスタンスタイプである必要があります。

サポートされているインスタンスタイプ

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

  • A2マシンファミリ:a2-highgpu-1g、a2-highgpu-2g、a2-highgpu-4g、a2-highgpu-8g、a2-megagpu-16g

これらのインスタンス タイプの詳細については、 GCP アクセラレータに最適化されたマシンを参照してください。また、これらのインスタンスが利用できる場所を確認するには、 GCP リージョンを参照してください。 GPU 対応のコンピュートを起動するには、Databricks デプロイメントがサポートされているリージョンに存在する必要があります。

GPU スケジューリング

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

Databricks Runtime 9.1 LTS ML 以降では、Apache Spark 3.0 からの GPU 対応スケジューリングがサポートされています。 Databricks はそれをGPUコンピュートに事前設定します。

注:

GPU スケジューリングは、シングルノード コンピュートでは有効になっていません。

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

spark.task.resource.gpu.amount は、構成する必要がある可能性がある GPU 対応スケジューリングに関連する唯一の Spark 構成です。 デフォルトの構成では、タスクごとに 1 つの GPU が使用されるため、分散推論ワークロードと、すべての GPU ノードを使用する場合の分散トレーニングに適したベースラインです。

分散トレーニング時の通信オーバーヘッドを減らすために、Databricksコンピュート Spark構成でワーカーノードあたりのGPU数にspark.task.resource.gpu.amountを設定することをおすすめします。これにより、Spark ワーカーごとに Spark タスクが 1 つだけ作成され、そのワーカー ノード内のすべての 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 タスクの場合、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

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

  • CUDA Toolkit は、 /usr/local/cuda.

  • cuDNN: NVIDIA CUDA Deep ニューラルネットワーク ライブラリ。

  • NCCL: NVIDIA Collective Communications ライブラリ。

含まれている NVIDIA ドライバーのバージョンは 525.105.17 で、CUDA 11.0 をサポートしています。

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

注:

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

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

Databricks で GPU 対応の "Databricks Runtime バージョン" を選択すると、CUDA、cuDNN、Tesla ライブラリに関する NVIDIA EULA と、NCCL ライブラリに関する NVIDIA エンド ユーザー ライセンス契約 (NCCL 補足条項を含む) に概説されている使用条件に暗黙的に同意したことになります。

制限事項

  • ノートブックからジョブをスケジュールする場合、新しい GPU コンピュートを作成することはできません。 既存の GPU コンピュート上でジョブを実行できるのは、ジョブが新しいコンピュート UIで作成された場合のみです。

  • Databricks on Google Cloudでは、nvidia-smi などの一般的に使用される NVIDIA 実行可能ファイルは、PATH 環境変数に含まれていません。代わりに、彼らは /usr/local/nvidia/binにあります。 たとえば、 nvidia-smi を使用するには、 Web ターミナル または %sh ノートブックのマジック コマンドを使用して /usr/local/nvidia/bin/nvidia-smiを実行する必要があります。

  • Ganglia を使用したコンピュート メトリクスのモニタリングはDatabricks on Google Cloudではサポートされていません。