일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 컨텍스트 매니져
- FOR
- 동화책
- 아기동화
- 퓨샷
- Docker
- Cognitive Search
- 도커
- AI 동화
- Cognitive Service
- 인컨텍스트 러닝
- dask
- 반복문
- Compute
- 대스크
- 인자 힌트
- GPT
- 제로샷
- Azure
- Python
- 토끼
- 조건문
- UDF
- 검색
- 파이썬
- 모험
- Ai
- 프롬프트 튜닝
- Redshift
- 파라미터 힌트
- Today
- Total
호랭이 분석가
Dask #1. 대스크 Delayed 를 사용한 병렬화와 visualize, compute 본문
1. Delayed
Delayed 함수를 비교하기 위하여 파이썬 함수와 비교하면서 보겠습니다.
# 기본 함수
from time import sleep
def inc(x) :
sleep(5)
return x + 1
def add(x, y) :
sleep(5)
return x + y
%%time
x = inc(1)
y = inc(2)
z = add(x, y)
파이썬에서는 x > y > z 순으로 순차적으로 실행하기 때문에 15초가 걸립니다.
import dask.delayed as delayed
@delayed
def inc(x) :
sleep(5)
return x + 1
@delayed
def add(x, y) :
sleep(5)
return x + y
Dask의 delayed 함수를 사용하기 위하여 데코레이터를 사용합니다만, 파이썬과 비교를 하기 위해 기본 함수를 사용하여 비교하기를 가정합니다. 데코레이션을 사용하지 않고 사용하기 위해서는 함수 형태로 사용해주시면 됩니다.
%%time
x = delayed(inc)(1)
y = delayed(inc)(2)
z = delayed(add)(x, y)
z는 지연(Delayed) 객체입니다. 모든 함수에 대한 참조와 해당 입력 및 서로 간의 관계를 포함하여 최종 결과를 계산하는 데 필요한 모든 것을 갖고 있습니다.
z
z가 최종 결과를 산출하는데 필요한 모든 정보를 가지고 있으며 이를 graphviz를 사용해 시각화 할 수 있습니다.
z.visualize()
최종 결과를 직접 산출하기 위해서는 compute 함수를 사용합니다.
%%time
z.compute()
x와 y를 병렬화하여 동시 실행 후 z를 실행하기 때문에 시간은 10초가 걸렸습니다.
동시 실행을 하기 때문에 단순 비교임에도 sleep(5) 만큼의 차이를 보였습니다.
2. Delayed 함수를 사용한 For문 계산
data = [1, 2, 3, 4, 5]
위에서 사용한 기본 함수들과 1~5의 값을 가진 리스트를 통하여 for문 계산을 진행하겠습니다.
%%time
results = []
for x in data :
y = inc(x)
results.append(y)
total = sum(results)
리스트가 갖고 있는 총 5개의 값을 계산하기 위하여 25초의 시간이 소요되었습니다.
%%time
results = []
for x in data :
y = delayed(inc)(x)
results.append(y)
total = delayed(sum)(results)
total.compute()
total.visualize()
Delayed 연산을 통해 총 5개의 데이터 처리를 위한 for문 계산이 5초 소요되었습니다. 동시에 계산하기 때문에 sleep(5) 만큼의 시간만 소요되었습니다.
Dask의 delayed 함수를 사용하면 Python의 기본 연산을 조금 더 효율적으로 진행할 수 있습니다.
'Python > Dask' 카테고리의 다른 글
Dask #4. 대스크 Dataframe과 keras(기초) (0) | 2022.05.10 |
---|---|
Dask #3. 대스크 compute()와 persist() (0) | 2022.05.09 |
Dask #2. 대스크 Redshift 및 DB, S3, HDFS, parquet, csv 데이터 불러오기 (0) | 2022.04.12 |
Dask #0. 대스크 시작하기 (0) | 2022.04.07 |