Dask 소개

Python에서 Dask로 병렬 프로그래밍

James Fulton

Climate Informatics Researcher

멀티코어로 계산 가속화

  • 컴퓨터에는 다중 코어가 있습니다
  • 이를 활용하도록 코드를 작성해야 합니다
  • Dask 패키지로 가능합니다
  • 계산을 더 빠르게 완료합니다
Python에서 Dask로 병렬 프로그래밍

동시성 프로그래밍

작업 목록과 그 사이를 지나는 하나의 경로를 보여주는 다이어그램.

Python에서 Dask로 병렬 프로그래밍

멀티스레딩

작업 목록이 둘로 나뉩니다.

Python에서 Dask로 병렬 프로그래밍

멀티스레딩

두 작업 집합이 서로 다른 CPU 코어로 전송됩니다.

Python에서 Dask로 병렬 프로그래밍

멀티스레딩

두 작업 집합이 동일한 Python 프로세스 내에서 실행됩니다.

Python에서 Dask로 병렬 프로그래밍

병렬 처리

두 작업 집합이 서로 다른 Python 프로세스에서 실행됩니다.

Python에서 Dask로 병렬 프로그래밍

병렬 프로그래밍

멀티스레딩

두 작업 집합이 하나의 Python 프로세스 내 두 CPU 코어에서 실행됩니다.

병렬 처리

두 작업 집합이 서로 다른 두 Python 프로세스 내 두 CPU 코어에서 실행됩니다.

Python에서 Dask로 병렬 프로그래밍

지연 평가

  • 결과가 필요할 때까지 계산을 지연합니다
  • 결과 계산 단계는 나중을 위해 저장됩니다
  • Dask가 작업을 스레드/프로세스로 분할합니다
Python에서 Dask로 병렬 프로그래밍

Dask delayed

from dask import delayed

def my_square_function(x):
    return x**2

# Create delayed version of above function delayed_square_function = delayed(my_square_function)
Python에서 Dask로 병렬 프로그래밍

Dask delayed

from dask import delayed

def my_square_function(x):
    return x**2

# Create delayed version of above function
delayed_square_function = delayed(my_square_function)

# Use the delayed function with input 4
delayed_result = delayed_square_function(4)


# Print the delayed answer print(delayed_result)
Delayed('my_square_function-7f71b132-70a9-457a-aa52-604e8c34f8a7')
Python에서 Dask로 병렬 프로그래밍

Dask delayed

from dask import delayed

def my_square_function(x):
    return x**2

# Delay and use function
delayed_result = delayed(my_square_function)(4)

print(delayed_result)
Delayed('my_square_function-7f71b132-70a9-457a-aa52-604e8c34f8a7')
Python에서 Dask로 병렬 프로그래밍

결과 계산하기

from dask import delayed

def my_square_function(x):
    return x**2

delayed_result = delayed(my_square_function)(4)

real_result = delayed_result.compute() # <- This line is where the calculation happens

# Print the answer
print(real_result)
16
Python에서 Dask로 병렬 프로그래밍

지연 객체에 연산 사용

delayed_result1 = delayed(my_square_function)(4)

# Math operations return delayed object
delayed_result2 = (4 + delayed_result1) * 5

print(delayed_result2.compute())
100
Python에서 Dask로 병렬 프로그래밍

지연 평가

x_list = [30, 85, 14, 12, 27, 62, 89, 15, 78,  0]

sum_of_squares = 0

for x in x_list:
    # Square and add numbers
    sum_of_squares += delayed(my_square_function)(x)
Python에서 Dask로 병렬 프로그래밍

지연 평가

x_list = [30, 85, 14, 12, 27, 62, 89, 15, 78,  0]

sum_of_squares = 0

for x in x_list:
    # Square and add numbers
    sum_of_squares += delayed(my_square_function)(x)

result = sum_of_squares.compute()

# Print the answer
print(result)
27268
Python에서 Dask로 병렬 프로그래밍

계산 공유

delayed_intermediate = delayed(my_square_function)(3)

# These two results both use delayed_intermediate
delayed_result1 = delayed_intermediate - 5
delayed_result2 = delayed_intermediate + 4

# delayed_3_squared will be computed twice
print('delayed_result1:', delayed_result1.compute())
print('delayed_result2:', delayed_result2.compute())
delayed_result1: 4
delayed_result2: 13
Python에서 Dask로 병렬 프로그래밍

계산 공유

import dask

# delayed_intermediate will be computed once
comp_result1, comp_result2 = dask.compute(delayed_result1, delayed_result2)

print('comp_result1:', comp_result1)
print('comp_result2:', comp_result2)
delayed_result1: 4
delayed_result2: 13
Python에서 Dask로 병렬 프로그래밍

Ayo berlatih!

Python에서 Dask로 병렬 프로그래밍

Preparing Video For Download...