Dask

Dask는 파이썬 기반 병렬 및 분산 컴퓨팅을 위한 유연한 오픈 소스 라이브러리입니다.

 

Dask의 작동 방식은?

Dask는 기존의 파이썬 스택에 병렬성을 제공하도록 설계된 오픈 소스 라이브러리입니다. 넘파이(NumPy) 배열, Pandas 데이터프레임, Scikit-learn 등과 같은 파이썬 라이브러리와 통합되므로 새로운 라이브러리나 언어를 배우지 않고도 여러 코어, 프로세서 및 컴퓨터에 걸쳐 병렬 처리를 수행할 수 있습니다.

Dask는 두 부분으로 구성되어 있습니다.

  • 컬렉션 API: 병렬 리스트, 배열 및 데이터프레임을 위한 것으로, 데이터 세트가 메모리보다 큰 환경 또는 분산 환경에서 실행되도록 넘파이, Pandas 및 Scikit-learn을 기본적으로 확장하는 데 사용됩니다. Dask 컬렉션은 기본 라이브러리의 병렬 컬렉션(예: Dask 배열은 넘파이 배열로 구성됨)으로, 작업 스케줄러에서 실행됩니다.
  • 작업 스케줄러: 작업 그래프를 작성하고 대화형 워크로드에 최적화된 CPU 코어와 머신 전반의 작업을 조정, 스케줄링 및 모니터링하는 데 사용됩니다.

A task scheduler for building task graphs.

Dask의 세 가지 병렬 컬렉션인 데이터프레임, 백 및 배열은 리소스 가용성에 따라 클러스터의 여러 노드에 분산되어 RAM 및 디스크 간에 분할된 데이터를 자동으로 사용할 수 있습니다. 병렬화는 가능하지만 Dask 배열 또는 데이터프레임과 같은 고수준 추상화에는 잘 맞지 않는 문제의 경우, 파이썬 데코레이터를 사용하여 일정 시간 후에 작동하도록 함수를 수정할 수 있는 '지연' 함수가 있습니다. 즉, 실행이 지연되고, 이 함수와 해당 인수가 작업 그래프에 배치됩니다.

Dask의 작업 스케줄러는 수천 개 노드로 구성된 클러스터로 확장할 수 있습니다. Dask의 알고리즘은 세계 최대 규모의 여러 슈퍼컴퓨터에서 테스트를 거쳤습니다. Dask의 작업 스케줄링 인터페이스는 특정 작업에 맞춤화할 수도 있습니다. Dask는 속도 향상에 필수적인 최소화된 저오버헤드 저지연 직렬화를 제공합니다.

분산 시나리오에서는 하나의 스케줄러가 여러 작업자를 조정하고, 지속적인 무중단 소통을 유지하며 연산 작업을 올바른 작업자에게 이동시킵니다. 여러 사용자가 동일한 시스템을 공유할 수 있습니다. 이 방식은 Hadoop HDFS 파일 시스템은 물론이고 Amazon의 S3 스토리지와 같은 클라우드 객체 스토리지에도 사용할 수 있습니다.

단일 머신의 스케줄러는 메모리보다 큰 작업에 최적화되어 있으며 여러 스레드와 프로세서에 걸쳐 작업을 분산시킵니다. 여기에는 작업당 약 50마이크로초를 소비하는 저오버헤드 방식이 사용됩니다.

Dask를 사용하는 이유는?

수많은 데이터 사이언티스트가 사용자 친화적인 파이썬의 고수준 프로그래밍 언어와 넘파이, Pandas, Scikit-learn 등의 파이썬 라이브러리를 채택해 왔습니다.

빅데이터 사용 사례가 널리 퍼지기 전에 개발된 이러한 라이브러리에는 병렬 처리를 위한 강력한 솔루션이 없었습니다. 단일 코어 컴퓨팅에서 파이썬은 탁월한 선택이었지만, 멀티 코어 또는 멀티 머신 병렬 처리가 필요한 사용자들은 다른 솔루션을 찾아야 했습니다. 이로 인해 사용자는 좌절과 단절을 경험해야 했습니다.

이와 같이 파이썬 워크로드를 확장해야 하는 필요성이 커지면서 Dask가 지난 5년간 자연스럽게 성장하게 되었습니다. Dask는 간편하게 설치하고 신속하게 프로비저닝하여 파이썬 기반 데이터 분석 속도를 높일 수 있는 방법으로, 개발자가 하드웨어 인프라를 업그레이드하거나 다른 프로그래밍 언어로 전환할 필요가 없습니다. Dask 작업을 실행하는 데 사용되는 구문은 파이썬 작업에 사용되는 것과 같아서 거의 코드를 수정하지 않고도 통합이 가능합니다.

Dask scalable data science.

웹 개발자들에게도 인기가 높은 파이썬은 탄탄한 네트워킹 스택을 갖추고 있어, Dask는 이를 활용하여 다양한 워크로드를 확장할 수 있는 유연하고 성능 좋은 분산 컴퓨팅 시스템을 구축합니다. Dask는 유연성 덕분에 Hadoop, 아파치 스파크 등의 다른 빅데이터 솔루션보다 돋보이며, 네이티브 코드를 지원하기 때문에 파이썬 사용자와 C/C++/CUDA 개발자들이 특히 쉽게 사용할 수 있습니다.

Dask는 파이썬 개발자 커뮤니티에서 재빨리 채택되었고 넘파이와 Pandas의 인기가 높아지면서 함께 성장했습니다. 넘파이와 Pandas는 파이썬의 기능을 확장하여 특수한 분석 및 수학 계산을 지원하는 데 중요한 역할을 합니다.

또한 Dask는 Pandas보다 확장성이 훨씬 더 뛰어나고 수천 개 스프레드시트의 데이터를 분류하는 것과 같이 쉽게 병렬화할 수 있는 작업에 특히 적합합니다. 가속기가 수백 개의 Pandas 데이터프레임을 메모리에 로드하고 하나의 추상화로 이를 모두 조정할 수 있습니다.

오늘날 Dask는 수십 개의 기관과 Pandas, Jupyter, Scikit-learn 등의 PyData 프로젝트를 아우르는 개발자 커뮤니티에서 관리합니다. Dask는 이러한 인기 많은 도구들과 통합되면서 채택률이 급격히 상승하였습니다. 파이써닉 빅데이터 도구를 필요로 하는 개발자의 약 20%가 Dask를 채택하였습니다.

Dask integrations with these popular tools.

그림 1: 파이썬 개발자가 사용하는 빅데이터 도구(>100%). 출처: JetBrains

Dask가 GPU에서 더 효과적인 이유

구조적으로 볼 때, CPU는 단 몇 개의 코어와 많은 캐시 메모리로 구성되어 있어 한 번에 처리할 수 있는 소프트웨어 스레드가 적습니다. 반대로 GPU는 수백 개의 코어로 구성되어 있어 수천 개의 스레드를 동시에 처리할 수 있습니다.

GPU는 그동안 어렵다고 여겨지던 병렬 컴퓨팅 기술을 제공합니다.

Dask + NVIDIA: 접근이 용이한 가속 분석 주도

NVIDIA는 데이터 분석에서 발휘되는 GPU의 힘을 잘 알고 있습니다. 그래서 NVIDIA는 데이터 사이언스, 머신 러닝 및 인공 지능 분야의 전문가들이 데이터를 최대한 활용할 수 있도록 지원하기 위해 노력해 왔습니다. Dask가 성능이 강력하고 사용하기 용이한 점을 고려하여, NVIDIA는 가속 데이터 분석 워크로드를 여러 GPU와 GPU 기반 시스템에 수평 확장한다는 목표로 RAPIDS™ 프로젝트에 Dask를 사용하기 시작했습니다.

Machine learning and deep learning all on GPUs.

접근이 용이한 파이썬 인터페이스를 사용하고 데이터 사이언스 이외에도 다양하게 사용할 수 있다는 이점으로 인해, Dask는 NVIDIA 전반의 다른 프로젝트로 확산되었고 JSON 파싱부터 엔드투엔드 딥 러닝 워크플로 관리에 이르는 새로운 응용 사례에서 당연한 선택이 되고 있습니다. 다음은 NVIDIA가 Dask를 사용하여 진행 중인 많은 프로젝트 및 협업의 일부입니다.

RAPIDS

RAPIDS는 데이터 사이언스 파이프라인을 전적으로 GPU에서 실행할 수 있게 해주는 오픈 소스 소프트웨어 라이브러리 및 API 모음으로, 보통 며칠 걸리는 훈련 시간을 단 몇 분으로 단축합니다. CUDA를 기반으로 하는 RAPIDS에는 그래픽, 머신 러닝, 고성능 컴퓨팅(HPC) 등의 분야에서 수년간 개발된 기술이 집대성되어 있습니다.

NVIDIA RAPIDS, end-to-end GPU-accelerated data science.

CUDA는 놀라울 정도로 강력하지만, 대부분의 데이터 분석 전문가는 앞서 말한 넘파이, Pandas, Scikit-learn 등과 같은 파이썬 툴셋으로 모델을 실험하고 구축하고 훈련하는 것을 선호합니다. Dask는 RAPIDS 에코시스템의 핵심 구성 요소이기 때문에 데이터 전문가들은 파이썬이 주는 편안한 사용자 경험을 누리며 가속 컴퓨팅을 더욱 쉽게 활용할 수 있습니다. 

NVTabular

NVTabular는 테라바이트 규모의 테이블 형식 데이터 세트를 빠르고 간편하게 조작할 수 있도록 설계된 특징 공학 및 전처리 라이브러리입니다. Dask-cuDF 라이브러리를 기반으로 하는 NVTabular는 대규모의 고성능 ETL 작업을 간단히 생성할 수 있게 해주는 고수준 추상화 계층을 제공합니다. NVTabular는 RAPIDS와 Dask를 활용하여 수천 개 GPU로 확장될 수 있으므로 ETL 프로세스가 끝나기를 기다려야 하는 병목 현상이 발생하지 않습니다.

BlazingSQL

BlazingSQL은 GPU를 사용하는 놀라운 속도의 분산 SQL 엔진으로, 역시 Dask-cuDF를 기반으로 합니다. 데이터 사이언티스트는 BlazingSQL을 사용하여 대규모 데이터 레이크를 GPU 가속 분석에 쉽게 연결할 수 있습니다. 전문가들은 단 몇 줄의 코드로 HDFS 및 AWS S3와 같은 데이터 레이크에서 CSV 및 Apache Parquet 등의 원시 파일 형식을 직접 쿼리하여 결과를 GPU 메모리로 직접 파이핑할 수 있습니다.

BlazingSQL의 개발사인 BlazingDB Inc는 RAPIDS에 기여하고 있는 핵심 관계자로, NVIDIA와 긴밀히 협력하고 있습니다.

cuStreamz

NVIDIA는 내부적으로 Dask를 사용하여 제품과 비즈니스 운영의 일부를 개선하고 있습니다. NVIDIA는 Streamz, Dask, RAPIDS를 사용하여 100% 네이티브 파이썬을 사용하는 가속 스트리밍 데이터 플랫폼인 cuStreamz를 구축했습니다. cuStreamz를 사용하여 NVIDIA는 GeForce NOW™, NVIDIA GPU Cloud, NVIDIA DRIVE Sim™과 같은 가장 까다로운 일부 애플리케이션에 대해 실시간 분석을 수행할 수 있습니다. 프로젝트가 시작된 지 얼마 되지 않았지만, NVIDIA는 Dask 기반의 cuStreamz를 사용한 덕분에 다른 스트리밍 데이터 플랫폼에 비해 총 소유 비용을 벌써 크게 절감했습니다.

Dask의 사용 사례

수백 테라바이트 규모의 데이터를 효율적으로 처리할 수 있는 Dask는 머신 러닝(ML) 처리에 병렬성을 추가할 수 있는 강력한 도구입니다. 거대한 다차원 데이터 세트 분석을 더욱 신속하게 실행하도록 지원할 뿐만 아니라 데이터 사이언스 파이프라인 또는 워크플로를 가속화 및 확장합니다. 따라서 Dask는 HPC, 금융 서비스, 사이버 보안, 소매업 등 다양한 분야에 사용할 수 있습니다. 예를 들어, Dask는 넘파이 워크플로를 사용하여 지구과학, 위성 사진, 유전체학, 생물의학 응용 분야, 머신 러닝 알고리즘 등에서 다차원 데이터 분석을 지원할 수 있습니다.

또한 Pandas 데이터프레임을 사용하면 시계열 분석, 비즈니스 인텔리전스, 데이터 준비 등에 Dask를 적용할 수 있습니다. 분산 및 병렬 머신 러닝용 라이브러리인 Dask-ML을 Scikit-learn 및 XGBoost와 함께 사용하면 대규모 모델 및 데이터 세트에서 확장형 훈련 및 예측을 생성할 수 있습니다. 개발자는 표준 Dask 워크플로를 사용하여 데이터를 준비하고 구성한 다음, 이를 XGBoost 또는 텐서플로로 전달할 수 있습니다.

Dask + RAPIDS: 기업의 혁신 지원

많은 기업이 가장 중요한 운영 활동의 일부를 확장하기 위해 Dask와 RAPIDS를 함께 채택하고 있습니다. 업계 리더인 NVIDIA의 최대 파트너 중 일부는 이 기술들을 사용하여 데이터 분석을 강화하고 있습니다. 흥미로운 최신 사례를 일부 소개하면 다음과 같습니다.

Capital One

"가치를 위한 금융 혁신"이라는 모토 아래, Capital One은 고객에게 더 나은 상품과 서비스를 제공하고 전사적으로 운영 효율성을 향상하기 위해 대규모 데이터 분석에 막대한 금액을 투자했습니다. 파이썬에 능숙한 대규모 데이터 사이언티스트 커뮤니티를 보유하고 있던 Capital One은 Dask와 RAPIDS를 사용하여 병렬화가 어려웠던 기존 파이썬 워크로드를 확장 및 가속화하고 빅데이터 분석을 위한 학습 시간을 크게 단축했습니다.

국립 에너지 연구 과학 컴퓨팅 센터(NERSC)

기초 과학 연구를 위한 컴퓨팅 리소스와 전문 지식을 제공하는 NERSC는 연산을 통해 과학적 발견을 가속화하는 데 있어 세계 리더입니다. 이 기관의 사명 중 일부는 연구자들이 슈퍼컴퓨팅을 쉽게 이용할 수 있도록 도와 과학적 탐구를 촉진하는 것입니다. NERSC는 Dask와 RAPIDS를 사용하여 슈퍼컴퓨팅에 대한 지식이 많지 않은 연구자와 과학자도 최신 슈퍼컴퓨터 “Perlmutter”의 놀라운 성능을 쉽게 이용할 수 있도록 했습니다. Dask로 익숙한 인터페이스를 생성함으로써 과학자들이 슈퍼컴퓨팅의 성능에 쉽게 접근할 수 있었고 이에 따라 여러 분야의 혁신 잠재력이 증가하게 되었습니다.

오크리지 국립 연구소

글로벌 팬데믹 중 코로나19를 종식시킬 신약 발견을 위해 '가상 연구소'를 구축한 오크리지 국립 연구소는 혁신의 한계를 허물고 있습니다. 연구원들은 Dask, RAPIDS, BlazingSQL 및 NVIDIA GPU를 사용하여 각자의 노트북에서 강력한 Summit 슈퍼컴퓨터의 파워를 사용하여 소분자 화합물이 SARS-CoV-2 주요 단백질 분해 효소와 결합하는 능력을 검사할 수 있습니다. 이러한 유연한 툴셋 덕분에 엔지니어들은 2주 이내에 이 맞춤형 워크플로를 가동시키고 1초 미만의 속도로 쿼리 결과를 볼 수 있었습니다.

Walmart Labs

소매 분야의 거대 기업인 Walmart는 고객 서비스를 향상하고, 상품 수요를 예측하고, 내부 효율성을 높이기 위해 방대한 양의 데이터 세트를 사용합니다. 이러한 목표를 이루기 위해 대규모 데이터 분석에 의존하는 Walmart Labs는 Dask, XGBoost 및 RAPIDS를 사용하여 훈련 시간을 100배 단축함으로써 빠른 모델 반복 및 정확도 향상을 실현하고 사업 성장을 견인할 수 있었습니다. Dask 덕분에 데이터 사이언티스트들은 NVIDIA GPU의 막강한 파워를 활용하여 가장 어려운 문제를 해결할 수 있게 되었습니다.

기업의 Dask 사례: 시장의 성장

대규모 기관에서의 성공 사례가 늘어남에 따라 Dask 제품 및 서비스에 대한 내부 수요를 충족시킨 기업 사례도 증가하고 있습니다. 다음은 내부의 Dask 수요를 해결하고 있는 몇몇 기업으로, 시장이 성숙해지기 시작했음을 알리는 신호이기도 합니다.

Anaconda

SciPy 에코시스템의 많은 부분과 마찬가지로, Dask는 Anaconda Inc에서 시작되었고 여기에서 호응을 얻어 더 큰 규모의 오픈 소스 커뮤니티로 성장했습니다. 커뮤니티가 커지고 기업들이 Dask를 도입하기 시작하면서, Anaconda는 기업의 Dask 이용을 용이화하기 위해 컨설팅 서비스, 교육, 오픈 소스 지원을 제공하기 시작했습니다. 또한 오픈 소스 소프트웨어의 대표적 지지자인 Anaconda는 여러 Dask 유지 관리 전문가를 고용하여 기업 고객들에게 이 소프트웨어에 대한 심도 있는 지식을 제공하고 있습니다.

Coiled

Dask 프로젝트의 총책임자이자 NVIDIA에서 일한 바 있는 Matthew Rocklin을 비롯하여 Dask를 유지 관리하던 사람들이 설립한 Coiled는 Dask와 관련된 관리형 솔루션을 제공하여 클라우드와 엔터프라이즈 환경 모두에서 쉬운 Dask 사용을 지원할 뿐만 아니라 기업들의 파이썬 분석 최적화에 도움이 될 수 있는 지원 서비스를 제공하고 있습니다. 공개적으로 호스팅된 Coiled의 관리형 배포 제품은 Dask와 RAPIDS 모두를 직관적으로 사용할 수 있는 강력한 방법을 제공합니다.

Quansight

데이터의 가치를 활용할 수 있도록 기업을 지원하는 Quansight는 산업 전반의 데이터 분석을 촉진하기 위한 다양한 서비스를 제공합니다. Anaconda와 마찬가지로, Quansight도 Dask를 사용하는 기업에 컨설팅 서비스와 교육을 제공합니다. PyData 및 NumFOCUS 에코시스템에 뿌리를 깊게 두고 있는 Quansight는 오픈 소스 소프트웨어를 개선하거나 버그를 수정해야 하는 기업에 지원을 제공하기도 합니다.

데이터 사이언스 팀에 Dask가 중요한 이유

결국 중요한 것은 가속화와 효율성입니다. 인터랙티브 알고리즘을 활용하는 개발자들은 입력과 변수로 여러 실험을 할 수 있도록 빠른 실행을 원합니다. 제한적인 메모리를 갖춘 데스크탑과 노트북은 대규모 데이터 세트를 실행할 때 성능이 심각하게 저하될 수 있습니다. Dask에는 단일 CPU를 사용하는 경우에도 처리 효율성을 높여주는, 바로 사용 가능한 기능이 있습니다. 클러스터에 적용하면, 여러 CPU 및 GPU에서 작업을 실행할 때 하나의 명령어로 처리 시간을 90%까지 단축할 수 있습니다. 머신 러닝의 전형적인 대규모 훈련 데이터 세트를 지원하지 못하는 환경에서도 Dask를 사용하여 그러한 데이터 세트를 실행할 수 있습니다.

로우코드 구조, 저오버헤드 실행 모델 그리고 파이썬, Pandas, 넘파이 워크플로에 쉽게 통합할 수 있는 특성 덕분에 Dask는 모든 파이썬 개발자의 툴킷으로 빠르게 자리 잡고 있습니다.

다음 단계