728x90
joblib 사용 병렬연산 (python)¶
오늘은 파이썬 모듈 joblib을 이용하여 병렬연산 하는 방법을 알아보겠다.
이는 cpu 코어를 활용한 방법으로 각자 코어수에 맞추어 잘 활용하면 된다.
먼저 joblib 모듈의 Parallel, delayed 함수를 import 한다. 그리고 시간 계산을 위해 time 모듈도 import 해준다.
In [1]:
import time
from joblib import Parallel, delayed
그리고 예시를 위해 아래와 같은 함수를 정의하였다. 1부터 100만까지 더하는 함수이다.
In [2]:
def make_million(p):
temp_num = 0
for k in range(1000000):
temp_num += k
return temp_num
위 함수를 아무 의미 없지만 1000번 돌리는 상황이라고 가정하자. 그리고 그 1000번의 결과물을 저장해야되는 상황이라고 하자.
이를 일반 for문으로 구현하면 아래와 같다.
In [3]:
#일반 for문
start = time.time()
test_li = []
for k in range(1000):
test_li.append(make_million(k))
print(time.time() - start)
35.87306213378906
In [4]:
print(test_li[:10])
[499999500000, 499999500000, 499999500000, 499999500000, 499999500000, 499999500000, 499999500000, 499999500000, 499999500000, 499999500000]
일반 for문으로 구현했을시 약 36초의 시간이 걸린것을 확인할 수 있다.
이제 이를 병렬 연산으로 구현해보자. Parallel, delayed 함수를 사용하였고 cpu 코어는 4개를 사용하였다.
In [5]:
#병렬문
start = time.time()
test_li = []
test_li = Parallel(n_jobs=4)(delayed(make_million)(i) for i in range(1000))
print(time.time() - start)
10.16162919998169
In [6]:
print(test_li[:10])
[499999500000, 499999500000, 499999500000, 499999500000, 499999500000, 499999500000, 499999500000, 499999500000, 499999500000, 499999500000]
for문에 비해 3.6배 정도 빨라진걸 확인할 수 있다. 즉 코어수를 4로 했기 때문에 약 4배 빨라진 것이다.
코어수를 더 많이 활용할 수 있다면 더욱 더 빨라질것이라 예상할 수 있다.
그리고 이는 10시간 이상 걸리는 등 오래걸리는 작업에서는 상당한 메리트가 될 수 있다.
'프로그래밍 & 알고리즘 & IT > Python' 카테고리의 다른 글
[파이썬] 파이썬 pandas에서 자주 쓰는 함수 - column rename (0) | 2023.06.14 |
---|---|
파이썬 mglearn 패키지 import 에러 대처하기. (2) | 2022.10.10 |