Web 端推理:ONNX Runtime(ORT)入门

566 阅读3分钟

什么是 Web 端推理?

深度学习模型不再只能跑在服务器或云端,现在可以直接在浏览器里运行。这种做法属于“端智能”(Edge AI):模型随网页下载到用户设备,在本地完成推理。


为什么要在浏览器里跑模型?

  1. 体验更好:本地计算,结果几乎实时。
  2. 部署简单:一份前端代码即可覆盖 PC、手机、小程序等多端。
  3. 节省成本:减少云端算力投入,服务器费用更低。
  4. 隐私与离线:数据不出本机,弱网甚至离线场景也能用。

需要克服的难题

  • 设备性能有限:浏览器的 CPU/GPU 和内存各不相同。
  • 模型体积受限:超大模型难以下载也难运行。
  • API 不统一:各浏览器对 WebGL/WebGPU/WASM 的支持程度不同。

浏览器里的计算能力

方案运行在特点兼容性
原生 JavaScriptCPU最通用,但速度最慢★★★★★
WebAssembly (WASM)CPUC/C++/Rust 编译后可用,明显提速★★★★☆
WASM‑SIMD / ThreadsCPU指令级并行 & 多线程★★★☆☆
WebGLGPU本为图形渲染,可做并行计算★★★★☆
WebGPUGPU下一代标准,性能最好★★☆☆☆(实验阶段)

性能:WebGPU > WebGL ≈ WASM‑Threads > WASM > JS
兼容:JS > WebGL > WASM > WASM‑Threads > WebGPU


主流 Web 推理引擎

引擎生态 / 特点支持后端
TensorFlow.jsGoogle;训练 + 推理一站式WASM / WebGL / WebGPU(实验)
ONNX Runtime Web微软;通吃各框架的 ONNX 模型WASM / WebGL / WebGPU(实验)
WebDNN东京大学;极致性能WASM / WebGPU
TVM端到端编译器;从 0.7 起主推 WebGPUWASM / WebGPU
其他:mxnet.js、mnn.js、ant‑tfjs 等面向特定场景视引擎而定

目前多数引擎主力优化 WASM 与 WebGL,WebGPU 仍在测试。

性能示例(浏览器内跑 MNIST)

后端TensorFlow.jsONNX Runtime WebWebDNN
JS1500 ms1500 ms
WASM500 ms135 ms
WebGL37 ms40 ms200 ms

测试环境:Intel i7 + Chrome 91,仅作趋势参考


认识 ONNX & ONNX Runtime(ORT)

  • ONNX:开源模型交换格式,让不同深度学习框架互通。
  • ORT:官方推理引擎,支持 CPU、CUDA、TensorRT、ROCm、OpenVINO 等多种硬件。
  • 优势:跨平台、高性能、社区活跃,还提供 ORT Training 用于模型微调加速。

ORT JavaScript 家族

场景包名用途
浏览器onnxruntime-webWASM / WebGL / WebGPU
Node.js / Electrononnxruntime-node服务器或桌面应用
React Nativeonnxruntime-react-nativeiOS / Android 本地推理

在浏览器里跑一个矩阵乘法模型

import * as ort from 'onnxruntime-web';

// 1) 创建 Session 并加载模型
const session = await ort.InferenceSession.create('./model.onnx');

// 2) 准备输入
a = new ort.Tensor('float32', Float32Array.from([1,2,3,4]), [2,2]);
b = new ort.Tensor('float32', Float32Array.from([5,6,7,8]), [2,2]);

// 3) 执行推理
const { c } = await session.run({ a, b });
console.log(c.data); // 输出结果

若要使用 WebGPU:

import * as ort from 'onnxruntime-web/webgpu';

Webpack 打包 .wasm 提示

plugins: [
  new CopyPlugin({
    patterns: [{ from: 'node_modules/onnxruntime-web/dist/*.wasm', to: '[name][ext]' }]
  })
]

如果你的静态资源放在 CDN,请用 ort.env.wasm.wasmPaths 手动指定路径。


小结

Web 端推理已经可以胜任实时图像、语音等任务。ONNX 这种通用格式让训练与部署不再受框架限制。随着 WebGPU 的完善,在浏览器里直接跑大模型将越来越常见。