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"