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 スケジューリング

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

Databricks Runtime は、Apache Spark 3.0 からの GPU 対応スケジューリングをサポートしています。 Databricks GPU コンピュートにあらかじめ設定しています。

注:

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

ユーザー定義の GPU スケジューリングは、Databricks Runtime 7.1 以降でのみ使用できます。 以前のバージョンの Databricks Runtimeでは、ノードごとに最大 1 つのタスクが実行されるように、 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 ドライバーのバージョンは 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 ML ではなく、標準のランタイムバージョンを選択する必要があります。 Use your own (独自の Docker コンテナーを使用する)を選択すると、標準のランタイム バージョンで GPU コンピュートを選択できます。GPU のカスタム イメージは、GPU の Databricks Runtime ML とは異なる 公式の CUDA コンテナーに基づいています。

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以降にアップグレードすることで解決できます。