技术深度解析
WebNN的核心创新在于其基于图的执行模型,该模型抽象了底层硬件复杂性。与要求开发者编写着色器代码(如WebGPU)或手动管理张量内存不同,WebNN提供了一组预定义的算子节点,这些节点构成一个有向无环图(DAG)。浏览器的实现随后将该图编译为针对可用硬件的优化执行计划。
架构层次:
1. JavaScript API: 暴露`MLContext`、`MLGraph`、`MLOperand`以及构建器方法,如`ml.conv2d()`、`ml.averagePool2d()`、`ml.gemm()`。开发者以符号方式构建图,然后使用输入缓冲区调用`mlGraph.compute()`。
2. 硬件抽象层(HAL): 浏览器的内部组件将每个算子映射到后端。在Apple Silicon上,它通过Core ML的`MLModel`使用ANE(Apple Neural Engine);在搭载Qualcomm芯片的Android设备上,它委派给Hexagon NN库;在x86笔记本上,它回退到通过GPU使用oneDNN或DirectML。
3. 内存管理: WebNN在内部处理张量分配和重用,避免了困扰基于WebGL的解决方案的高成本`readback`操作。它还支持从`WebCodecs`视频帧进行零拷贝输入,这对实时视频处理至关重要。
关键技术权衡:
- 精度: 规范强制支持FP32和FP16,可选INT8量化。这不如WebGPU灵活(WebGPU允许通过着色器代码实现任意精度),但能够支持仅支持INT8的NPU后端。
- 算子集: 当前草案包含约50个算子。缺少高级Transformer算子,如缩放点积注意力和GELU,尽管这些正在讨论中。这限制了LLM的直接部署,需要大量变通方法。
- 图可变性: 一旦构建,`MLGraph`是不可变的。这对于静态模型来说没问题,但对于具有动态形状的模型(例如,可变长度输入序列)则存在问题。
性能基准测试(来自Chromium原型在M1 MacBook Air上):
| 模型 | 框架 | 延迟(毫秒) | 功耗(瓦) | 内存(MB) |
|---|---|---|---|---|
| MobileNetV2 (224x224) | TensorFlow.js (WebGL) | 45 | 8.2 | 120 |
| MobileNetV2 (224x224) | WebGPU (WGSL) | 18 | 6.1 | 95 |
| MobileNetV2 (224x224) | WebNN (ANE) | 9 | 2.3 | 45 |
| YOLOv5s (640x640) | TensorFlow.js (WebGL) | 280 | 12.4 | 450 |
| YOLOv5s (640x640) | WebGPU (WGSL) | 95 | 9.8 | 320 |
| YOLOv5s (640x640) | WebNN (ANE) | 42 | 4.1 | 180 |
数据要点: 在Apple的ANE上,WebNN相比TensorFlow.js WebGL实现了5倍的延迟降低和3.5倍的功耗节省,同时内存使用减半。这正是一个卡顿的演示与一个生产就绪功能之间的区别。
相关开源项目: [webmachinelearning/webnn](https://github.com/webmachinelearning/webnn) 仓库(每日⭐530)包含规范、polyfill实现和一致性测试。该polyfill用TypeScript编写,允许开发者今天就能测试WebNN代码,通过回退到WebGPU或CPU,尽管没有硬件加速。
关键参与者与案例研究
Google (Chrome): 主要推动者。Chrome团队已在Windows上使用DirectML、在Linux上使用oneDNN实现了完整的WebNN后端。他们还在开发一个WebNN到TFLite的委托,用于设备端模型。Google的动机很明确:WebNN能够在Chrome OS和Android WebView中实现Google Photos风格的设备端ML,从而降低服务器成本并提高隐私性。他们贡献了规范文本和一致性测试的大部分内容。
Apple (Safari): 更为谨慎,但战略上一致。Safari已经为原生应用提供了专有的`MLModel` API。WebNN将允许Web应用访问相同的ANE硬件。Apple参与了W3C会议,但尚未发布实现。他们的犹豫可能源于安全担忧——允许从Web执行任意神经网络可能被用于侧信道攻击或指纹识别。Apple的立场至关重要:如果Safari采用WebNN,它将成为通用标准;如果不采用,它将仍然是Chromium专属。
Microsoft (Edge): 积极参与,尤其是在DirectML集成方面。Edge在Windows上的WebNN后端可以利用Snapdragon X Elite笔记本中的NPU。Microsoft将此视为一种无需云连接即可在浏览器中提供类似Copilot功能的方式。
Mozilla (Firefox): 未参与。Mozilla历来对向Web平台添加复杂的硬件API持怀疑态度,理由是维护负担和安全风险。这可能导致标准碎片化。
浏览器AI方法比较:
| 方法 | 硬件访问 | 易用性 | 模型支持 | 成熟度 |
|---|---|---|---|---|
| TensorFlow.js (WebGL) | GPU(通过着色器) | 高(高级API) | 仅限于TF.js模型 | 生产就绪 |
| ONNX Runtime Web (WebGL/WebGPU) | GPU | 中等 | ONNX模型 | 稳定 |
| WebGPU Compute Shaders | GPU(完全控制) | 低(需要图形编程知识) | 任意(需手动实现) | 实验性 |
| WebNN | CPU/GPU/NPU(自动) | 高(声明式API) | 标准算子集 | 草案阶段 |