Numba 소개 — 파이썬을 빠르게 만드는 JIT 컴파일러

Numba 소개

반복이 많고 숫자에 집중된 파이썬 코드는 느릴 때가 많아요. Numba는 그런 코드를 빠른 머신코드로 번역하는 오픈소스 JIT 컴파일러예요. 파이썬 함수를 실행 시점에 산업 표준인 LLVM 컴파일러 라이브러리로 최적화된 머신코드로 바꿔서, Numba로 컴파일한 수치 알고리즘은 C나 FORTRAN 속도에 근접할 수 있어요.

출처: https://numba.pydata.org/

핵심 특징

  • 파이썬 인터프리터를 교체하거나, 별도 컴파일 단계를 돌리거나, C/C++ 컴파일러를 설치할 필요 없음
  • 파이썬 함수에 Numba 데코레이터 하나만 붙이면 됨
  • NumPy 배열·함수와 잘 어울리도록 설계됨 (데이터 타입·레이아웃별로 전문화 코드 생성)
  • Jupyter 노트북의 인터랙티브 컴퓨팅, Dask·Spark 같은 분산 실행 프레임워크와도 잘 동작

예제: 몬테카를로 파이

from numba import njit
import random

@njit
def monte_carlo_pi(nsamples):
    acc = 0
    for i in range(nsamples):
        x = random.random()
        y = random.random()
        if (x ** 2 + y ** 2) < 1.0:
            acc += 1
    return 4.0 * acc / nsamples

병렬·벡터화·GPU

  • 단순화된 스레딩: @njit(parallel=True)prange로 루프를 병렬 실행
  • SIMD 벡터화: 일부 루프를 SSE·AVX·AVX-512에 맞게 자동 변환해 2~4배 속도 향상
  • GPU 가속: @njit(parallel=True)prange로 루프를 병렬 실행하는 예시:
@njit(parallel=True)
def simulator(out):
    # parallel loop
    for i in prange(out.shape[0]):
        out[i] = run_sim()

NVIDIA CUDA 지원으로 순수 파이썬에서 병렬 GPU 알고리즘을 작성할 수 있어요.

이식성

런타임에 컴파일이 이뤄지므로 소스는 순수 파이썬으로 남아요. 200개 이상 플랫폼 구성에서 지속 테스트하며, Intel·AMD x86, POWER8/9, ARM(Apple M1 포함) CPU, NVIDIA GPU, Python 3.9-3.12, Windows/macOS/Linux를 지원해요.

더 알아보기