Dynamic Workload Scheduler(DWS)Flex Start モードを使用すると、Managed Service for Apache Spark バッチ ワークロード用の希少な GPU リソースの取得可能性を高めることができます。
概要
Dynamic Workload Scheduler は、希少なコンピューティング リソースをグローバルに管理する容量認識スケジューラです。Flex Start モードでは、リージョンでの在庫切れにより GPU をすぐに使用できない場合、Managed Service for Apache Spark は構成可能な期間、リクエストをキューに登録できます。
Flex Start は、Managed Service for Apache Spark Spark ランタイム バージョン 3.0+ に送信されたすべての GPU 対応ワークロードのデフォルトの動作です。リソースが使用できない場合、リクエストは在庫切れエラーで失敗するのではなく、キューに登録されます。容量が取得されると、DWS は実行が開始される前にクラスタ全体を「一度に」プロビジョニングします。詳細については、Dynamic Workload Scheduler の概要をご覧ください。
利点
- 可用性の向上: 一時的な GPU 容量不足によるジョブの失敗を大幅に削減します。
- アトミック プロビジョニング: クラスタ ワーカーを単一のユニットとしてプロビジョニングし、クラスタの完全性を確保して、ワーカーの一部のみが作成されるシナリオを防ぎます。
- デフォルトの信頼性: パラメータを手動で構成しなくても、リソースの取得が改善されます。
割り当て要件
DWS Flex Start を使用するには、プロジェクトに十分な割り当てが必要です。
- プリエンプティブル GPU 割り当て: DWS Flex Start は、標準プール(
PREEMPTIBLE_NVIDIA_L4_GPUSなど)ではなく、GPU 割り当てプールのプリエンプティブル バージョンを使用します。詳細については、Managed Service for Apache Spark のリソース割り当てをご覧ください。 - ローカル SSD 割り当て: GPU アクセラレータ マシンで
performanceストレージ クラスを使用する場合、Managed Service for Apache Spark は高速シャッフルと一時ストレージ用にローカル SSD をプロビジョニングします。プロジェクトには、ターゲット リージョンに十分なローカル SSD 割り当てが必要です。
構成
DWS Flex Start は、ランタイム バージョン 3.0 以降の GPU ワークロードでデフォルトで有効になっています。次の Spark プロパティを使用して、タイムアウトをカスタマイズしたり、この機能を無効にしたりできます。
| プロパティ | 説明 | 値 | デフォルト |
|---|---|---|---|
spark.dataproc.[driver|executor].provisioning.mode |
プロビジョニング モデルを指定します。DWS Flex Start(GPU のデフォルト)の場合は queue を使用し、DWS を無効にしてオンデマンド プロビジョニングを使用する場合は default を使用します。 |
queue、default |
queue(3.0+ の GPU の場合) |
spark.dataproc.[driver|executor].provisioning.allocationTimeout |
ノードプールが容量を求めてキューで待機する最大時間。デフォルトは 1 時間(3600s)、最大値は 2 時間(7200s)です。注: 値は「s」で終わる必要があります。 |
秒単位の期間(例: 1800s) |
3600s |
例: DWS Flex Start を使用した GPU バッチ ワークロード
次の例では、NVIDIA L4 GPU を使用して PySpark バッチジョブを送信します。DWS Flex Start がデフォルトで有効になっている場合、このコマンドはドライバとエグゼキュータの両方に 30 分(1800s)のキューイング タイムアウトを設定します。
gcloud dataproc batches submit pyspark \
gs://my-bucket/path/to/your-script.py \
--project="PROJECT_ID" \
--region="REGION" \
--version="3.0" \
--properties="spark.dataproc.driver.resource.accelerator.type=l4,\
spark.dataproc.driver.provisioning.allocationTimeout=1800s,\
spark.dataproc.executor.resource.accelerator.type=l4,\
spark.dataproc.executor.provisioning.allocationTimeout=1800s,\
spark.dataproc.executor.compute.tier=premium,\
spark.dataproc.executor.disk.tier=premium"