Final project을 할 때, 용량이 너무 큰 데이터를 가지고 계산을 하다 colab pro 마저도 뻑간 경험이 있다.
현업에서도 이런 경우가 많은데, 이럴 땐 어떻게 하는지 알아보기 위해 Dask를 공부했다.
기본 개념은 쉽다. 코드를 보고싶다면, youtube에 있는 영상을 직접 보면서 클론 코딩을 할 것을 추천한다.
이 글은 그냥 dask의 기본 개념에 대해 정리한 글이다. 뭔지도 모르고 사용하면 의미가 없으니까.
Dask
"Dask is a flexible library for parallel computing in Python."
Dask는 병렬 컴퓨팅을 위한 라이브러리이다.
구성
- Dynamic task scheduling
- 계산에 최적화된 Dynamic task scheduling으로, 대화형에 최적화되어있음.
- 예를 들어 데이터 분석을 할 때, 전처리를 수행하고, Matplotlib, Seaborn등의 라이브러리를 사용하여 데이터를 시각화하는데 사용할 수 있음.
- 또한 ML에서 학습 모델을 훈련하고 테스트하는데 사용 가능함.
- “Big Data” collections
- Numpy, Pandas같은 공통 interface를 memory 또는 분산 환경으로 확장
- 쉽게 말해, 메모리보다 큰 대규모 데이터 세트를 처이할 수 잇도록 분산 computing 환경에서 사용된다고 보면 됨.
- 병렬 처리를 함으로써 대규모 데이터 세트를 효율적으로 처리 가능함
위의 두 가지는 Dask의 핵심 구성 요소로, 대규모 데이터 세트를 효율적으로 처리하고, Data Scientist 또는 Engineer가 복잡한 계산을 수행할 수 있도록 함
장점
- Familiar
- python 유저에게 익숙한 Numpy의 array 및 Pandas의 DataFrame 객체 제공
- Flexible
- 더 많은 맞춤형 워크로드 및 다른 프로젝트와의 통합을 위한 task scheduling interface를 제공
- Native
- PyData stack에 access하여 순수 Python에서 분산 컴퓨팅 활성화
- 쉽게 말해, Python에서 일반적으로 사용되는 오픈 소스 라이브러리를 가져와 사용할 수 있다는 뜻
- Fast
- 빠른 수치 알고리즘에 필요한 낮은 overhead, 짧은 대시 시간 및 최소한의 직렬화로 작동
- Scales up
- 1,000개의 코어가 있는 클러스터에서 탄력적 실행
- Scales down
- 단일 프로세스로 laptop에서의 설정 및 실행 간단
- Responsive
- 대화형 컴퓨팅을 염두에 두고 설계되어 신속한 피드백 및 진단 제공
<용어 사전>
1) task scheduling interface
- 유저가 task와 종속성을 정의하고 관리할 수 있도록 돕는 API 혹은 도구 세트
- 작업을 실행하는 순서와 각 작업에 필요한 리소스 지정하는 방법 제공
2) overhead
-
프로그램 실행 중, 동떨어진 위치의 코드를 실행해야 할 때, 추가적으로 시간, 메모리, 그리고 자원이 사용되는 현상
-
특정 기능을 수행하는데 드는 간적적인 시간, 메모리 등의 자원을 말함
ex) 10초 걸리는 기능이 간접적 원인으로 20초 걸렸을 때 -> overhead : 10초
refer
-
dask documentation
-
기록하는 동구님의 tistory