GPU-enabled clusters | Databricks on AWS [2023/1/31時点]の翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
注意
いくつかのGPU有効化インスタンスタイプはベータであり、クラスター作成時にドライバーやワーカータイプを選択する際、ドロップダウンにその旨を知らせるマークが表示されます。
概要
Databricksでは、graphics processing units (GPU)による高速化クラスターをサポートしています。本書では、どのようにGPU有効化クラスターを作成するのか、それらのインスタンスにインストールされているGPUドライバーとライブラリを説明します。
GPU有効化クラスターにおけるディープラーニングに関しては、Deep learningをご覧ください。
GPUクラスターの作成
GPUクラスターの作成は他のSparkクラスターの作成と同様です(Databricksクラスターをご覧ください)。以下に注意する必要があります。
- Databricks Runtime Versionは、**Runtime 9.1 LTS ML (GPU, Scala 2.12, Spark 3.1.2)**のようにGPU有効化バージョンである必要があります。
- Worker TypeとDriver TypeはGPUインスタンスタイプである必要があります。
- Sparkを必要としないシングルマシンのワークフローにおいては、ワーカー数をゼロに設定することができます。
Databrikcsでは以下のGPU高速化インスタンスタイプをサポートしています。
-
P2 instance type series: p2.xlarge, p2.8xlarge, p2.16xlarge
- P2インスタンスは特定のAWSリージョンでのみ使用できます。詳細については、Amazon EC2 Pricingをご覧ください。GPU有効化クラスターを起動するために、ご自身のDatabricksデプロイメントがサポートされているリージョンに存在している必要があります。
- P2インスタンスのオンデマンドのデフォルト制限数は1です。
- P2インスタンスではストレージのためのEBSが必要です。
-
P3 instance type series: p3.2xlarge, p3.8xlarge, p3.16xlarge
- P3インスタンスは特定のAWSリージョンでのみ使用できます。詳細については、Amazon EC2 Pricingをご覧ください。GPU有効化クラスターを起動するために、ご自身のDatabricksデプロイメントがサポートされているリージョンに存在している必要があります。
-
P4d instance type series: p4d.24xlarge
- P4dインスタンスではDatabricksランタイム9.1 LTS ML以降が必要です。
- プロダクションに機械学習モデルをデプロイすることに最適化されているG4 instance type series
- 画像を大量に使用する様々なユースケースや機械学習ユースケースで使用できるG5 instance type series
- G5インスタンスではDatabricksランタイム9.1 LTS ML以降が必要です。
すべてのGPU高速化インスタンスタイプでは、以下のことに留意してください。
- Amazonのスポットインスタンス価格の高騰によって、GPUスポットインスタンスを保持することは困難です。必要であればオンデマンドを使用してください。
- GPU有効化クラスターを作成するためには、制限の増加をリクエストする必要があるかもしれません。
サポートされているGPUインスタンスタイプとそれらの特性の一覧については、Supported Instance Typesをご覧ください。
GPUのスケジューリング
Databricksランタイムは、Apache Spark 3.0によるGPUアウェアスケジューリングをサポートしています。GPUクラスターでは事前に設定がなされています。
GPUスケジューリングはシングルノードクラスターでは有効化されていません。
spark.task.resource.gpu.amount
は、あなたによって変更する必要があるかもしれない唯一のGPUアウェアスケジューリングに関係するSpark設定です。デフォルト設定ではタスク当たり一つのGPUを使用し、すべてのGPUノードを使用している際、分散推論ワークロードや分散トレーニングでは理想的なものとなります。分散トレーニングの過程で生じる通信のオーバーヘッドを削減するために、ノードのサブセットで分散トレーニングを行う際、Spark設定でワーカーノードあたりのGPU数にspark.task.resource.gpu.amount
を設定することをお勧めしています。
PySparkタスクにおいては、Databricksは割り当てられたGPUにインデックス0,1,...を自動で再マッピングします。タスクあたり1つのGPUを使用するデフォルト設定では、どのGPUがタスクに割り当てられているのかをチェックすることなしに、シンプルにデフォルトGPUを使用します。たとえば4つなど、タスクに複数のGPUを割り当てると、お使いのコードは割り当てられたGPUのインデックスは常に0,1,2,3であると仮定します。割り当てられたGPUの物理的なインデックスを必要とするのであれば、環境変数CUDA_VISIBLE_DEVICES
から取得することができます。
Scalaを使用している場合、タスクに割り当てら得ているGPUのインデックスはTaskContext.resources().get("gpu")
で取得することができます。
Databricksランタイム7.0以前では、複数のSparkタスクが同じGPUを使用することによる競合を避けるために、Databricksはノードあたりの実行タスクの最大数が1になるようにGPUクラスターを設定します。これによって、他のタスクと競合することなしに、タスクはノードのすべてのGPUを使用することができます。
NVIDIA GPUドライバー、CUDA、cuDNN
Databricksでは、SparkドライバーとワーカーのインスタンスでGPUを使用するために必要なNVDIAドライバーとライブラリをインストールします。
-
/usr/local/cuda
にインストールされるCUDA Toolkit - cuDNN: NVIDIA CUDA Deep Neural Network Library
- NCCL: NVIDIA Collective Communications Library
インストールされるNVIDIAドライバーのバージョンは、CUDA 11.0をサポートする470.57.02です。
インストールされるライブラリのバージョンに関しては、使用しているDatabricksランタイムバージョンのrelease notesをご覧ください。
注意
このソフトウェアにはNVIDIA Corporationによって提供されるソースコードが含まれています。得に、GPUをサポートするためにDatabricksではCUDA Samplesのコードを含めています。
NVIDIAエンドユーザーライセンスアグリーメント(EULA)
DatabricksでGPU有効化「Databricksランタイムバージョン」を選択する際、暗黙的にCUDA、cuDNN、Teslaライブラリに関するNVIDIA EULAで説明されている利用条件、NCCLライブラリに関するNVIDIA End User License Agreement (with NCCL Supplement)に同意することになります。
GPUクラスターにおけるDatabricksコンテナサービス
プレビュー
本機能はパブリックプレビューです。
可搬性のあるディープラーニング環境とカスタマイズしたライブラリを作成するために、GPUクラスターでDatabricksコンテナサービスを使用することができます。手順については、Databricksコンテナサービスによるコンテナのカスタマイズをご覧ください。
GPUクラスター向けカスタムイメージを作成するには、GPU向けDatabricks機械学習ランタイムではなく、標準のランタイムバージョンを選択する必要があります。Use your own Docker containerを選択する際、標準ランタイムバージョンのGPUクラスターを選択することができます。GPUクラスターのカスタムイメージはofficial CUDA containersをベースとしており、これはGPU向けDatabricks機械学習ランタイムとは異なるものです。
GPUクラスターのカスタムイメージを作成する際、NVIDAドライバーのバージョンを変更することができません。これは、ホストマシンとドライバーバージョンが一致しなくてはならないためです。
databricksruntime
Docker Hubには、GPU機能を伴うサンプルベースイメージが含まれています。これらのイメージを生成するために使用されるDockerfileはexample containers GitHub repositoryに配置されており、提供されているサンプルイメージの詳細やカスタマイズ方法も含まれています。
エラーメッセージ
-
以下のエラーはAWSクラウドプロバイダーがリクエストされた計算資源を満たす十分なキャパシティがないことを意味します。
Error: Cluster terminated. Reason: AWS Insufficient Instance Capacity Failure
これを解決するには、別のアベイラビリティゾーンでクラスターを作成してみることができます。Advanced optionsの下のクラスター設定でアベイラビリティゾーンを設定することができます。追加のクォータを発注するためにAWS reserved instances pricingを確認いただくこともできます。
-
クラスターでP4dやG5インスタンスタイプとDatabricks Runtime 7.3 LTS MLを使用している場合、CUDAパッケージバージョン7.3は新しいGPUインスタンスタイプと互換性がありません。この場合、TensorFlow KerasやPyTorchのようなMLパッケージは以下のようなエラーを引き起こします。
- 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.
- TensorFlow Keras:
Databricks Runtime 10.4 LTS ML以降にアップグレードすることでこれらのエラーを解消することができます。