서론: GPU가 데이터 사이언스의 다음 물결을 주도하는 이유는 무엇인가요?

데이터 분석의 진화

Competing on Analytics에서 Thomas Davenport에 따르면, 분석 기술은 지난 10년 동안 상용 서버 전반에 걸쳐 더 강력하고 저렴한 분산 컴퓨팅과 향상된 머신 러닝(ML) 기술을 통해 크게 변화하여 기업들이 다양한 유형의 데이터를 더 많이 저장하고 분석할 수 있게 되었습니다.

빅데이터 처리의 시작

Google에서는 상용 서버의 대규모 클러스터 전반에서 웹의 폭발적인 콘텐츠 양을 인덱싱하기 위해 분산 파일 시스템과 탄력적인 분산 처리 프레임워크인 MapReduce를 개발했습니다. GFS(Google 파일 시스템)는 클러스터의 데이터 노드에서 파일 데이터를 분할, 배포 및 복제했습니다. 클러스터의 데이터 노드 전반에서의 MapReduce 분산 컴퓨팅: 사용자는 키/값 쌍을 처리하여 중간 키/값 쌍 집합을 생성하는 map 함수와 동일한 중간 키와 연결된 모든 중간 값을 병합하는 reduce 함수를 지정합니다. GFS와 MapReduce는 모두 데이터 또는 처리에 대해 다른 노드에 페일오버하여 내결함성을 갖추도록 설계되었습니다.

참조 자료: MapReduce Google White Paper

Google에서 MapReduce 프레임워크를 설명하는 백서를 발표하고 1년 후, Doug Cutting과 Mike Cafarella는 Apache Hadoop을 만들었습니다. 

그러나 Hadoop 성능은 디스크에 대한 체크포인트 결과의 모델에 의해 병목 현상이 발생합니다. 이와 동시에, MapReduce의 낮은 수준의 프로그래밍 모델은 Hadoop 채택의 걸림돌이 되었습니다. 데이터 파이프라인 및 반복 알고리즘은 여러 MapReduce 작업을 함께 연결해야 하므로 프로그래밍이 어려우며 디스크에 많은 읽기 및 쓰기 작업이 발생할 수 있습니다.

Apache Spark로 빠르고 쉬워진 빅데이터 처리

Apache Spark는 AMPLab의 UC 버클리에서 연구 프로젝트로 시작하여 2014년 최고 수준의 Apache Software Foundation 프로젝트가 되었으며, 현재 수백 개 조직의 수백 명으로 이루어진 개발자 커뮤니티에서 관리되고 있습니다. Spark는 MapReduce의 확장 가능하고 분산된 내결함성 처리 프레임워크의 이점을 유지하면서 더 효율적이고 사용하기 쉽도록 만드는 것을 목표로 개발되었습니다. Spark는 반복 전반에 걸쳐 메모리에 데이터를 캐시하고 가벼운 중량 스레드를 사용하기 때문에 데이터 파이프라인 및 반복 알고리즘에 대해 MapReduce보다 더 효율적입니다. Spark는 또한 MapReduce보다 더 풍부한 기능의 프로그래밍 모델을 제공합니다.  

분산 데이터시트

Spark는 Hadoop에서 발견되는 I/O 문제를 완화했지만, 이제 점점 더 많은 애플리케이션에서 I/O가 아니라 컴퓨팅에서 병목 현상이 일어나게 되었습니다. 이 성능 병목 현상은 GPU 가속 계산이 출현하며 저지되었습니다.

컴퓨터 처리를 가속화하는 GPU

그래픽 처리 장치(GPU)는 플롭(성능)당 매우 저렴한 가격으로 인기가 있으며 병렬 처리를 위해 멀티 코어 서버를 가속화하여 오늘날의 컴퓨팅 성능 병목 현상을 해결하고 있습니다. 

CPU는 순차적인 직렬 처리에 최적화된 몇 가지 코어로 구성됩니다. 반면 GPU는 여러 작업을 동시에 처리하도록 설계된 수천 개의 작고 효율적인 코어로 이루어진 대규모 병렬 아키텍처를 가지고 있습니다. GPU는 CPU만 포함된 구성보다 데이터를 훨씬 빠르게 처리할 수 있습니다.

클러스터의 노드 간에 대량의 데이터를 방송, 집계 또는 수집해야 하는 경우 네트워크에서 병목 현상이 발생할 수 있습니다. NVIDIA Collective Communications Library를 통한 GPUDirect Remote 직접 메모리 액세스는 더 빠른 멀티 GPU 및 다중 노드 감소 작업을 위해 GPU가 노드 간에 서로 직접 통신하도록 하여 이러한 병목 현상을 해결할 수 있습니다.  

GPUDirect RDMA의 이점은 대규모의 복잡한 추출, 변환, 부하(ETL) 워크로드에 매우 중요하며, 이러한 여러 워크로드가 하나의 큰 서버에 있는 것처럼 운영할 수 있습니다. 

RAPIDS 기반의 GPU 가속화된 데이터 사이언스

데이터 사이언스의 핵심적인 구성 요소는 데이터 탐색입니다. ML용 데이터 집합을 준비하려면 데이터 집합을 이해하고, 데이터 유형 및 형식을 정리 및 조작하고, 학습 알고리즘을 위한 특성을 추출해야 합니다. 이러한 작업은 ETL이라는 용어로 그룹화됩니다. ETL은 반복적이고 탐색적인 과정인 경우가 많습니다. 데이터 집합이 증가함에 따라, 이 프로세스의 상호 작용은 CPU에서 실행될 때 어려움을 겪습니다.

GPU는 지난 몇 년 동안 딥러닝(DL)의 발전을 책임져 온 반면, ETL 및 기존 ML 워크로드는 종종 Scikit-Learn과 같은 단일 스레드 도구 또는 Spark와 같은 대형 멀티 CPU 분산 솔루션을 통해 Python에서 계속하여 작성되어 왔습니다.   

RAPIDS는 GPU에서 엔드 투 엔드 데이터 사이언스 및 분석 파이프라인을 완전히 실행하기 위한 오픈 소스 소프트웨어 라이브러리 및 API 제품군으로, 일반적인 엔드 투 엔드 데이터 과학 워크플로우에서 50배 이상의 속도 향상 요소를 달성합니다. RAPIDS는 데이터 로딩을 포함한 전체 데이터 사이언스 파이프라인을 가속화하여 더 생산성 높은 대화형 및 탐색 워크플로우를 지원합니다. 

GPU 컴퓨팅을 위한 아키텍처 및 소프트웨어 플랫폼인 NVIDIA® CUDA®를 기반으로 구축된 RAPIDS는 사용자 친화적인 API를 통해 GPU 병렬 및 고대역폭 메모리 속도를 노출합니다. RAPIDS는 분석 및 데이터 과학을 위한 일반적인 데이터 준비 작업에 중점을 두고 있으며, 친숙한 DataFrame API를 통해 ApacheArrow 데이터 구조와 호환되는 강력한 GPU DataFrame을 제공합니다.

Apache Arrow는 데이터 지역성에 최적화된 표준화된 언어 독립 열 기반 메모리 형식을 지정하여 최신 CPU 또는 GPU에서 분석 처리 성능을 가속화하고 직렬화 오버헤드 없이 제로 카피 스트리밍 메시징 및 프로세스 간 통신을 제공합니다.  

DataFrame API는 일반적인 직렬화 및 비직렬화 비용을 발생시키지 않고 다양한 ML 알고리즘과 통합하여 엔드 투 엔드 파이프라인 가속을 지원합니다. 

RAPIDS는 낮은 수준의 CUDA 프로그래밍의 복잡성을 숨김으로써 데이터 사이언스 작업을 간단하게 실행하는 방법을 만듭니다. Python 및 높은 수준의 다른 언어를 사용하는 데이터 사이언티스트가 많아짐에 따라, 코드 변경이 최소 수준이거나 또는 아예 없는 수준의 실시간 가속화를 제공하는 것은 빠르게 발전하는 개발 과정에 필수적인 요소가 되었습니다.

GPU 및 RAPIDS 라이브러리를 통해 데이터 사이언스 프레임워크 강화

RAPIDS가 개발을 가속화하는 또 다른 방법은 DL에 대해 PyTorch, ChainerApacheMxNet 등의 주요 데이터 사이언스 프레임워크와의 통합, 그리고 GPU 워크스테이션에서 멀티 GPU 서버 및 멀티 노드 클러스터로의 원활한 확장을 위한 Apache SparkDask 등의 분산 컴퓨팅 프레임워크입니다. 또한, 오픈 소스 SQL 엔진인 BlazingSQL과 같은 제품이 RAPIDS 위에 구축되어 사용자를 위해 더욱 가속화된 기능을 추가하고 있습니다.

Apache Spark 3.x는 GPU를 쉽게 요청하고 활용할 수 있도록 사용자 API와 구성을 제공하여 GPU 애플리케이션을 지원하며 이제 GPU에서 열 기반 처리를 허용하도록 확장할 수 있습니다. 이 모든 것은 Spark 3.x 이전에는 지원되지 않았습니다. 내부적으로 Spark는 GPU 스케쥴을 추가하고, 클러스터 관리자(YARN, Kubernetes 등)와의 추가 통합을 통해 GPU를 요청했으며, 플러그인 포인트를 추가하여 GPU에서 작업을 실행할 수 있도록 확장 가능하게 만들었습니다. 이를 통해 Spark 애플리케이션 개발자가 GPU를 더 쉽게 요청하고 사용할 수 있으며, Spark의 Horovod 및 TensorFlow와 같은 DL 및 AI 프레임워크와 더 쉽게 통합되고 GPU를 더 잘 활용할 수 있습니다. 이러한 확장성은 열 기반 처리도 가능하도록 만드므로 사용자가 GPU를 사용하여 쿼리를 가속화하는 플러그인을 추가할 수 있습니다.

이 가이드북의 후반부에서는 아래에 표시된 Apache Spark 3.x 스택이 Spark 3.x 애플리케이션을 가속화하는 방법을 살펴볼 것입니다.

Apache Spark 3.x GPU 가속 소프트웨어 스택

NVIDIA GPU가 실행되는 모습

산업이나 사용 사례에 관계없이, 많은 데이터 사이언스 문제는 기능을 구축하기 위해 데이터를 반복적으로 전처리, 다른 매개변수로 모델을 트레이닝, 그리고 성능이 가치 있는 결과를 도출하도록 보장하기 위해 모델을 평가하는 것의 비슷한 단계로 나누어집니다.

RAPIDS는 사용자의 하드웨어 투자를 극대화하는 동시에 이러한 모든 단계를 가속화하는 데 도움이 됩니다. 초기 고객은 며칠 또는 몇 주가 걸린 전체 데이터 파이프라인을 가져와 단 몇 분 만에 실행했습니다. 데이터 사이언티스트는 더 많은 반복을 통해 더 많은 모델과 파라미터의 조합을 탐색하고 더 큰 데이터세트에서 트레이닝할 수 있기 때문에, 이는 비용을 절감하고 모델의 정확도를 향상해 주었습니다.

소매업체들을 예측 모델을 개선하고 있습니다. 금융 회사들은 신용 위험을 점점 더 효율적으로 평가하고 있습니다. 그리고 애드테크 기업은 클릭률을 예측하는 능력을 강화하고 있습니다. 데이터 사이언티스트는 종종 1~2%의 개선을 달성합니다. 이는 수천만 또는 수억 달러의 이익 및 수익성으로 이어질 수 있습니다.