Numba
1. 개요
Numba는 파이썬 함수를 JIT 컴파일하여 수치 계산의 속도를 높이는 오픈 소스 프로젝트이다. `@jit` 데코레이터를 사용하여 파이썬 함수에 적용하며, 함수가 호출될 때 컴파일이 수행된다. Numba는 CPU에서 빠른 성능을 보이며, 엔비디아 CUDA 및 AMD ROCm HSA를 통해 GPU 코드로 컴파일하여 대규모 병렬 연산을 지원한다. 파이썬에서 빠른 수치 계산을 위한 다른 방법으로는 Cython, Pythran, PyPy 등이 있다.
-
파이썬 구현 -
사이썬
사이썬은 파이썬 문법에 C 언어의 정적 타입 선언을 추가하여 성능을 향상시키는 프로그래밍 언어이자 컴파일러로, 파이썬과 C/C++ 라이브러리 간 연동을 용이하게 하여 과학 컴퓨팅 라이브러리에서 활용된다. -
파이썬 구현 -
스택리스 파이썬
스택리스 파이썬은 파이썬 인터프리터 내에서 마이크로 스레드를 이용해 프로그램 실행을 관리하는 그린 스레드 형태로서, 이벤트 기반 비동기 프로그래밍의 대안으로 사용되며, CPython의 GIL로 병렬 처리는 불가하지만 greenlet을 통해 그린 스레딩 솔루션을 제공한다. -
파이썬 -
귀도 반 로섬
귀도 반 로섬은 네덜란드 출신의 프로그래머로, 1989년 크리스마스 기간에 취미로 파이썬 프로그래밍 언어를 개발했으며, 구글과 드롭박스 등에서 일하다 2020년 마이크로소프트에 수석 엔지니어로 합류했다. -
파이썬 -
모조 (프로그래밍 언어)
모조는 모듈러사에서 개발한 파이썬과 유사한 구문의 고성능 프로그래밍 언어로, AI 애플리케이션 개발에 초점을 맞추고 러스트의 영향을 받은 메모리 안전성을 제공하며 향후 오픈 소스로 전환될 예정이다.
2. 예시
Numba는 `numba.jit` 데코레이터를 파이썬 함수에 적용하여 사용할 수 있다. 다음은 몬테카를로 방법을 사용하여 원주율(π) 값을 추정하는 예제 코드이다. JIT 컴파일은 함수가 호출될 때 투명하게 발생한다.
import numba
import random
@numba.jit
def monte_carlo_pi(n_samples: int) -> float:
"""몬테 카를로"""
acc = 0
for i in range(n_samples):
x = random.random()
y = random.random()
if (x2 + y2) < 1.0:
acc += 1
return 4.0 * acc / n_samples
>>> monte_carlo_pi(1000000)
3.14
Python 함수에 `@jit` 데코레이터를 붙이면 실행 시점에 JIT 컴파일된다.
다음 예제에서 Numba 0.27.0 버전에서는 Python보다 200배 빠르게 동작하며, NumPy 내장 함수 `sum()`보다 30% 더 빠르게 동작한다.
from numba import jit
@jit
def sum1d(ary):
total = 0.0
for i in range(ary.shape[0]):
total += ary[i]
return total
3. 실행 방식
Numba는 `@jit` 데코레이터를 통해 지정된 파이썬 함수를 실행 시점에 JIT 컴파일한다. 단순 반복문을 사용하는 코드의 경우, Numba는 일반적인 파이썬 코드보다 훨씬 빠른 속도로 동작하며, NumPy 내장 함수와 비교해도 경쟁력 있는 성능을 보인다.