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 では、次の GPU アクセラレーション インスタンスの種類がサポートされています。

考慮 事項

すべての GPU アクセラレーションインスタンスタイプについて、以下の点に注意してください。

  • Amazon スポットインスタンスの価格高騰により、GPU スポットインスタンスの保持が困難になっています。 必要に応じてオンデマンドで使用します。

  • GPU 対応のコンピュートを作成するには、 制限の増加をリクエストする必要がある場合があります。

サポートされている GPU インスタンスタイプとその属性のリストについては 、「サポートされているインスタンスタイプ 」を参照してください。

GPU スケジューリング

Databricks Runtime は、Apache Spark 3.0 のGPU 対応スケジューリングをサポートします。 Databricks は GPU コンピュート上に事前構成します。

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

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

PySpark タスクの場合、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 タスク間の競合を回避するために、Databricks はノードごとに実行タスクが最大 1 つになるように GPU コンピュートを自動的に構成します。 こうすることで、タスクは他のタスクと競合することなく、ノード上のすべての GPU を使用できます。

NVIDIA GPU ドライバー、CUDA、および cuDNN

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

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

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

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

含まれている NVIDIA ドライバーのバージョンは 535.54.03 で、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 コンピュート上のDatabricks Container Services

プレビュー

この機能はパブリックプレビュー段階です。

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

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

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

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

エラーメッセージ

  • 次のエラーは、AWS クラウドプロバイダーに、リクエストされたコンピュートリソースに十分な容量がないことを示します。 Error: Cluster terminated. Reason: AWS Insufficient Instance Capacity Failure

    解決するには、別のアベイラビリティーゾーンでコンピュートの作成を試みることができます。 アベイラビリティ ゾーンは、コンピュート構成の詳細オプションにあります。 AWS リザーブドインスタンスの価格を確認して、追加のクォータを購入することもできます。

  • コンピュートが P4d または G5 インスタンス タイプと Databricks Runtime 7.3 LTS 機械学習を使用している場合、7.3 の CUDA パッケージ バージョンは新しい GPU インスタンスと互換性がありません。 そのような場合、TensorFlow Keras や PyTorch などの機械学習パッケージは次のようなエラーを生成します。

    • TensorFlow Keras: InternalError: CUDA runtime implicit initialization on GPU:x failed. Status: device kernel image is invalid

    • PyTorch の場合: UserWarning: NVIDIA A100-SXM4-40GB with CUDA capability sm_80 is not compatible with the current PyTorch installation.

    これらのエラーは、 Databricks Runtime 10.4 LTS ML以降にアップグレードすることで解決できます。