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 は、標準プールではなく、GPU 割り当てプールのプリエンプティブル
バージョン(たとえば、
PREEMPTIBLE_NVIDIA_L4_GPUS)を使用します。詳細については、 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"