상세 컨텐츠

본문 제목

파이썬 numba 모듈 패키지 속도 향상 개선

코딩

by 땡감 2023. 1. 16. 13:10

본문

반응형

파이썬이라는 언어는 매력적인 언어임에는 분명하지만

C언어에 비하면 속도가 떨어진다는 단점은 명확하다.

이는 언어에 따라 컴파일러 방식, 인터프리터방식으로 나뉘기때문인데

C언어는 컴파일러 방식, 파이썬는 인터프리터 방식이다.

방식에 대한 내용은 이야기가 길어지므로 생략하고

이번 포스팅에서는 파이썬을 인터프리터 방식이 아닌

컴파일러 방식처럼 사용하는 방법에 대해 포스팅하겠다.

 

가장 먼저 numba 모듈을 설치하자.

numba 모듈은 파이썬 소스를 인터프리터 방식이 아닌

컴파일러 방식으로 구동되게 도와주는 모듈이다.

엄밀히 따지면 C언어 처럼 완벽한 컴파일러 방식은 아니고

실행 즉시 컴파일을 해준다고해서 Just Im Time 컴파일,

줄여서 JIT이라고 불리고 있다.

 

numba 모듈 사용방법 역시 간단하다.

numba를 모듈을 적용할 함수, 즉 JIT 방식으로 구동할 함수 위에 단 한줄만 추가하면 된다.

그 한 줄은 @로 시작하는데 이를 데코레이터라고 부르며

JustInTime이 약자인 jit을 붙여주면 된다.

nopython=True 구문은 JIT 방식으로 컴파일 할 수 없는 코드가 있으면 오류를 출력하고

위의 구문이 빠져있으면 JIT 방식으로 수행할 수 없어도 오류가 발생하지 않고

파이썬 원래의 인터프리터방식으로 실행된다.

 

import time
from numba import jit


def f1():
    total = 0
    for i in range(10000):
        for j in range(10000):
            total += j

@jit (nopython=True)
def f2():
    total = 0
    for i in range(10000):
        for j in range(10000):
            total += j


start = time.time()
f1()
end = time.time()
print(end - start)

start = time.time()
f2()
end = time.time()
print(end - start)

그럼 이제 코드를 작성해 테스트 해보자.

f1 함수는 인터프리터 방식으로 수행되고

f2 함수는 JIT 방식으로 수행되는 함수이다.

함수안의 내용은 동일하고 함수 구현부분위에 jit 데코레이터 유무의 차이만 존재한다.

 

수행속도 차이가 눈에 보이는가?

2중 for문을 통한 단순 연산에서 엄청난 속도 차이를 보여주고 있다.

numba의 맛을 알아버렸으니 이제 헤어나오지 못 할듯 하다.

 

하지만 모든 함수에 다 numba를 사용할 수 있는건 아니다.

위처럼 윈도우 스크린샷을 찍는 코드에는 적용이 불가능하며

실행시 오류가 발생한다.

 

nopython=False 로 변경하면 실행은 되지만

JIT 모드로 구동이 되지 않고 경고문이 출력된다.

이상 파이썬에서 제공되는 numba 모듈을 통해

파이썬을 JIT 컴파일러로 구동하는 방법에 대해 알아봤다.

반응형

관련글 더보기

댓글 영역