Hugging Face @huggingface/kernels 发布
Hugging Face 已发布 @huggingface/kernels,这是一个 JavaScript 库以及包含 207 个优化过的 WebGPU 内核的集合。此次发布旨在通过提供一个可发现、可版本化且可测试的基础 GPU 操作层,加速本地 AI 推理,这些操作直接从 Hugging Face Hub 获取。
优化的 WebGPU 内核集合
Hugging Face 已将 207 个内核作为独立仓库发布在 Hub 的 webgpu-kernels 组织下。这些内核覆盖了广泛的机器学习架构和工作负载,利用 WebGPU API 和 WGSL(WebGPU 着色语言)在现代浏览器中实现可移植的高性能执行。
每个内核都被视为一个版本化的软件构件,而非简单的着色器。每个仓库均包含:
manifest.json:操作契约的唯一真实来源,定义输入、输出、属性、类型约束和形状推导规则。metadata.json:记录内核标识符、摘要和来源信息。test.json:包含正确性测试用例,用于验证实现行为。bench.json:包含基准测试和调优用例,用于评估性能。*.wgsl.jinja:参数化的 WGSL 实现,用于为特定设备和请求生成着色器。
@huggingface/kernels 加载器
@huggingface/kernels npm 包在 Hub 仓库与 JavaScript 应用之间建立了桥梁。它允许开发者通过 Hub 仓库 ID 和契约版本加载内核,然后使用类型化输入数据和张量形状执行该内核。
例如,加载器可以自动从 manifest 合约推导输出形状和逻辑数据类型。它还支持多种内核变体(例如向量化与标量处理),以确保在不改变面向应用 API 的前提下,根据当前调用和设备选择最高效的实现。
性能基准测试
在 Apple M4 GPU 上与 ORT WebGPU(使用 ONNX Runtime Web 1.30.0-dev.20260826-b1f76d586a)的直接对比中,Hugging Face 内核表现出显著的加速效果。在 809 个匹配测试用例中,内核的几何平均速度提升了 2.57 倍,中位数速度提升了 1.90 倍。
具体操作的加速效果如下:
| 操作 | 对比用例数 | 我们的 WebGPU 内核 | ORT WebGPU | 加速比 |
|---|---|---|---|---|
| 加法 | 5 | 0.064 毫秒 | 0.227 毫秒 | 3.52x |
| 矩阵乘法 | 29 | 0.115 毫秒 | 0.131 毫秒 | 1.14x |
| Softmax | 12 | 0.114 毫秒 | 0.240 毫秒 | 2.11x |
| 层归一化 | 6 | 0.061 毫秒 | 0.135 毫秒 | 2.22x |
在极端情况下,专用内核带来了巨大提升:一个双线性 Einsum 用例的运行速度提升了超过 10,000 倍(0.136 毫秒 vs 1,396 毫秒),而一个按行累积求和(CumSum)操作则提升了 301 倍(0.016 毫秒 vs 4.784 毫秒)。
Fleet:众包硬件证据
由于 WebGPU 性能在不同 GPU、浏览器和驱动之间差异显著,Hugging Face 推出了 Fleet,一个浏览器内基准测试与测试套件。Fleet 允许社区在自己的硬件上运行正确性和性能检查,并私密地贡献证据。这些众包数据帮助 Hugging Face 团队识别设备特定的故障,比较内核变体,并为真实硬件优化选择规则。
集成与生态系统
这些 WebGPU 内核是更广泛的 Hub 生态系统的一部分,该生态系统还包括针对 CUDA、ROCm 和 Metal 的内核。通过独立发布内核,Hugging Face 提供了一个共享基础,使得契约可以被检查,实现可以被改进,而无需将每个着色器直接嵌入运行时。Hugging Face 还正在与 ONNX Runtime 团队合作,将这些改进上游整合到更广泛的 ONNX Runtime Web 生态系统中。