Numbaがブラウザで動く:JupyterLiteで科学計算Pythonスタックの新境地
Numba in the Browser: Unlocking a New Scientific Python Stack in JupyterLite
JupyterLiteとemscripten-forgeの取り組みにより、Numba JITコンパイラが完全にブラウザ内で動作するようになりました。WebAssembly上で約250倍の高速化を達成し、ネイティブ環境(約90倍)を上回る性能向上を実現。LLVM、LLD、llvmliteをWebAssembly対応させ、動的リンクと実行を可能にしました。これにより、PyTensor、PyMC、interpolation.py、Dolo.pyなどNumbaエコシステムのパッケージもブラウザで利用可能になり、科学計算の可能性が広がります。
WebAssemblyターゲットのSIMDなどの機能も、数値カーネルにとってエキサイティングな方向性を提供します。
HNでの議論
16- momojo
これは素晴らしい!Numbaに詳しくない方のために説明すると、Numbaは、PythonをCやC++のような低レベルで高速な言語の代わりに使うときに常に存在していた、パフォーマンスと使いやすさのトレードオフを埋めるのに役立ちます。確かにCythonを書くこともできますが、その場合はビルドステップが必要で、すべてのプラットフォームとPythonバージョンごとにwheelを作らなければなりません。NumPyも年々高速化していますが、それでもGILに制約されます。Numbaはちょっとした魔法で、NumPyのように感じられるコードを書くだけで、文字通りバイトコードレベルのパフォーマンスが得られます。しかし、これにはコストがかかります。最近matplotlibのカラーマップ拡張機能をインポートしたときに、私はそれを痛感しました。せいぜい数メガバイトをインポートするだけだと思っていました。ところが、Numbaとllvmliteだけでほぼ100MBもあるのです!これはアプリケーションによっては大したことではないかもしれませんが、JITコンパイルが必要なホットパスが2つしかないカラーマップライブラリにとっては、過剰です。とはいえ、全体的にはこの成果を愛していますし、ブラウザ内(別名ローカルファースト)での科学計算のために行われていることも大好きです。
- rossant
本格的なエンジニアリングの成果、おめでとうございます!私は10年以上前に、はるかに原始的な方法で同様のアイデアを試したことがあります(https://cyrille.rossant.net/numpy-browser-llvm/)。それ以来、これほど進歩しているのを見られて嬉しいです。
- lmc
ブラウザ版と非ブラウザ版のベンチマークはありますか?つまり、次の記述の背後にある絶対的な数値は何ですか?
> NumbaはWebAssemblyで約250倍の高速化を実現し、ネイティブでは約90倍です。