아파치 스파크(Apache Spark)를 이용해 머신 러닝 워크로드를 운영하는 데 있어 클라우드는 매우 편한 환경을 제공합니다. 대표적인 예가 구글 클라우드 Dataproc입니다. 관리형 서비스인 Dataproc을 이용하면 데이터 과학자는 머신 러닝 모델과 데이터 분석같은 본연의 업무에 집중할 수 있습니다. 스파크 클러스터 운영은 신경쓸 필요가 없습니다. 데이터 세트 규모가 커져도 성능과 확장 걱정이 없습니다.
GPU 가속 환경과 XGBoost의 만남
데이터 과학자의 일손을 덜어주는 Dataproc이 새로운 파워를 얻었습니다. 데이터 분석 속도를 높이기 위해 사용하는 오픈 소스 기반 라이브러리인 XGBoost를 GPU 가속 환경에서 사용할 수 있게 되었습니다. 이 조합이 끌어내는 성능 향상은 놀라울 정도입니다. GPU를 적용한 스파크와 XGBoost 기반 Dataproc에서 테스트해 본 결과 머신 러닝 모델 트레이닝 속도는 44배 빨라지고, 비용은 14배 낮아졌습니다. 더 나은 성능으로, 더 나은 결과를, 더 낮은 비용으로 얻을 수 있게 된 것입니다. 테스트 관련 상세 결과는 별도의 포스팅으로 자세히 다룰 예정입니다.
스파크 환경에서 실행하는 대부분의 머신 러닝 워크로드는 CPU를 기반으로 돌아갑니다. CPU 환경에서 애플리케이션을 개발하고, 데이터 세트를 처리하는 것도 모자람이 그리 크지는 않습니다. 하지만 컴퓨팅 자원 집약적인 워크플로우나 머신 러닝 모델을 적용할 경우 더 큰 성능과 용량의 인프라가 요구됩니다. 적절한 인프라 확장이 없으면 프로세싱 타임이 너무 길어져 데이터 과학자와 개발자가 느끼는 생산성 저하가 꽤 크게 다가옵니다. 클러스터를 확장해도 선형적인 성능 향상에는 한계가 있습니다.
이런 이유로 GPU 가속을 활용하는 것입니다. GPU 가속을 더한 스파크와 XGBoost 기반 Dataproc은 분산 환경에서 머신 러닝 절차를 간소화하는 효과도 있습니다. 스파크와 XGBoost 환경을 이용하는 사용자가 흔히 직면하는 도전 과제가 있습니다. 클라우드 환경에서 XGBoost 패키지를 배포하고 확장하는 것이 복잡하고 어렵다는 것입니다. 프로젝트별로 서로 다른 버전의 패키지를 써야 하는 경우도 있다 보니 XGBoost 설치와 관리가 번거롭습니다. 관리를 잘하고 있다 해도 용량이 큰 데이터 세트를 분산 환경에서 다루려면 파티셔닝 최적화를 해야 하는 데 이것 또한 일입니다.
어떻게 시간과 비용을 아낄 수 있나?
XGBoost를 이용한 트레이닝은 스토리지에서 데이터를 읽어 오고, 이를 DataFrame으로 변환하고, 이를 D-matrix 폼으로 옮기는 과정을 거칩니다. 지금까지는 이 과정을 CPU 파워에 의지했습니다. GPU 파워를 가미했을 때 어떤 변화가 일어나는지 함께 알아보겠습니다.
비교를 위해 먼저 PySpark 애플리케이션 파일과 샘플 데이터 세트를 다운로드합니다. 그리고 구글 클라우드에서 Dataproc 클러스터를 생성한 후 샘플 노트북 애플리케이션을 실행합니다. 가속 효과를 보기 위해 XGBoost를 이용한 트레이닝 환경을 단일 노드와 멀티 노드 GPU로 구분해 실행해 보았습니다. 샘플 노트북 실행을 위한 환경 조성을 위해 2개의 스크립트를 준비했습니다. initialization script.sh를 실행하면 CUDA 드라이버와 NCCL, XGBoost를 위한 GPU 프리미티브(primitives)가 설치됩니다. 그리고 rapids.sh script를 실행하면 스파크 RAPIDS 라이브러리와 XGBoost 라이브러리가 Dataproc에 설치됩니다.
준비를 마친 후 샘플 노트북을 실행한 후 트레이닝에 걸린 시간과 비용을 정리해 보면 다음 표와 같습니다. 극적인 효과가 눈에 들어옵니다.
CPU와 GPU 간의 상세 비교는 다음 표를 참조 바랍니다.
정리하자면 GPU는 Dataproc을 이용해 머신 러닝 파이프라인을 매우 극적인 수준으로 가속합니다.
이는 곧 데이터 과학자와 애플리케이션 개발자가 더 생산적으로 일을 할 수 있게 하고, 조직 측면에서 보면 비용 절감의 기회를 제공합니다.