Numba 登陆浏览器:JupyterLite 加速科学计算
Numba in the Browser: Unlocking a New Scientific Python Stack in JupyterLite
JupyterLite 让 Python 内核在浏览器中本地运行,但一直缺少 Numba 这一关键加速组件。如今,我们成功将 Numba JIT 编译器及其生态完整移植到浏览器端,通过 WebAssembly 实现无需远程服务器的本地编译与执行。实测显示,在浏览器中 Numba 能带来约 250 倍的加速效果,远超原生环境的 90 倍。这一突破不仅解决了浏览器安全模型下的可执行内存难题,还通过 emscripten-forge 实现了 PyTensor、PyMC 等依赖 Numba 的科学计算库的浏览器化运行,为交互式科学计算打开了全新可能。
这项工作证明,复杂的编译器栈不必止步于 Web 浏览器的边界。
HN 评论区
16- momojo
太棒了!对于那些不熟悉 Numba 的朋友来说,它有助于弥合在使用 Python 而非像 C 或 C++ 这样更低层但更快的语言时,始终存在的那个性能与易用性之间的权衡。
当然你可以写 Cython,但那样你就得有一个构建步骤,并且要为每个平台和 Python 版本制作 wheel 包。虽然 numpy 这些年确实变快了,但你仍然受限于 GIL。
Numba 有点神奇,因为你可以写出感觉像 numpy 的代码,却获得字面意义上的字节码级性能。
但这也是有代价的,当我最近导入一个 matplotlib 的色图扩展时,就硬生生地学到了这一点。
我以为最多只会导入几兆字节。但光是 Numba 加上 llvmlite 就快 100MB 了!
在某些应用中这可能只是沧海一粟,但对于一个只有两条需要 JIT 编译的热路径的色图库来说,这未免太过分了。
不过总体而言,我很欣赏这项成就,也很喜欢大家在浏览器端(也就是本地优先)科学计算方面所做的努力!
- rossant
恭喜取得这项严肃的工程成就!
十多年前,我也以更原始得多的方式尝试过类似的想法(https://cyrille.rossant.net/numpy-browser-llvm/)。很高兴看到自那以来取得了如此大的进步。
- lmc
有没有浏览器版与非浏览器版的基准测试对比?
也就是说,下面这句话背后的绝对数值是多少:
> Numba 在 WebAssembly 中提供了大约 250 倍的加速,而原生环境下约为 90 倍。