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
jjongguet