浏览器里抠图,WebGPU 比 WASM 快多少?489 条真实设备耗时
抠图侠的免费抠图把 AI 模型下载到你的浏览器里运行,图片不上传本站服务器。本页的耗时都来自这条真实代码路径,原始汇总可在基准页下载。
网上关于 WebGPU 和 WASM 的去背景对比,多数是在一台高端电脑上测出来的一个数。抠图侠的模型跑在访客自己的浏览器里,耗时遥测按执行后端和设备档分桶上报,所以能给出一张跨设备的表。先说结论:同一台机器、同一张图,WebGPU 的纯推理确实快好几倍;但在真实访客设备上,首次抠图还要算上运行时加载和预热,差距没有那么大。更要紧的是,ONNX Runtime Web 1.27 的 WebGPU 后端在我们的 int8 权重上算错了结果,所以 2026 年 9 月 13 日起线上只用 WASM。
同一台机器、同一张图:WebGPU 推理快约 6 倍,但结果是错的
2026 年 9 月 13 日,我们在开发机(Apple M4、16 GB)的浏览器里,用同一份 1024 输入的 int8 模型、同一张图、同一个页面对比了两个后端:WASM 推理 16.8 秒,WebGPU 2.8 秒;把同一模型换成 fp32 权重走 WebGPU 是 3.7 秒。
问题不在速度,而在正确性。int8 加 WebGPU 输出的 logit 下界只有 −5.34(WASM 是 −20.70),背景一侧的置信度整个塌掉,alpha ≤ 0.05 的像素从 76.0% 掉到 2.2%。fp32 走 WebGPU 的结果与 WASM 一致,所以出错的是 int8 权重的 DequantizeLinear 在 ORT-web 1.27 WebGPU 后端上的实现,不是 WebGPU 本身。
落到成品上:7 张不透明物(AIM-500 数据集,生产构建、真浏览器)与真值比,WebGPU 1024 的 SAD 中位数是 6.15,WASM 1024 是 1.10,7 张全部是 WASM 更好。当天我们就停用了 WebGPU。
停用之后,WASM 怎么把速度追回来
WASM 慢,一部分原因同样是 int8:反量化让 WASM 多做一层运算。把权重换成 fp16 之后,同一张图 1024 输入的推理从 16.8 秒降到 6.95 秒,端到端约 8.0 秒,与此前用户在 WebGPU 上拿到的 6 到 8 秒持平,质量回到 SAD 中位数 1.10。
所以这页的答案不是「WebGPU 快,就选 WebGPU」。在浏览器里跑量化模型,先确认 WebGPU 的输出与 WASM 逐数值一致,再谈速度。我们恢复 WebGPU 的条件是 fp16 权重在真浏览器里与 WASM 对拍通过;按 9 月 13 日的记录,fp16 转换卡在一个混合类型的 Conv 上,线上至今没有重新开启 WebGPU。
真实访客设备上的分布
下面的表是遥测里「首次抠图」一项,从点下按钮到拿到结果,含解码、前处理、推理与合成,按后端、设备类型和 CPU 核数分桶。WebGPU 的几行全部是 9 月 8 日到 12 日停用前的记录,用 768 输入;WASM 行大多是 512 输入。两者的模型输入尺寸不同,不是严格的同条件对比。
能读出来的几点:桌面 8 到 11 核的 WASM 首次抠图 p50 是 2.1 秒(72 条),但 p95 到了 10.2 秒,同一档机器之间差得很大。WebGPU 在 4 到 7 核桌面上首次抠图 p50 反而是 14.3 秒(3 条),其中单是建 session 就要 8.5 秒。WebGPU 真正快的是热跑:桌面 8 到 11 核的后续抠图 p50 是 1.6 秒(3 条)。
手机上,WebGPU 首次抠图 p50 是 12.2 秒(2 条);单线程 WASM 是 44.1 秒(2 条,768 输入);能开多线程的 WASM 是 4.1 秒(5 条,512 输入)。在手机上,WASM 能不能开多线程,比选哪个后端影响更大。
这份数据测不到什么
遥测在浏览器里先把设备分成粗桶(桌面或移动、CPU 核数档)再上报,不收 User-Agent 原文,也不去重。所以我们说得出样本数,说不出有多少台设备、是哪款手机;同一个人抠十张会贡献十条样本。
9 月 13 日之后的默认档是 WASM 1024 fp16,这一档目前没有进入遥测汇总,表里看不到现行默认配置在真实设备上的分布;固定样本集的基线测量也还没补。这两项补上后会更新本页。
首次抠图耗时(真实设备遥测,2026-09-08 至 10-11)
| 后端 · 设备 · CPU 核数 | 模型输入 | 样本数 | p50 | p95 |
|---|---|---|---|---|
| WebGPU · 桌面 · 12 核以上 | 768 | 2 | 4.7 秒 | 7.4 秒 |
| WebGPU · 桌面 · 8–11 核 | 768 | 1 | 4.8 秒 | 仅 1 条 |
| WebGPU · 桌面 · 4–7 核 | 768 | 3 | 14.3 秒 | 17.2 秒 |
| WebGPU · 手机 · 8–11 核 | 768 | 2 | 12.2 秒 | 12.3 秒 |
| WASM · 桌面 · 12 核以上 | 512 | 33 | 3.6 秒 | 9.7 秒 |
| WASM · 桌面 · 12 核以上 | 768 | 1 | 6.1 秒 | 仅 1 条 |
| WASM · 桌面 · 8–11 核 | 512 | 72 | 2.1 秒 | 10.2 秒 |
| WASM · 桌面 · 4–7 核 | 512 | 3 | 11.3 秒 | 14.6 秒 |
| WASM · 桌面 · 1–3 核 | 512 | 6 | 5.2 秒 | 6.4 秒 |
| WASM · 手机 · 8–11 核 | 512 | 5 | 4.1 秒 | 5.4 秒 |
| 单线程 WASM · 手机 · 8–11 核 | 768 | 2 | 44.1 秒 | 44.9 秒 |
数据来自基准页数据接口,2026 年 10 月 14 日导出;p50 / p95 对窗口内原始样本计算,不是对日分位数求平均。样本少于 30 条的行只能看量级。WebGPU 行全部是 9 月 13 日停用前的记录。
在自己的设备上复现
第一步 · 打开基准页看全部阶段
基准页列出模型下载、缓存命中、运行时加载、首次抠图和后续抠图五个阶段,可下载 JSON / CSV 原始汇总,授权 CC BY 4.0。
第二步 · 在前台窗口抠一张图
后台标签页会被浏览器降级调度,测出来会慢很多。保持窗口在前台、机器空闲,并打开 DevTools 的 Network 面板。
第三步 · 读遥测请求里的数字
本次会话被抽中时(抽样率 20%),页面会向 /api/benchmarks/collect 发送耗时,payload 里就是首次抠图与纯推理耗时,和本页表格同一口径。
这份数据适合谁
- ·在浏览器里部署 ONNX 模型、正在选 WebGPU 还是 WASM 的开发者
- ·想知道自己的电脑或手机抠一张图要等多久的用户
- ·需要引用跨设备实测、而不是单机跑分的文章作者
- ·评估图片不上传的本地抠图能否用在低端设备上的团队
常见问题
WebGPU 抠图一定比 WASM 快吗?
纯推理上,同一台机器同一张图,我们测到 WebGPU 2.8 秒、WASM 16.8 秒(int8 权重)。但首次抠图还包括运行时加载与预热,真实访客的桌面设备上 WebGPU 首次抠图 p50 在 4.7 到 14.3 秒之间(共 6 条样本),并不总是更快。热跑时优势最明显。
为什么抠图侠现在不用 WebGPU?
ONNX Runtime Web 1.27 的 WebGPU 后端在 int8 权重上算错:背景置信度塌掉,成品 SAD 中位数 6.15,而 WASM 是 1.10。2026 年 9 月 13 日起线上只走 WASM,换成 fp16 权重后,1024 输入端到端约 8 秒。
表里为什么没有具体机型?
遥测只上报粗分桶的设备档,不收 User-Agent 原文,所以分不出机型,也数不出设备台数。这是隐私设计的代价,我们宁可少一个维度。
抠图时图片会上传吗?
免费本地路径不会。模型下载到浏览器里运行,遥测只发耗时数字和设备档,不发图片、文件名或图片的任何派生特征,也可以在基准页底部关掉。
来源
- 抠图侠基准页(真实设备耗时,按小时刷新)
- 原始汇总 CSV(CC BY 4.0)koutuxia.com
- ONNX Runtime Web:WebGPU 执行提供器文档onnxruntime.ai
- 抠图侠隐私政策(遥测收什么、不收什么)