NumbaでPython3を高速化する

JIT(just-in-time compile)でPython3の処理を高速化する。環境はUbuntu 14.04 + Python3 + no Anaconda。

公式サイトでは、C, C++, Fortran同様に高速化とあるが、Cythonの方が1.5倍くらい速いらしい。

ただし、Numbaの方が素のPythonのまま高速化できる。

1. インストール

Numbaを利用するにはllvmliteが必要

Anacondaを利用している場合公式マニュアルがあるのでそちらを参照。今回はlivmliteを公式サイトに従ってビルドしてインストールする。

# apt-get install llvm-3.6-dev

このままだとllvm-configがないエラーに遭遇するため、リンクをはる。

# ln -s /usr/bin/llvm-config-3.6 /usr/bin/llvm-config

llvmliteをビルド、インストール

$ python3 setup.py build
$ python3 runtests.py → ビルドが成功していることの確認。
# python3 setup.py install

Numbaをインストール

# pip3 install numba

 

2. ベンチマーク

下記コードを実行すると、以下の結果となり80倍程度速くなっている。

cnt=4999999950000000, time=7.7s → 通常
cnt=4999999950000000, time=0.1s → Numba

コード。

import time
from numba import jit

def func():
  t = time.time()

  cnt = 0
  for i in range(int(1e8)):
    cnt += i
  print('cnt={}, time={:.1f}s'.format(cnt, time.time() - t))

@jit
def func_numba():
  t = time.time()

  cnt = 0
  for i in range(int(1e8)):
    cnt += i
  print('cnt={}, time={:.1f}s'.format(cnt, time.time() - t))

func()
func_numba()

■参考文献