Apple M4上,同一批算子,MatMul只比ONNX Runtime Web快1.14倍,而一个冷门的双线性Einsum用例却快了一万倍以上。这两个数字放在一起,比任何通稿都更能说明这次发布该怎么看:平均值好看,但平均值背后藏着极端分布,真正决定用户体验的,是那个不起眼的1.14倍,不是那个吓人的一万倍。
发生了什么
Hugging Face在2026年9月1日放出@huggingface/kernels,一个从Hub加载运行WebGPU内核的极简JS库,配套207个Apache-2.0许可的内核,统一发布在webgpu-kernels组织下。
每个内核不是一个裸的着色器文件,而是一整套版本化仓库:manifest.json定义输入输出契约,metadata.json记录来源,test.json是正确性用例,bench.json是性能用例,*.wgsl.jinja是参数化的WGSL模板。安装用npm install @huggingface/kernels@preview,调用方式统一,换算子只改仓库ID。
同时上线的是Fleet,一个跑在浏览器里的众包基准工具,用户可以自愿在自己的设备上跑测试,把正确性和性能数据回传给Hugging Face。
2.57倍是怎么算出来的
Hugging Face拿自家内核和ONNX Runtime Web(1.30.0-dev版)在Apple M4 GPU上做了正面对比,从1756个用例里筛出809个双方结果一致、计时可靠的用例。
结果是几何平均2.57倍、中位数1.90倍,809场里629胜176负4平。
四个常见算子的耗时对比:
| 算子 | 我们的内核 | ORT WebGPU | 加速比 |
|---|---|---|---|
| Add | 0.064ms | 0.227ms | 3.52倍 |
| MatMul | 0.115ms | 0.131ms | 1.14倍 |
| Softmax | 0.114ms | 0.240ms | 2.11倍 |
| LayerNormalization | 0.061ms | 0.135ms | 2.22倍 |
真正的离群值出现在少数难例上:一个size为4096的双线性Einsum,0.136ms对1396ms,超过一万倍;一个[256,4096]的行级CumSum,0.016ms对4.784ms,301倍。这些是通用实现踩到慢路径时的极端案例,不代表日常表现。
这堆数字不能这样用
这是单算子微基准,不是模型跑分。测的只是GPU执行本身,不含加载内核、创建会话、上传输入、编译着色器、读回结果这些开销。一个真实的浏览器AI应用,这些开销经常比算子本身耗时还高。所以2.57倍不能理解成"浏览器里的AI推理整体快了2.57倍"。
更关键的是,@huggingface/kernels和现有的浏览器AI技术栈根本不在同一层。ONNX Runtime Web是通用图运行时,支持图捕获、GPU常驻张量,这些特性对整体模型性能的影响,可能比单个算子快多少更大。Transformers.js底层还是跑在ONNX Runtime上,它的WebGPU表现取决于导出方式、量化策略、图结构,不是一个独立后端。WebLLM走的是另一条路,基于MLC/TVM编译,专攻自回归LLM的prefill和decode。
这张图想说的是:@huggingface/kernels目前更像是给运行时开发者用的底层积木,不是终端用户能直接感知的加速开关。它能否兑现成真实体验,取决于Transformers.js或WebLLM会不会把它接进去,这一点原文没给答案,目前也确实还看不清。
- 风险.GitHub上此前已有一个同名的huggingface/kernels仓库,专注Python/native内核基础设施,和这次的WebGPU JS集合是两个完全不同的项目,容易混淆。
地基和楼房是两件事
Fleet的众包机制值得肯定的地方,是它试图解决一个真问题:WebGPU性能高度依赖GPU、浏览器、驱动组合,任何实验室测的都只是自己那几台机器。把测试和评分下放到用户浏览器里,理论上能覆盖到实验室永远覆盖不到的长尾硬件。但发布时间太新,现在还没有独立的第三方数据能验证这套众包证据到底积累到了什么程度,也没法判断它对低端GPU或非主流浏览器的覆盖是否真的够用。
内核跑得快,不等于用户等得短。
孟子说"充实之谓美",这次发布最实的地方,恰恰不是那个2.57倍的加速比,而是每个内核都带着可复现的契约、正确性用例和基准用例,变成了一个可以独立检验、独立版本化的软件工件。这在过去的浏览器AI栈里是缺失的一环——之前的优化大多堆在模型格式转换和运行时执行计划上,底层算子长期是一块不透明的黑箱。
真正该盯的,不是这次公布的跑分,而是接下来几个信号:Fleet积累的众包数据会不会公开更完整的设备覆盖情况;Transformers.js或WebLLM会不会真的接入这套内核层;以及一旦接入,端到端的模型推理速度能不能拿出可验证的数字。地基已经打了,楼还没盖起来,现在谈"浏览器AI变快了",为时尚早。
