[메모] DGX Spark 세팅 및 사용법: GPU 가속 빅데이터 분석의 모든 것

[메모] DGX Spark 세팅 및 사용법: GPU 가속 빅데이터 분석의 모든 것
📝 Memos에서 자동 발행됨
🕐 작성일: 2026-02-09
✨ AI가 보충 설명을 추가했습니다 🔍 웹 조사 자료를 바탕으로 작성되었습니다

DGX Spark 세팅 및 사용법: GPU 가속 빅데이터 분석의 모든 것

개요

오늘날 데이터의 양은 기하급수적으로 증가하고 있으며, 이 방대한 데이터를 효율적으로 처리하고 분석하는 능력은 기업의 경쟁력을 좌우하는 핵심 요소가 되었습니다. Apache Spark는 이러한 빅데이터 처리 및 분석을 위한 분산 컴퓨팅 프레임워크의 표준으로 자리 잡았지만, 전통적인 CPU 기반 환경에서는 여전히 성능 병목 현상이 발생할 수 있습니다. 특히 데이터 전처리, ETL(Extract, Transform, Load) 작업, 그리고 특정 머신러닝 알고리즘에서는 CPU의 한계가 명확하게 드러납니다.

이러한 한계를 극복하기 위해 NVIDIA의 DGX 시스템과 Apache Spark의 결합은 혁신적인 해법을 제시합니다. DGX는 여러 개의 고성능 NVIDIA GPU를 탑재한 AI 슈퍼컴퓨터로, 딥러닝 및 고성능 컴퓨팅(HPC) 워크로드에 최적화되어 있습니다. 여기에 RAPIDS Accelerator for Apache Spark와 같은 기술을 활용하면, Spark의 데이터 처리 작업을 GPU로 가속하여 CPU 단독으로는 상상하기 어려웠던 속도와 효율성을 달성할 수 있습니다. 이 글에서는 DGX 환경에서 Spark를 설정하고 활용하는 방법을 상세히 다루어, 여러분의 빅데이터 분석 워크플로우를 한 단계 끌어올릴 수 있도록 돕겠습니다.

주요 특징

DGX 시스템에서 Spark를 활용할 때 얻을 수 있는 주요 특징들은 다음과 같습니다.

  • 압도적인 GPU 가속 성능: RAPIDS Accelerator for Apache Spark를 통해 SQL, 데이터프레임 연산, ETL 작업 등 Spark의 핵심 기능들을 GPU로 가속하여 처리 시간을 획기적으로 단축합니다. 이는 CPU 기반 Spark 대비 수십 배의 성능 향상을 가져올 수 있습니다.
  • 최적화된 소프트웨어 스택: DGX 시스템은 NVIDIA 드라이버, CUDA, cuDNN 라이브러리 등 GPU 컴퓨팅에 필요한 모든 소프트웨어 스택이 사전에 설치 및 최적화되어 제공됩니다. 이는 Spark 및 관련 라이브러리 설정의 복잡성을 크게 줄여줍니다.
  • 대규모 데이터 처리 능력: Spark의 분산 처리 능력과 DGX의 고성능 GPU 메모리 및 NVLink 고속 인터커넥트 기술이 결합하여, 페타바이트(PB)급 대용량 데이터를 처리하는 데 있어 탁월한 확장성과 효율성을 제공합니다.
  • AI/ML 워크로드 통합: DGX는 본래 딥러닝과 머신러닝 워크로드에 특화된 시스템입니다. Spark를 DGX 위에서 실행함으로써, 데이터 전처리부터 모델 학습까지 전체 AI/ML 파이프라인을 단일 고성능 플랫폼에서 통합적으로 처리할 수 있습니다.
  • 에너지 효율성: GPU는 특정 유형의 병렬 컴퓨팅 작업에서 CPU보다 훨씬 높은 연산 효율을 제공하므로, 동일한 작업을 더 적은 에너지로 완료할 수 있습니다.

사용 방법

DGX 환경에서 Spark를 설정하고 사용하는 방법을 단계별로 설명합니다. 여기서는 RAPIDS Accelerator for Apache Spark를 활용하여 GPU 가속을 구현하는 데 중점을 둡니다.

1. 사전 준비 (Prerequisites)

DGX 시스템은 일반적으로 다음과 같은 환경이 사전 설치 및 구성되어 있습니다.

  • NVIDIA 드라이버, CUDA Toolkit, cuDNN 라이브러리
  • Docker 및 NVIDIA Container Toolkit (NGC 컨테이너 활용 시)
  • Python 3.x, Java (JDK 8 이상)

Spark 및 RAPIDS Accelerator 사용을 위해 추가적으로 필요한 것은 다음과 같습니다.

  • Apache Spark 3.x: RAPIDS Accelerator는 Spark 3.x 버전대와 호환됩니다. (예: Spark 3.4.x, 3.5.x)
  • RAPIDS Accelerator for Apache Spark JAR 파일: 이 JAR 파일은 Spark 애플리케이션에 GPU 가속 기능을 추가합니다.

2. Spark 설치 및 환경 설정

DGX 시스템에 Spark가 아직 설치되지 않았다면, 다음 단계를 따릅니다.

RAPIDS Accelerator JAR 파일 다운로드: Maven Central Repository에서 RAPIDS Accelerator JAR 파일을 다운로드합니다. 버전은 사용하는 Spark 버전에 맞춰야 합니다. 예를 들어, Spark 3.5.0 및 Scala 2.12용 최신 버전은 다음과 같습니다.

# 예시: Spark 3.5용 RAPIDS Accelerator 23.08.0 (최신 버전 확인 필요)
# https://repo1.maven.org/maven2/com/nvidia/rapids-4-spark_2.12/
# spark-3.5.0과 호환되는 버전은 23.10.0 이상을 권장합니다.
# 여기서는 예시로 23.10.0을 사용하겠습니다.
# 실제 사용 시, https://docs.rapids.ai/accelerator/spark/latest/getting-started/getting-started.html#download-the-rapids-accelerator-for-apache-spark-jar 에서 최신 호환 버전을 확인하세요.
RAPIDS_JAR_VERSION="23.10.0" # Spark 3.5.x, Scala 2.12 용
RAPIDS_JAR_NAME="rapids-4-spark_2.12-${RAPIDS_JAR_VERSION}.jar"
wget "https://repo1.maven.org/maven2/com/nvidia/rapids-4-spark_2.12/${RAPIDS_JAR_VERSION}/${RAPIDS_JAR_NAME}" -O ${SPARK_HOME}/jars/${RAPIDS_JAR_NAME}

주의: spark.jars.packages를 사용하여 런타임에 JAR을 다운로드할 수도 있지만, spark-submit 명령이 복잡해질 수 있으므로 미리 다운로드하여 SPARK_HOME/jars에 넣어두는 것이 편리합니다.

환경 변수 설정: ~/.bashrc 또는 ~/.profile 파일에 Spark 관련 환경 변수를 추가합니다.

export SPARK_HOME=/opt/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 # 설치된 JDK 경로에 맞게 수정

변경 사항을 적용합니다.

source ~/.bashrc

Spark 다운로드: Apache Spark 공식 웹사이트에서 원하는 버전 (예: spark-3.5.0-bin-hadoop3.tgz)을 다운로드하고 압축을 해제합니다.

wget https://archive.apache.org/dist/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz
tar -xvf spark-3.5.0-bin-hadoop3.tgz
sudo mv spark-3.5.0-bin-hadoop3 /opt/spark

3. 기본 사용법 (코드 예제)

PySpark를 사용하여 간단한 데이터프레임 작업을 GPU로 가속하는 예제를 보여줍니다.

spark_gpu_example.py:

import time
from pyspark.sql import SparkSession
from pyspark.sql.functions import rand, randn, col, sum

# 1. SparkSession 초기화 및 RAPIDS Accelerator 설정
# RAPIDS Accelerator를 사용하기 위한 Spark 설정을 포함합니다.
# spark.jars.packages 설정을 사용하여 Maven에서 JAR을 자동으로 다운로드할 수도 있지만,
# 위에서 직접 다운로드하여 SPARK_HOME/jars에 넣어두었으므로 여기서는 생략합니다.
spark = SparkSession.builder \
    .appName("DGXSparkGPUExample") \
    .config("spark.rapids.sql.enabled", "true") \ # RAPIDS SQL 가속 활성화
    .config("spark.rapids.sql.targetDevice", "gpu") \ # GPU 사용 지정
    .config("spark.rapids.memory.gpu.allocFraction", "0.7") \ # GPU 메모리의 70% 사용
    .config("spark.sql.shuffle.partitions", "200") \ # 셔플 파티션 수 설정
    .config("spark.driver.memory", "16g") \ # 드라이버 메모리 설정
    .config("spark.executor.memory", "16g") \ # 실행자 메모리 설정
    .config("spark.executor.cores", "8") \ # 실행자 코어 수 설정
    .getOrCreate()

print("SparkSession created with RAPIDS config.")

# 2. 대규모 데이터프레임 생성 (GPU 가속의 효과를 보기 위함)
num_rows = 10**8  # 1억 개의 행
num_partitions = 100

data = spark.range(num_rows).repartition(num_partitions) \
                             .withColumn("group_key", (rand() * 1000).cast("int")) \
                             .withColumn("value1", randn()) \
                             .withColumn("value2", randn() * 100)

print(f"DataFrame with {num_rows} rows generated and repartitioned into {num_partitions}.")

# 3. GPU 가속 집계 연산 수행
print("Performing GPU-accelerated aggregation...")
gpu_start_time = time.time()
result_gpu = data.groupBy("group_key").agg(sum("value1").alias("sum_value1"),
                                           sum("value2").alias("sum_value2"))
result_gpu.cache() # 결과를 캐싱하여 다음 액션에서 재사용 시 성능 향상

# 실행 계획 확인 (GPU 오퍼레이션이 포함되었는지 확인)
# Physical Plan에 'Gpu'로 시작하는 오퍼레이션이 나타나야 합니다.
result_gpu.explain(extended=True)

# 액션(Action)을 트리거하여 연산 실행
print(f"Number of distinct groups: {result_gpu.count()}")
gpu_end_time = time.time()
print(f"GPU-accelerated aggregation completed in {gpu_end_time - gpu_start_time:.2f} seconds.")

# SparkSession 종료
spark.stop()
print("SparkSession stopped.")

실행 방법:

DGX 시스템의 터미널에서 다음 명령어를 사용하여 스크립트를 실행합니다. 단일 DGX 서버에서 Spark Standalone 모드 또는 Local 모드로 실행하는 것을 가정합니다.

/opt/spark/bin/spark-submit \
    --master local[*] \
    --jars ${SPARK_HOME}/jars/${RAPIDS_JAR_NAME} \
    --driver-memory 16g \
    --executor-memory 16g \
    --executor-cores 8 \
    --conf spark.rapids.sql.enabled=true \
    --conf spark.rapids.sql.targetDevice=gpu \
    --conf spark.rapids.memory.gpu.allocFraction=0.7 \
    --conf spark.sql.shuffle.partitions=200 \
    spark_gpu_example.py
  • --master local[*]: 로컬 머신의 모든 코어를 사용하여 Spark를 실행합니다. 실제 분산 환경에서는 YARN, Kubernetes 또는 Standalone 클러스터 관리자를 지정합니다.
  • --jars: RAPIDS Accelerator JAR 파일의 경로를 지정합니다.
  • --conf spark.rapids.sql.enabled=true: RAPIDS 가속을 활성화합니다.
  • --conf spark.rapids.sql.targetDevice=gpu: GPU 사용을 명시합니다.
  • --conf spark.rapids.memory.gpu.allocFraction=0.7: GPU 메모리 할당 비율을 조정합니다.
  • nvidia-smi 명령을 다른 터미널에서 실행하여 GPU 활용률을 확인해 보세요. Spark 작업이 실행되는 동안 GPU 사용률이 높아지는 것을 볼 수 있습니다.

실제 활용 사례

DGX Spark는 다양한 빅데이터 및 AI 워크로드에서 강력한 성능을 발휘합니다.

  1. 초고속 ETL 파이프라인: 대규모 로그 데이터, 센서 데이터, 금융 거래 데이터 등을 수집, 정제, 변환하는 ETL 작업에서 GPU 가속을 통해 처리 시간을 극적으로 단축합니다. 특히 SQL 기반의 복잡한 조인, 필터링, 집계 연산에서 빛을 발합니다.
  2. 머신러닝 전처리 및 특성 공학: 딥러닝 모델 학습에 앞서 데이터를 스케일링, 인코딩, 특성 생성하는 과정은 많은 연산을 요구합니다. DGX Spark는 이러한 데이터 전처리 단계를 GPU로 가속하여 전체 ML 워크플로우의 병목 현상을 해소합니다.
  3. 대화형 데이터 분석: 데이터 과학자 및 분석가들이 대규모 데이터셋에 대한 임시 쿼리(Ad-hoc Query)를 수행할 때, DGX Spark는 빠른 응답 시간을 제공하여 탐색적 데이터 분석(EDA)의 효율성을 크게 향상시킵니다.
  4. 시계열 및 지리공간 데이터 처리: 방대한 양의 시계열 데이터(예: 주식 시장 데이터, IoT 센서 데이터)나 지리공간 데이터(예: 위성 이미지, 위치 데이터)에 대한 복잡한 연산을 GPU 가속으로 빠르게 처리하여 패턴 분석 및 예측 모델링에 활용됩니다.
  5. 딥러닝 모델 학습 데이터 파이프라인: DGX 시스템에서 딥러닝 모델을 학습시킬 때, 모델에 공급할 데이터를 DGX Spark로 빠르게 준비하고 직접 전달하여 엔드투엔드 딥러닝 파이프라인의 효율성을 극대화합니다.

💡 유용한 팁

  1. GPU 사용량 모니터링: nvidia-smi 또는 dcgm (Data Center GPU Manager)과 같은 도구를 사용하여 Spark 작업 중 GPU 활용률과 메모리 사용량을 지속적으로 모니터링하세요. 이를 통해 병목 현상을 식별하고 설정을 최적화할 수 있습니다.
  2. RAPIDS 설정 튜닝: spark.rapids.memory.gpu.allocFraction, spark.rapids.sql.concurrentGpuTasks 등 RAPIDS 관련 설정을 워크로드 특성과 DGX 시스템 리소스에 맞춰 조절하세요. 특히 allocFraction은 OOM(Out Of Memory)을 방지하고 GPU 리소스 활용을 최적화하는 데 중요합니다.
  3. 데이터 형식 선택: Parquet, ORC와 같이 컬럼 기반의 데이터 형식은 GPU가 데이터를 효율적으로 처리하는 데 유리합니다. 가능한 한 이들 형식을 사용하고, 데이터 압축을 통해 I/O 성능을 향상시키세요.
  4. 실행 계획(explain()) 활용: Spark 애플리케이션의 explain(extended=True) 메소드를 사용하여 쿼리 실행 계획을 확인하세요. 이를 통해 어떤 작업이 GPU에서 실행되고 어떤 작업이 CPU로 폴백(fallback)되는지 파악하고, GPU 가속의 한계를 이해하며 코드 최적화 방향을 잡을 수 있습니다.
  5. 최신 버전 유지: Apache Spark 및 RAPIDS Accelerator for Apache Spark는 지속적으로 발전하고 있습니다. 최신 버전을 사용하면 버그 수정, 성능 향상, 새로운 기능 추가의 혜택을 받을 수 있습니다.

⚠️ 주의사항

  1. 모든 연산이 GPU 가속되지 않음: RAPIDS Accelerator는 Spark의 많은 부분을 GPU로 가속하지만, 모든 Spark 연산이 GPU로 가속되는 것은 아닙니다. 지원되지 않는 연산은 자동으로 CPU로 폴백되며, 이 과정에서 CPU-GPU 간 데이터 전송 오버헤드가 발생하거나 CPU가 병목 지점이 될 수 있습니다.
  2. GPU 메모리 한계: GPU는 CPU보다 훨씬 빠른 메모리를 가지고 있지만, 그 용량은 제한적입니다. 매우 큰 데이터셋이나 복잡한 연산은 GPU 메모리를 초과하여 OOM 오류를 발생시킬 수 있습니다. 적절한 파티셔닝, 메모리 할당 설정, 그리고 중간 데이터의 캐싱 전략이 중요합니다.
  3. 설정의 복잡성: 최적의 성능을 달성하기 위해서는 Spark와 RAPIDS Accelerator의 다양한 설정을 워크로드 및 DGX 환경에 맞춰 세밀하게 튜닝해야 합니다. 이는 초기 설정 단계에서 시행착오를 겪을 수 있으며, 숙련된 지식을 요구합니다.

🔗 참고 자료

DGX 시스템과 Spark의 결합은 빅데이터 처리 및 분석의 새로운 지평을 열어줄 강력한 도구입니다. 이 글을 통해 여러분이 DGX Spark를 성공적으로 설정하고 활용하여 데이터로부터 더 깊은 통찰을 얻고, 비즈니스 가치를 창출하는 데 도움이 되기를 바랍니다.

개인정보보호링크