Numba는 llvmlite 파이썬 패키지를 통해 LLVM을 사용하여 파이썬 및 NumPy의 하위 집합을 빠른 기계 코드로 변환하는 오픈 소스 JIT 컴파일러이다. 이는 종종 사소한 코드 변경만으로 CPU 및 GPU용 Python 코드를 병렬화하기 위한 다양한 옵션을 제공한다.
Numba는 2012년 트래비스 올리펀트(Travis Oliphant)에 의해 시작되었으며 이후 깃허브 저장소에서 자주 릴리스되면서 활발한 개발이 진행되었다. 이 프로젝트는 DARPA, 고든 앤드 베티 무어 재단(Gordon and Betty Moore Foundation), 인텔, 엔비디아 및 AMD, 깃허브의 기여자 커뮤니티의 지원을 받아 아나콘다(Anaconda, Inc.)의 개발자가 주도한다.
Numba는 수치 계산을 수행하는 Python 함수에 numba.jit 데코레이터를 적용하여 사용할 수 있다.
import numba
import random
@numba.jit
def monte_carlo_pi(n_samples: int) -> float:
"""Monte Carlo"""
acc = 0
for i in range(n_samples):
x = random.random()
y = random.random()
if (x**2 + y**2) < 1.0:
acc += 1
return 4.0 * acc / n_samples
JIT 컴파일은 함수가 호출될 때 투명하게 발생한다.
>>> monte_carlo_pi(1000000)
3.14