DASK DELAYED
- dask.delayed 인터페이스로 테스크를 병렬화시켜서 할당하는게 가능함
- 말 그대로 Task를 DELAYED(지연) 시키는 기능이 가능하다
- 이 기능을 써서 내가 원하는 시점에 특정 TASK를 사용할수 있게 한다
e.g.
def inc(x):
return x + 1
def double(x):
return x * 2
def add(x, y):
return x + y
data = [1, 2, 3, 4, 5]
#Sequential
output = []
for x in data:
a = inc(x)
b = double(x)
c = add(a, b)
output.append(c)
total = sum(output)
#Parallel
import dask
output = []
for x in data:
a = dask.delayed(inc)(x)
b = dask.delayed(double)(x)
c = dask.delayed(add)(a, b)
output.append(c)
total = dask.delayed(sum)(output)
import dask
@dask.delayed
def inc(x):
return x + 1
@dask.delayed
def double(x):
return x * 2
@dask.delayed
def add(x, y):
return x + y
data = [1, 2, 3, 4, 5]
output = []
for x in data:
a = inc(x)
b = double(x)
c = add(a, b)
output.append(c)
total = dask.delayed(sum)(output)
- 혹은 이렇게 데코레이터를 선언해줘도 delayed적용시킴
주의사항
DASK DELAYED는 Operator순서가 매우 중요하다
https://docs.dask.org/en/stable/delayed.html
dask.compute
dask.compute()
는 모든 작업을 일시중지 시키는 효과가 있으므로, 이를 오버헤드로 보는것같다.dask.compute()
는 최대한 적게 해주는것이 좋다
- 왼쪽은 거대한 delayed한개, 오른쪽은 작은 delayed가 여러개로 구성했는데
dask.delayed는 DASK관점에서는 단일 태스크다 - 왼쪽처럼 하게되면 결국엔 1개의 태스크가
f
를 맡게되는거고 - 오른쪽방향처럼 하게되면 총 3개의 태스크가
load, process, delayed
를 담당하는거다
DASK FUTURES
동시성 작업을 진행하여 Delayed와 비슷하게 타임을 조절할수 있는 dask futures에 대해서 잠깐 알아보면 다음과같다
- DASK futures는 병렬태스크 실행하는
Python concurrent.futures
에서 그대로 가져왔다 - 그러나 DASK futures는 Concurrency(동시성)을 제어하는경우 이외는 잘 쓰지않는다
- https://docs.dask.org/en/stable/futures.html
'DATA Engineering > Dask' 카테고리의 다른 글
DASK Scheduler설명. Client (0) | 2022.11.01 |
---|---|
DASK DataFrame 과 꿀팁. Shuffling전략 (0) | 2022.11.01 |