Hugging Face发布@huggingface/kernels:200+ WebGPU内核

Hugging Face WebAI团队今天发布了@huggingface/kernels,一个用于加载和运行WebGPU内核的JavaScript库,同时发布了首批207个WebGPU内核,全部托管在Hugging Face Hub的webgpu-kernels组织下,采用Apache-2.0许可。每个内核是一个完整的、版本化的包,包含接口、WGSL着色器模板、正确性测试用例、基准测试用例和使用说明。此外,团队还推出了Fleet,一个浏览器内的GPU基准测试和测试套件,用于众包不同设备上的性能和正确性数据。

为什么从内核这一层着手?因为模型在浏览器中运行最终会转化为一系列GPU操作,如矩阵乘法、归一化、卷积、注意力原语、量化操作、数据布局变换等。WebGPU通过可移植API提供了这些操作,但可移植性不等于高性能。不同的着色器实现在不同加速器上行为差异巨大,工作组大小、内存访问模式、向量化、数据类型和融合策略都会影响性能。因此,高效的内核是实现快速浏览器推理的基石。通过将内核变得可发现、可测试、可基准化、可版本化,可以在保持上层稳定接口的同时独立改进底层。

每个内核都拥有独立的仓库和内核卡,文档化操作语义、输入输出、属性、数据类型、源文件以及即用的@huggingface/kernels示例。例如ai.onnx.Add实现了元素级加法与多维广播,其仓库包含了manifest.json(操作契约)、metadata.json(标识符与摘要)、test.json(正确性测试)、bench.json(基准测试用例)以及*.wgsl.jinja(参数化WGSL实现)。这种结构将着色器转变为可复用的软件工件,开发者无需阅读WGSL即可检查接口,正确性和性能案例随实现一起发布,版本可显式加载。

性能方面,团队将这批内核与ONNX Runtime Web(ORT WebGPU)在Apple M4 GPU上进行了对比。在1,756个测试用例中,筛选出809个双方输出匹配且计时可靠的用例。几何平均速度提升2.57x,中位数速度提升1.90x,其中629胜、176负、4平。具体操作如Add快3.52x,MatMul快1.14x,Softmax快2.11x,LayerNormalization快2.22x。个别极端案例收益更大:一个双线性Einsum(i,ij,j, size 4096)从1,396ms降至0.136ms,快了超过10,000x;一个行方向CumSum([256,4096])从4.784ms降至0.016ms,快了301x。这些属于特殊情况,但展示了专用内核在通用实现遇到慢路径时的巨大潜力。测量仅包含GPU执行时间,不包含加载、编译等开销,且短任务受GPU缓存影响,因此这些数字适合作为有用比较而非绝对承诺。

Fleet工具允许任何人通过浏览器运行正确性和性能检查,并自愿贡献私有证据,帮助团队发现设备特定失败、比较变体、改进选择规则,从而让内核在更多真实设备上更快更可靠。团队正与ONNX Runtime团队合作,将上述改进上游化,使整个ONNX Runtime Web生态系统受益。

目前207个内核是起点,未来将扩大操作覆盖,并将其连接到更高层次的模型工具。所有内核也作为Hub上内核生态的一部分,可与CUDA、ROCm、Metal等平台的内核一起浏览和筛选。内核仓库、@huggingface/kernels加载器和Fleet三者相互强化,共同构建浏览器推理的底层基础。

Introducing @huggingface/kernels: 200+ WebGPU Kernels for Local AI

查看原文