세상은 멈춰 있지 않습니다.RSS
BIG CHANGE.

Markdown 버전

AI-translated from English; not yet reviewed by a fluent editor.

# Spark UDF 재작성의 GPU 실행 여부 확인 방법

> Spark UDF 하나를 테스트하고 SQL, cuDF 또는 CUDA를 선택하며 CPU 폴백을 확인하고 GPU 지원 파이프라인에서 결과를 측정하는 실용적인 순서입니다.

By BIG CHANGE Editorial

Published: 2026-10-14T02:55:41.136Z
Updated: 2026-10-14T02:55:41.136Z
Canonical: https://bigchange.ai/blog/spark-udf-gpu-rewrite-verification-guide

![Conceptual charcoal illustration of a generic rackmount server with a tray pulled partly forward, showing four finned modules inside.](https://bigchange.ai/api/media/file/spark-gpu-server-hero-v1.png)
AI-generated conceptual illustration by BIG CHANGE. Generic server hardware; no NVIDIA product, Spark interface or measured result is depicted.

CPU 사용자 정의 함수는 GPU 가속이 적용된 Apache Spark 쿼리를 중단시킬 수 있습니다. cuDF 플러그인은 임의의 UDF 코드를 일반적으로 변환하지 못합니다. 열 형식 데이터를 행으로 바꾸고 CPU에서 함수를 실행한 다음 결과를 다시 변환합니다. [NVIDIA의 10월 13일 가이드](https://developer.nvidia.com/blog/rewrite-apache-spark-udfs-gpu-acceleration-ai-agents/) 는 UDF를 Spark SQL, 열 기반 `RapidsUDF` 또는 CUDA를 사용하는 `RapidsUDF` 로 재작성하는 에이전트 스킬을 설명합니다. 데이터 엔지니어가 확인할 핵심은 재작성 후에도 답이 같고 관련 계획에서 GPU를 계속 사용하며 실제 작업이 개선되는지입니다.

이 가이드는 문서에 근거한 안내입니다. BIG CHANGE는 스킬을 실행하거나 UDF를 테스트하거나 Spark 워크로드를 측정하지 않았습니다.

## 큰 변화

- **달라진 점:** NVIDIA는 UDF 테스트 생성, 함수 변환, 변환 결과 평가, CPU와 GPU 버전 벤치마크, 선택적 cuDF 구현 최적화를 위한 단계별 에이전트 워크플로를 공개했습니다.
- **도움이 되는 대상:** GPU를 지원하는 RAPIDS/cuDF Spark 파이프라인과 이를 중단시키는 특정 CPU UDF가 있는 엔지니어입니다.
- **확인할 사항:** 대표적인 경계 사례에서 출력이 일치하는지, 실행 계획에서 목표로 한 CPU 폴백이 사라졌는지, 의도한 하드웨어에서 작업 수준 성능을 반복해서 얻을 수 있는지 확인합니다.

## 시작하기 전에

코딩 에이전트와 공유할 권한이 있는 UDF 하나를 선택하세요. 에이전트와 그 환경이 승인되지 않았다면 프롬프트에 자격 증명, 민감한 입력 행 또는 독점 데이터셋을 포함하지 마세요. UDF 소스, 등록 및 호출 지점, 관련 스키마, null 및 오류에 대한 예상 동작, 허용된 소규모 테스트 픽스처를 제공하세요. 비교 기준으로 현재 Spark 작업의 실행 계획과 시간을 기록하세요.

워크플로의 버전 관리된 시작점은 [스킬 README](https://github.com/NVIDIA/cudf-spark/tree/cb8150b7ee4b07863bb6b267f28885def24b177e/skills) 입니다. UDF를 빌드하려면 Maven과 JDK, 호환되는 Spark/RAPIDS/cuDF/CUDA 스택 및 GPU가 필요합니다. 설치 전에 [최신 플러그인 호환성 가이드](https://docs.nvidia.com/cudf-spark/latest/getting-started/overview.html) 를 자신의 Spark 배포판, Scala 버전, 드라이버, CUDA 빌드 및 GPU와 대조해 확인하세요. 클라우드 GPU는 로컬 하드웨어의 대안이지만 제공업체가 인스턴스 시간과 스토리지 비용을 청구합니다. 에이전트나 모델 사용에도 비용이 발생할 수 있습니다. README는 프로젝트 뼈대와 예제를 제공하지만 클러스터의 호환성이나 성능을 입증하지는 않습니다.

## 함수 하나를 재작성하고 확인하기

1. **먼저 원래 동작을 확정합니다.** 에이전트에게 선택한 UDF에서 `udf-gen-test` 를 사용하도록 요청하고 생성된 테스트를 직접 살펴보세요. 계약에 포함된 실제 사례를 추가하세요. 해당하는 경우 null, 빈 문자열이나 컬렉션, 잘못된 입력, 경계값, 숫자 정밀도, 순서, 오류 동작 등을 확인합니다. 이 사례들로 원래 UDF를 실행하세요. 기대 결과는 기준 테스트 모음의 통과이지 아직 재작성이 아닙니다. NVIDIA의 예제 온도 함수는 null 입력에 null을 명시적으로 반환합니다. SQL 재작성이 유용하려면 실제 데이터 유형과 Spark 설정에서도 해당 동작이 유지되어야 합니다.
2. **지원되는 목표 중 가장 단순한 것을 선택합니다.** Spark SQL이나 DataFrame 표현식으로 로직을 나타낼 수 있다면 `udf-convert-to-sql`를 요청하세요. 그러면 표현식이 Spark 플래너에 노출되어 플러그인이 지원되는 작업을 GPU 등가 연산으로 바꿀 수 있습니다. SQL로 필요한 로직을 깔끔하게 표현하기 어렵다면 `udf-convert-to-cudf`를 요청하세요. 해당 `RapidsUDF.evaluateColumnar` 는 GPU 열 벡터를 받아 cuDF 연산을 구성합니다. JNI를 통해 사용자 지정 커널이 필요한 로직이고 추가 구현 및 유지관리 부담이 타당할 때만 `udf-convert-to-cuda` 를 사용하세요. 이는 평가할 선택지이지 모든 작업이 GPU에서 실행된다는 약속이 아닙니다.
3. **변환을 수용하기 전에 검토합니다.** 재작성된 구현을 원본과 비교하고 동일한 승인 테스트 사례로 둘 다 실행하세요. 저장소에는 테스트 누락과 변환 버그를 별도로 검토하는 `udf-judge-conversion` 도 나와 있습니다. 유형, null 전파, 반올림, 예외, 순서 및 리소스 처리를 확인하세요. cuDF 재작성이라면 임시 열과 스칼라의 수명을 살펴보세요. [튜토리얼의 Scala 예제](https://developer.nvidia.com/blog/rewrite-apache-spark-udfs-gpu-acceleration-ai-agents/) 는 범위가 지정된 리소스를 사용하고 결과 열을 반환합니다. 생성된 테스트 모음이 통과하는 것은 유용한 증거지만 함수 계약을 충분히 다루는지 사람이 판단해야 합니다.
4. **실행된 계획을 확인합니다.** cuDF 플러그인을 활성화해 변경된 쿼리를 실행하고 대상 연산자와 주변 변환에 대한 계획 및 RAPIDS 진단을 확인하세요. NVIDIA의 [플러그인 개요](https://docs.nvidia.com/cudf-spark/latest/getting-started/overview.html) 는 지원되지 않는 SQL 작업이 Spark CPU 실행으로 폴백한다고 설명합니다. 계획에 UDF 또는 주변 연산자가 계속 CPU에서 실행되는 것으로 나오면 지원되지 않는 표현식이나 유형을 찾아 목표 선택을 재검토하세요. 변경 전후의 계획과 테스트 결과를 보관하세요. 이름이 `RapidsUDF` 인 클래스만으로 전체 작업이 GPU에 남아 있음을 입증할 수는 없습니다.
5. **실제로 실행할 작업을 벤치마크합니다.** 동일한 입력, 클러스터 규모, 구성 및 측정 방법으로 원본과 변경된 구현을 비교하려면 `udf-benchmark` 를 사용하세요. 작업 경과 시간, 입력 크기, 출력 동등성, GPU/CPU 리소스 사용량을 기록합니다. 시작 시간, 캐시 또는 경합 효과를 파악하도록 여러 번 실행하세요. 재작성이 느리더라도 재현 가능한 비교 결과가 바람직합니다. 올바른 cuDF 버전이 느리다면 저장소에서 `udf-optimize-cudf` 를 사용해 프로파일링하고 수정할 수 있습니다. 변경 후마다 정확성과 실행 계획을 다시 확인하세요.

## 성공적인 결과의 모습

선택한 UDF의 출력이 승인된 사례에서 문서화된 동작과 일치하고, 실행 계획에서 목표 CPU 폴백이 사라지며, 대표적인 벤치마크에서 종단 간으로 유의미한 결과가 나오면 일반적인 코드 검토를 받을 준비가 된 것입니다. 확인에 실패하면 원래 구현을 유지하고 실패한 표현식으로 재작성을 좁혀 해당 단계를 다시 실행하세요. 의미가 다르면 벤치마크가 빨라져도 더 중요합니다. 계획이 그대로라면 의도한 GPU 경로가 입증되지 않은 것입니다.

NVIDIA는 cuDF를 활성화한 UDF가 6,000억 행 워크로드에서 연산자 시간을 **274.55시간에서 12.78시간으로** 줄인 프로덕션 사례 하나를 보고합니다. 이는 해당 워크로드에 대해 공급업체가 보고한 연산자 시간이지 다른 UDF의 예측치나 종단 간 작업 결과가 아닙니다. 더 넓은 22배 주장은 이 맥락에서 읽어야 합니다. GPU 용량, 데이터 이동, 미지원 연산, 코드 검토 및 클라우드 비용이 파이프라인의 결과를 바꿀 수 있습니다.

## 출처 및 추가 읽을거리

- [NVIDIA Technical Blog, 2026년 10월 13일](https://developer.nvidia.com/blog/rewrite-apache-spark-udfs-gpu-acceleration-ai-agents/): CPU 폴백, SQL/cuDF/CUDA 선택, 네 가지 워크플로 단계, 회사가 인용한 단일 성능 사례를 설명합니다. 성능 수치는 공급업체 보고입니다.
- [NVIDIA cuDF Spark 스킬, 고정된 저장소 리비전](https://github.com/NVIDIA/cudf-spark/tree/cb8150b7ee4b07863bb6b267f28885def24b177e/skills): 프로젝트 뼈대와 개별 스킬을 위한 버전 관리 진입점입니다. 검색 경로에서 고정된 GitHub 페이지를 이용할 수 없었으며, 워크플로 세부 사항은 NVIDIA 튜토리얼과 저장소 기본 브랜치에서 접근 가능한 스킬 README를 대조해 확인했습니다.
- [Apache Spark용 cuDF 플러그인 개요](https://docs.nvidia.com/cudf-spark/latest/getting-started/overview.html): 최신 설정 및 호환성 정보와 미지원 작업은 Spark CPU 실행을 사용한다는 명시적 규칙을 제공합니다. 구현 전에 릴리스별 호환성 목록을 확인하세요.

## Sources

- [NVIDIA Technical Blog, How to Rewrite Apache Spark UDFs for GPU Acceleration with AI Agents](https://developer.nvidia.com/blog/rewrite-apache-spark-udfs-gpu-acceleration-ai-agents/) — 기본 튜토리얼 및 공급업체가 보고한 워크로드 사례입니다.
- [NVIDIA cuDF Spark 스킬, 고정 리비전](https://github.com/NVIDIA/cudf-spark/tree/cb8150b7ee4b07863bb6b267f28885def24b177e/skills) — 지정된 고정 리비전으로, 웹 캐시 미스로 검색에 실패했습니다. 세부 내용은 튜토리얼 및 접근 가능한 기본 README와 대조해 확인했습니다.
- [NVIDIA cuDF Spark 스킬, 기본 README](https://github.com/NVIDIA/cudf-spark/tree/main/skills) — 스킬 이름과 필수 조건이 담긴 변경 가능한 최신 README입니다.
- [Apache Spark용 cuDF 플러그인 개요](https://docs.nvidia.com/cudf-spark/latest/getting-started/overview.html) — 현재의 폴백 및 호환성 문서입니다. 배포된 릴리스에 맞춰 확인하세요.