다음과 같은 결과를 얻기 위해 Dataproc Serverless 일괄 워크로드에 GPU 가속기를 연결할 수 있습니다.
대규모 데이터 분석 워크로드 처리를 가속화합니다.
GPU 머신러닝 라이브러리를 사용하여 대규모 데이터 세트에서 모델 학습을 가속화합니다.
동영상 또는 자연어 처리와 같은 고급 데이터 분석을 수행합니다.
모든 지원되는 Dataproc Serverless Spark 런타임은 각 워크로드 노드에 Spark RAPIDS 라이브러리를 추가합니다. Dataproc Serverless 런타임 버전 1.1도 워크로드 노드에 XGBoost 라이브러리를 추가합니다. 이러한 라이브러리는 GPU 가속 워크로드에 사용할 수 있는 강력한 데이터 변환 및 머신러닝 도구를 제공합니다.
GPU 이점
Dataproc Serverless Spark 워크로드에 GPU를 사용할 때의 이점은 다음과 같습니다.
성능 개선: GPU 가속은 특히 머신러닝과 딥 러닝, 그래프 처리, 복합 분석과 같은 컴퓨팅 집약적인 태스크에서 Spark 워크로드 성능을 크게 향상시켜 줍니다.
빠른 모델 학습: 머신러닝 태스크에서 GPU를 연결하면 모델 학습에 필요한 시간을 크게 줄여주고 데이터 과학자 및 엔지니어가 반복 처리 및 실험을 빠르게 수행할 수 있게 도와줍니다.
확장성: 고객이 점점 더 복잡해지는 처리 요구를 해결하기 위해 더 많은 GPU 노드 또는 더 강력한 GPU를 추가할 수 있습니다.
비용 효율성: GPU는 초기 투자가 필요하지만 처리 시간 감소 및 보다 효율적인 리소스 활용률 덕분에 시간 경과에 따라 비용 절감 효과를 얻을 수 있습니다.
향상된 데이터 분석: GPU 가속을 통해 대규모 데이터 세트에서 이미지 및 비디오 분석, 자연어 처리 등의 고급 분석을 수행할 수 있습니다.
향상된 제품: 더 빠른 처리를 통해 의사 결정을 더 빠르게 수행하고 보다 응답성이 뛰어난 애플리케이션을 지원할 수 있습니다.
제한사항 및 고려사항
Dataproc Serverless 일괄 워크로드에는 NVIDIA A100 또는 NVIDIA L4 GPU를 연결할 수 있습니다. A100 및 L4 가속기는 Compute Engine GPU 지역 가용성에 따라 제공됩니다.
XGBoost 라이브러리는 Dataproc Serverless Spark 런타임 버전 1.x를 사용할 때 Dataproc Serverless GPU로 가속화된 워크로드에만 제공됩니다.
XGBoost를 사용한 Dataproc Serverless GPU로 가속화된 일괄 워크로드에는 향상된 Compute Engine 할당량이 활용됩니다. 예를 들어 NVIDIA L4 GPU를 사용하는 서버리스 일괄 워크로드를 실행하려면 NVIDIA_L4_GPUS 할당량을 할당해야 합니다.
가속기가 사용 설정된 작업은
constraints/compute.requireShieldedVm
조직 정책과 호환되지 않습니다. 조직에서 이 정책을 적용하면 가속기가 사용 설정된 작업이 성공적으로 실행되지 않습니다.2.2
버전 이전에 지원되는 Dataproc Serverless 런타임으로 RAPIDS GPU 가속을 사용할 때는 기본 문자 집합을 UTF-8로 설정해야 합니다. 자세한 내용은 GPU 가속기로 서버리스 일괄 워크로드 만들기를 참조하세요.
가격 책정
가속기 가격 책정 정보는 Dataproc Serverless 가격 책정을 참조하세요.
시작하기 전에
GPU 가속기가 연결된 서버리스 일괄 워크로드를 만들려면 먼저 다음을 수행합니다.
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Dataproc, Compute Engine, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Dataproc, Compute Engine, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Google Cloud Console에서 Cloud Storage 버킷 페이지로 이동합니다.
- 버킷 만들기를 클릭합니다.
- 버킷 만들기 페이지에서 버킷 정보를 입력합니다. 다음 단계로 이동하려면 계속을 클릭합니다.
- 버킷 이름 지정에서 버킷 이름 지정 요구사항을 충족하는 이름을 입력합니다.
-
데이터를 저장할 위치 선택에서 다음을 수행합니다.
- 위치 유형 옵션을 선택합니다.
- 위치 옵션을 선택합니다.
- 데이터의 기본 스토리지 클래스 선택에서 스토리지 클래스를 선택합니다.
- 객체 액세스를 제어하는 방식 선택에서 액세스 제어 옵션을 선택합니다.
- 고급 설정(선택사항)에서 암호화 방법, 보관 정책 또는 버킷 라벨을 지정합니다.
- 만들기를 클릭합니다.
GPU 가속기로 서버리스 일괄 워크로드 만들기
동시 로드된 PySpark 태스크를 실행하기 위해 NVIDIA L4 GPU를 사용하는 Dataproc Serverless 일괄 워크로드를 제출합니다. 다음 안내에 따라 gcloud CLI를 사용합니다.
펼치기를 클릭한 후 텍스트 또는 코드 편집기를 사용해서 나열된 PySpark 코드를 만들고 로컬 머신에
test-py-spark-gpu.py
파일로 저장합니다.#!/usr/bin/env python """S8s Accelerators Example.""" import subprocess from typing import Any from pyspark.sql import SparkSession from pyspark.sql.functions import col from pyspark.sql.types import IntegerType from pyspark.sql.types import StructField from pyspark.sql.types import StructType spark = SparkSession.builder.appName("joindemo").getOrCreate() def get_num_gpus(_: Any) -> int: """Returns the number of GPUs.""" p_nvidia_smi = subprocess.Popen( ["nvidia-smi", "-L"], stdin=None, stdout=subprocess.PIPE ) p_wc = subprocess.Popen( ["wc", "-l"], stdin=p_nvidia_smi.stdout, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True, ) [out, _] = p_wc.communicate() return int(out) num_workers = 5 result = ( spark.sparkContext.range(0, num_workers, 1, num_workers) .map(get_num_gpus) .collect() ) num_gpus = sum(result) print(f"Total accelerators: {num_gpus}") # Run the join example schema = StructType([StructField("value", IntegerType(), True)]) df = ( spark.sparkContext.parallelize(range(1, 10000001), 6) .map(lambda x: (x,)) .toDF(schema) ) df2 = ( spark.sparkContext.parallelize(range(1, 10000001), 6) .map(lambda x: (x,)) .toDF(schema) ) joined_df = ( df.select(col("value").alias("a")) .join(df2.select(col("value").alias("b")), col("a") == col("b")) .explain() )
로컬 머신에서 gcloud CLI를 사용하여 각 작업자가 L4 GPU로 가속화된 5개의 작업자를 사용해서 Dataproc Serverless 서버리스 일괄 작업을 제출합니다.
gcloud dataproc batches submit pyspark test-py-spark-gpu.py \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=BUCKET_NAME \ --version=1.1 \ --properties=spark.dataproc.executor.compute.tier=premium,spark.dataproc.executor.disk.tier=premium,spark.dataproc.executor.resource.accelerator.type=l4,spark.executor.instances=5,spark.dataproc.driverEnv.LANG=C.UTF-8,spark.executorEnv.LANG=C.UTF-8,spark.shuffle.manager=com.nvidia.spark.rapids.RapidsShuffleManager
참고:
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
- REGION: 워크로드를 실행하는 데 사용할 수 있는 Compute Engine 리전입니다.
- BUCKET_NAME: Cloud Storage 버킷 이름입니다. Spark는 일괄 워크로드를 실행하기 전에 이 버킷의
/dependencies
폴더에 워크로드 종속 항목을 업로드합니다. - --version: 모든 지원되는 Dataproc Serverless 런타임은 GPU 가속 워크로드의 각 노드에 RAPIDS 라이브러리를 추가합니다. 현재 런타임 버전 1.1만 GPU 가속 워크로드의 각 노드에 XGBoost 라이브러리를 추가합니다.
--properties(Spark 리소스 할당 속성 참조):
spark.dataproc.driverEnv.LANG=C.UTF-8
및spark.executorEnv.LANG=C.UTF-8
(2.2
이전의 런타임 버전에서 필요): 이러한 속성은 기본 문자 집합을 C.UTF-8로 설정합니다.spark.dataproc.executor.compute.tier=premium
(필수): GPU로 가속화된 워크로드는 프리미엄 데이터 컴퓨팅 단위(DCU)를 사용해서 비용이 청구됩니다. 서버리스 Dataproc 가속기 가격 책정을 참조하세요.spark.dataproc.executor.disk.tier=premium
(필수): A100-40, A100-80, L4 가속기가 있는 노드는 프리미엄 디스크 등급을 사용해야 합니다.spark.dataproc.executor.resource.accelerator.type=l4
(필수): GPU 유형을 하나만 지정해야 합니다. 예시 작업에서는 L4 GPU를 선택합니다. 다음 인수 이름을 사용해서 다음과 같은 가속기 유형을 지정할 수 있습니다.GPU 유형 인수 이름 A100 40GB a100-40
A100 80GB a100-80
spark.executor.instances=5
(필수): 최소 2 이상이어야 합니다. 이 예시에서는 5로 설정합니다.spark.executor.cores
(선택사항): 이 속성을 설정해서 코어 vCPU 수를 지정할 수 있습니다. L4 GPU에 유효한 값은 기본값인4
또는8
,12
,16
입니다. A100 GPU의 유효한 기본값은12
입니다.spark.dataproc.executor.disk.size
(필수): L4 GPU에는 375GB 크기가 필요합니다. L4로 가속화된 워크로드를 제출할 때 이 속성을 다른 값으로 설정하면 오류가 발생합니다. A100 40 또는 A100 80 GPU를 선택할 때 유효한 크기는 375g, 750g, 1500g, 3000g, 6000g, 9000g입니다.spark.executor.memory
(선택사항) 및spark.executor.memoryOverhead
(선택사항): 이러한 속성 중 하나를 설정할 수 있지만 둘 다 설정할 수는 없습니다. 설정된 속성에 사용되지 않는 사용 가능한 메모리 양은 설정되지 않은 속성에 적용됩니다. 기본적으로spark.executor.memoryOverhead
는 PySpark 일괄 워크로드의 경우 사용 가능한 메모리의 40%로 설정되고 다른 워크로드의 경우에는 10%로 설정됩니다(Spark 리소스 할당 속성 참조).다음 표에서는 다른 A100 및 L4 GPU 구성에 대해 설정할 수 있는 최대 메모리 양을 보여줍니다. 각 속성의 최솟값은
1024
MB입니다.A100(40GB) A100(80GB) L4(코어 4개) L4(코어 8개) L4(코어 12개) L4(코어 16개) 최대 총 메모리(MB) 78040 165080 13384 26768 40152 53536 Spark RAPIDS 속성(선택사항): 기본적으로 Dataproc Serverless는 다음 Spark RAPIDS 속성 값을 설정합니다.
spark.plugins
=com.nvidia.spark.SQLPluginspark.executor.resource.gpu.amount
=1spark.task.resource.gpu.amount
=1/$spark_executor_coresspark.shuffle.manager
=''. 기본적으로 이 속성은 설정되지 않습니다. 하지만 NVIDIA는 성능 향상을 위해 GPU를 사용할 때 RAPIDS 셔플 관리자를 사용 설정할 것을 권장합니다. 이렇게 하려면 워크로드를 제출할 때spark.shuffle.manager=com.nvidia.spark.rapids.RapidsShuffleManager
를 설정합니다.
Spark RAPIDS 속성 설정에 대해서는 Apache Spark 구성을 위한 RAPIDS 가속기를 참조하고 Spark 고급 속성 설정에 대해서는 Apache Spark 고급 구성을 위한 RAPIDS 가속기를 참조하세요.