동적 워크로드 스케줄러 (DWS) Flex Start 모드를 사용하여 Managed Service for Apache Spark 일괄 워크로드의 부족한 GPU 리소스 가용성을 개선할 수 있습니다.
개요
동적 워크로드 스케줄러는 전역적으로 부족한 컴퓨팅 리소스를 관리하는 용량 인식 스케줄러입니다. 유연한 시작 모드에서 Managed Service for Apache Spark는 리전 재고 부족으로 인해 GPU를 즉시 사용할 수 없는 경우 구성 가능한 기간 동안 요청을 대기열에 추가할 수 있습니다.
유연한 시작은 Managed Service for Apache Spark Spark 런타임 버전 3.0 이상에 제출된 모든 GPU 지원 워크로드의 기본 동작입니다. 리소스를 사용할 수 없는 경우 품절 오류로 실패하는 대신 요청이 대기열에 추가됩니다. 용량이 확보되면 DWS는 실행이 시작되기 전에 전체 클러스터를 '한 번에' 프로비저닝합니다. 자세한 내용은 동적 워크로드 스케줄러 소개를 참고하세요.
이점
- 가용성 향상: 일시적인 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 할당량이 충분해야 합니다.
구성
런타임 버전 3.0 이상에서는 GPU 워크로드에 DWS 유연한 시작이 기본적으로 사용 설정됩니다. 다음 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"