[파이썬] Dask를 통한 병렬 컴퓨팅

반응형
    반응형

    병렬 컴퓨팅 수행하기

    파이썬은 데이터 과학 및 기계 학습 분야에서 인기 있는 언어 중 하나로, 데이터 처리와 분석에 탁월한 퍼포먼스를 자랑합니다. 그러나 대규모 데이터셋을 처리하거나 병렬 컴퓨팅을 수행해야 할 때 파이썬이 느리다보니 여러 라이브러리를 사용하면서 극복하고 있습니다. 빠른 처리를 위해 병렬 컴퓨팅 또한 좋은 방법이 될 수 있는데 Dask를 통해서 병렬 처리를 해보는게 어떨까 싶습니다.

    Dask 소개

    Dask는 병렬 컴퓨팅 및 분산 데이터 처리를 위한 파이썬 라이브러리로, NumPy와 Pandas와 유사한 API를 제공하고 대규모 데이터셋을 처리하고 병렬화하는 기능을 제공합니다.즉, Numpy처럼 Pandas처럼 할수 있으면서 병렬처리 기능을 첨가할 수 있다는 얘기입니다.

     

    Dask의 주요 기능

    • 병렬 컴퓨팅: Dask는 병렬 처리를 통해 데이터 처리 작업을 가속화할 수 있습니다. 작업을 작은 블록으로 분할하고 병렬로 실행하여 빠른 처리를 가능하게 합니다.
    • 분산 컴퓨팅: Dask는 클러스터 컴퓨팅을 지원하여 대용량 데이터셋을 처리하는 데 사용할 수 있습니다. 여러 머신에서 작업을 분산하고 조율할 수 있습니다.
    • 지연된 연산: Dask는 연산을 실제로 실행하는 것이 아니라 그래프를 빌드하고 지연시킵니다. 이를 통해 최적화 및 유연성을 제공합니다.
    • 스케일 가능성: Dask는 작은 워크스테이션부터 대규모 클러스터까지 다양한 환경에서 작동할 수 있으며, 작업 부하에 따라 확장 가능합니다.

    Dask 사용 예시

    • 대용량 데이터 프레임 처리: Dask DataFrame을 사용하여 대규모 데이터셋을 Pandas와 유사하게 처리할 수 있습니다.
    • 병렬 연산: Dask Bag 및 Dask Array를 사용하여 데이터 처리 작업을 병렬로 실행할 수 있습니다.
    • 클러스터 컴퓨팅: Dask의 클러스터 기능을 사용하여 여러 서버에서 작업을 분산하고 조율할 수 있습니다.
    • Dask 를 활용한 데이터과학:
      Dask는 Dask-ML, Dask-Image, Dask-CUDA 등과 같은 다양한 확장 라이브러리를 제공하며, 데이터 과학 및 기계 학습 작업을 보다 쉽게 수행할 수 있도록 지원합니다.

    간단한 작업으로 예를 들면 아래와 같이 합니다.

     

    Dask 설치

    Dask를 쓰려면 conda나 pip으로 설치를 해야합니다.

    다음과 같이 합니다.

    #conda
    conda install dask
    
    #pip
    pip install dask[complete]

     

    Pandas처럼 쓰기

    판다스처럼 데이터프레임을 불러올 수 있습니다.
    아래 예시는 단순히 불러온 데이터프레임에서 mean을 구하는 방법을 병렬로 처리하는 방식입니다.
    예전에 대용량 데이터를 불러올 때 dask를 썼는데 그에 대한 내용은 다음 포스팅을 살펴보시기 바랍니다.

    # pandas로 mean 구하기
    import pandas as pd                     
    df = pd.read_csv('test.csv')     
    df.groupby(df.user_id).value.mean() 
    
    # dask로 mean 구하기
    import dask.dataframe as dd
    df = dd.read_csv('test.csv')
    df.groupby(df.user_id).value.mean().compute()

    Numpy 처럼 사용하기

    numpy는 값을 벡터로 해서 다중계산이 가능한것이고 Dask는 numpy처럼 다중계산이 가능합니다. 장치가 병렬컴퓨팅으로써 일을 수행한다는 게 약간 다릅니다.

    # numpy로 편차 구하기 
    import numpy as np 
    f = h5py.File('myfile.hdf5') 
    x = np.array(f['/data'])
    x-x.mean(axis=1)`
    
    # dask로 numpy처럼 array로 불러와 편차 구하기
    import dask.array as da  
    f = h5py.File('myfile.hdf5')  
    x = da.from\_array(f\['/data'\],chunks=(1000,1000))  
    x-x.mean(axis=1).compute()

    마치며

    Dask는 파이썬 데이터 과학자 및 엔지니어에게 데이터 처리 및 병렬 컴퓨팅을 위한 강력한 도구를 제공합니다. 대규모 데이터셋을 다루고 처리 과정을 최적화하는 데 Dask를 사용하여 데이터 과학 프로젝트를 더욱 효율적으로 수행할 수 있습니다.

    참고 자료 및 레퍼런스:

     

    댓글

    Designed by JB FACTORY

    ....