WebNN 浏览器端 AI:2026 年 NPU 推理实战指南

WebNN WebGPU 浏览器AI 开发者工具

WebNN 浏览器端 AI:2026 年 NPU 推理实战指南

过去几年「浏览器端 AI 推理」基本只有两条路:WebGPU 调用 GPU,或者 WASM SIMD 在 CPU 上死磕。两条路都行,但都忽略了今天笔记本和手机里最有趣的一块芯片——NPU。这就是 WebNN 要解决的问题。WebNN 在 2026 年 1 月进入 W3C 候选推荐标准(Candidate Recommendation),Chrome 146 Beta 在 3 月开启了 origin trial,Firefox 也通过 ONNX Runtime Web 原生支持。

想知道你的设备到底能跑多快?打开 WebNN NPU 基准测试 — 它会探测 navigator.ml,在所有可用后端上跑同一份工作负载,结果全部本地计算,不上传任何数据。

TL;DR

  • WebNN 是 W3C 标准,把操作系统底层的 ML 加速器(Apple Neural Engine、高通 Hexagon NPU、Intel/AMD NPU、Windows 上的 DirectML)暴露给 JavaScript。
  • 2026 年 1 月进入 W3C 候选推荐标准,Chrome 146 Beta 在 3 月开启 origin trial,Firefox 通过 ONNX Runtime Web 原生支持。
  • 对 INT8 推理,NPU 的能效比 GPU 高 5-10 倍,同模型通常还快 1.3-2 倍。
  • 还没到全浏览器生产可用阶段——Safari 和 Firefox 暴露了 GPU 后端但没有 NPU。建议作为渐进增强使用,配 WebGPU → WASM 降级。

WebNN 暴露了什么

WebNN 给你一个 JavaScript 入口 navigator.ml,它映射到操作系统提供的 ML 加速器:

  • Windows → DirectML(再分发到 NPU / GPU / CPU)
  • macOS → Metal / Apple Neural Engine
  • Android → NNAPI
  • Linux → CPU 兜底(部分环境可用 OpenCL 走 GPU)
API 本身是一个图构建器:你声明 tensor、算子(conv、matmul、attention、softmax…)和执行 context,把编译好的图交给 runtime,由 runtime 决定跑在哪块芯片上。

2026 年中浏览器支持矩阵

浏览器版本NPUGPU备注
Chrome146+支持(origin trial)支持生产环境需要 origin trial token
Edge146+支持支持同 Chromium 规则
Firefox128+不支持支持通过 ONNX Runtime Web
Safari17.5+不支持支持仅 GPU 后端
Safari iOS17.5+不支持支持ANE 尚未暴露

两条实用结论:(1)今天想用 NPU,需要 Chromium 系浏览器 + origin trial token;(2)所有现代浏览器都至少有 GPU 后端,所以做 navigator.ml 特性检测是安全的。

NPU vs GPU vs WASM:实测数据

同一份工作负载——1024×1024×1024 矩阵乘法,MacBook Pro M4——2026 年中典型数据:

后端耗时相对速度
WASM SIMD(4 线程)~450 ms1x
WebGPU(集成 GPU)~12 ms~37x
WebNN(NPU)~8 ms~56x

换成更真实的模型——MobileNetV3 图像分类,224×224 输入——不同设备上数据如下:

设备NPU (WebNN)GPU (WebNN)WASM SIMD
MacBook Pro M44 ms6 ms45 ms
Intel Core Ultra 75 ms8 ms65 ms
iPhone 15 Pro6 ms10 ms80 ms
Pixel 9 Pro5 ms9 ms70 ms

NPU 的优势不只是绝对速度,而是「速度除以功耗」。在 Snapdragon X Elite 上,Whisper-tiny 转录可以跑到约 30x 实时速度,期间 GPU 一直休眠。对于 8 小时通话场景,这是「能用」和「电池告急」的差别。

安全地探测 WebNN

最大的坑:'ml' in navigator 为 true 不等于 navigator.ml.createContext() 一定能成功。早期版本可能对象存在但 runtime 还没接好,必须把 context 真正建出来:

async function pickBackend() {
  if (!('ml' in navigator)) return 'wasm';
  try {
    const ctx = await navigator.ml.createContext({ deviceType: 'npu' });
    return ctx ? 'npu' : 'gpu';
  } catch {
    try {
      const ctx = await navigator.ml.createContext({ deviceType: 'gpu' });
      return ctx ? 'gpu' : 'wasm';
    } catch {
      return 'wasm';
    }
  }
}

如果你用 ONNX Runtime Web,同一个 ort.createSession() 调用只要传 executionProvider: 'webnn',ORT 会自己处理降级链路。

降级链路

2026 年中生产环境的推荐顺序:

  • WebNN(NPU) — 最快、最省电,仅 Chromium + origin trial。
  • WebNN(GPU) — Firefox 和 Safari 都能拿到。
  • WebGPU — 支持最广,适合自定义 shader 和渲染融合 ML。
  • WASM SIMD — 处处可用的兜底。慢,但永远不会失败。
  • 什么时候真的用 WebNN

    • 实时音频 — Whisper、Silero VAD、流式 ASR。NPU 的能效优势在长会话里最明显。
    • 移动端图像分类 — MobileNet、ResNet。NPU 比 GPU 更快也更凉。
    • 隐私敏感场景 — PII 脱敏、端侧 OCR、人脸检测,数据不能离开设备。
    • 边缘 LLM UI — SmolLM / TinyLlama 这类小模型做本地聊天。现代笔记本上 ~3B 参数以内的模型基本都能塞进一个 tab。
    需要自定义算子、细粒度内存控制、或者神经渲染(ML 融合到 3D 渲染管线)时,跳过 WebNN,直接用 WebGPU。

    在你自己机器上跑一遍

    想知道你的设备有没有可用的 NPU,最快的办法是跑一份真实工作负载。打开 WebNN NPU 基准测试

    • 探测 navigator.ml,逐个测试 NPU、GPU、CPU 后端。
    • 同一模型在每个后端上跑,输出 ms / inference。
    • WebNN 不可用时自动降级到 WebGPU GPU 基准测试
    • 想真正加载一个模型?试试 本地 AI 模型运行器 — Whisper、MobileNet、小 LLM 都能在浏览器里跑。
    所有计算都在本地完成,不上传任何数据。