Numba 登陆浏览器:JupyterLite 加速科学计算

Numba in the Browser: Unlocking a New Scientific Python Stack in JupyterLite

Numba 登陆浏览器:JupyterLite 加速科学计算

JupyterLite 让 Python 内核在浏览器中本地运行,但一直缺少 Numba 这一关键加速组件。如今,我们成功将 Numba JIT 编译器及其生态完整移植到浏览器端,通过 WebAssembly 实现无需远程服务器的本地编译与执行。实测显示,在浏览器中 Numba 能带来约 250 倍的加速效果,远超原生环境的 90 倍。这一突破不仅解决了浏览器安全模型下的可执行内存难题,还通过 emscripten-forge 实现了 PyTensor、PyMC 等依赖 Numba 的科学计算库的浏览器化运行,为交互式科学计算打开了全新可能。

这项工作证明,复杂的编译器栈不必止步于 Web 浏览器的边界。
  1. momojo

    太棒了!对于那些不熟悉 Numba 的朋友来说,它有助于弥合在使用 Python 而非像 C 或 C++ 这样更低层但更快的语言时,始终存在的那个性能与易用性之间的权衡。

    当然你可以写 Cython,但那样你就得有一个构建步骤,并且要为每个平台和 Python 版本制作 wheel 包。虽然 numpy 这些年确实变快了,但你仍然受限于 GIL。

    Numba 有点神奇,因为你可以写出感觉像 numpy 的代码,却获得字面意义上的字节码级性能。

    但这也是有代价的,当我最近导入一个 matplotlib 的色图扩展时,就硬生生地学到了这一点。

    我以为最多只会导入几兆字节。但光是 Numba 加上 llvmlite 就快 100MB 了!

    在某些应用中这可能只是沧海一粟,但对于一个只有两条需要 JIT 编译的热路径的色图库来说,这未免太过分了。

    不过总体而言,我很欣赏这项成就,也很喜欢大家在浏览器端(也就是本地优先)科学计算方面所做的努力!

  2. rossant

    恭喜取得这项严肃的工程成就!

    十多年前,我也以更原始得多的方式尝试过类似的想法(https://cyrille.rossant.net/numpy-browser-llvm/)。很高兴看到自那以来取得了如此大的进步。

  3. lmc

    有没有浏览器版与非浏览器版的基准测试对比?

    也就是说,下面这句话背后的绝对数值是多少:

    > Numba 在 WebAssembly 中提供了大约 250 倍的加速,而原生环境下约为 90 倍。

同日更多故事

2026-08-16