想象你是一家名为“云厨房”的连锁快餐店的老板。总部有位名厨花了大半年研发的招牌菜(这就是模型训练),菜谱写得又专业又复杂,用的还是各家不同的记录方式。你希望把这道菜推广到全国几百家分店,但每家店的厨房设备、师傅水平参差不齐。怎么办?中央厨房的做法是:把这道菜做成标准密封料包——统一规格、密封保鲜、拆包随便一家店都能加工。这里的“标准料包”就是 WebAssembly,“统一菜谱卡”就是 ONNX,“门店总控台”就是 ONNX Runtime Web,“多灶头集成灶”就是 WebGPU,“平替食材”就是模型量化。这篇文章就用这条“中央厨房”的故事线,带你从头理解如何把训练好的AI模型,搬到浏览器里高效运行。
掌握浏览器端AI推理技术,你就能做出“数据不出本地、秒级响应、无需服务器”的AI应用——这是前端工程师最有含金量的进化方向之一,也是AI应用从云端走向端侧的关键技能。
可视化演示
本节配有交互动效(进入视口后自动加载,约 3KB)。
Wasm浏览器端AI推理流程 ONNX统一模型交换格式,实现PyTorch/TensorFlow到浏览器的跨框架转换 Wasm后端接近原生性能,WebGPU释放GPU并行加速能力,共同支撑高效推理 量化将FP32压缩为INT8,模型体积减小4倍,推理延迟显著降低 延迟 = FLOPs / (Wasm吞吐量 × GPU加速比) Wasm+WebGPU让浏览器端AI推理既快又安全
Wasm 基础概念
梅姨的“云厨房”要在全国开分店,最头疼的是怎么把总部的名厨菜运到各地。新鲜食材容易坏,各家做法还都不一样。她最后想了个办法:把菜做成标准密封料包。不管这道菜原来是川菜还是鲁菜,最后都装进同一种袋子,统一规格、密封保鲜,任何一家分店拆开就能加工。这个“标准密封料包”,就是浏览器世界里的 WebAssembly。
在 AI 场景里,训练好的模型、图像解码库、矩阵运算库,这些“食材”来自 C++、Rust、Python 等不同语言。WebAssembly(简称 Wasm)是一种紧凑的二进制指令格式,这些语言都可以把它当作编译目标。浏览器拿到 .wasm 文件,就像门店拿到料包——不需要知道它是哪家中央厨房产的,拆开就能用。
.wasm 本质是字节码,非常接近底层机器的指令风格,浏览器引擎会把它快速编译成机器码,所以执行速度接近原生程序。它运行在沙箱虚拟机里,不能直接碰文件系统或页面 DOM,只能通过宿主导入的接口做事,比很多插件安全得多。它和 JavaScript 是搭档关系:JS 负责 UI 和胶水逻辑,Wasm 负责大量数值计算——比如神经网络里的矩阵乘加。
总之,Wasm 料包的哲学就是:规格统一、密封安全、拆包即用。这也是它能让浏览器获得高性能和跨平台能力的核心原因。
.wasm 文件开头都固定是这 8 个字节,前 4 个字节是“暗号”(魔数),后 4 个字节是版本号。浏览器靠它识别“这确实是标准料包”。- 识别魔数文件前 4 字节固定为
0x00 0x61 0x73 0x6D,ASCII 码对应的正好是\0asm,浏览器由此确认这是 Wasm 文件。 - 校验版本第 5 到 8 字节是版本号,目前必须为 1,保证后续解析规则一致。
- 解析各段魔数和版本号之后,才是类型段、函数段、代码段等真正的内容段,它们共同构成模块主体。
Wasm 执行模型
料包到了门店,师傅不能直接把袋子丢给顾客,得先“拆包—备料—上锅”。Wasm 模块要真正跑起来,也要经过三步:加载、编译、实例化。加载时浏览器读取 .wasm 二进制;编译时引擎把它变成机器码;实例化时把 JS 提供的函数、内存等“食材配件”注入模块,最终生成一个可用实例。
这里有两个容易混淆的概念:模块和实例。模块是“菜谱模板”本身,实例是“正在炒的这盘菜”。同一个模块可以被实例化成多个实例,彼此互不干扰。每个实例都有自己的线性内存——一段连续的字节数组,缺了可以向浏览器申请扩容,默认按 64KB 的“页”为单位增长。这让 Wasm 的内存管理像后厨的备料台:食材(字节)整整齐齐码在一条长桌上,师傅按编号取用。
JS 与 Wasm 之间靠“导入”和“导出”连接。模块可以导入宿主提供的函数、内存或全局变量,也可以把内部函数导出给 JS 调用。这就是为什么在浏览器里,Wasm 能和 JS 无缝协作:JS 负责准备数据、调用 Wasm、拿到结果,Wasm 只专注算。
Wasm 的执行模型,本质上就是后厨的标准作业流程:师傅按操作卡(导入的依赖)备料开火,最终端出的菜(导出的函数)送到顾客面前。这套流程清晰、可控、可并行——在 Web Worker 里还能开多条“出菜流水线”而不卡住页面 UI。
- 准备模块
module是已经加载并编译好的.wasm二进制对象。 - 注入依赖
imports是宿主环境中传给模块的函数、内存和全局变量,相当于后厨的调料架和灶台。 - 创建实例
instantiate完成依赖注入后返回实例,实例拥有独立的线性内存和导出函数,可供 JS 调用。
ONNX 模型转换
中央厨房有个老大难问题:川菜师傅记菜谱用“一把姜”,鲁菜师傅记“30 克姜”,西餐师傅直接写"5g ginger"。名厨们用的框架也各不相同:有人用 PyTorch,有人用 TensorFlow。这些菜谱写法各异,没法直接进入同一条料包生产线。
ONNX(开放神经网络交换)就是那张“统一菜谱卡”。它是一种开放的模型中间格式,作用是把不同框架训练好的模型,导成一份与框架无关的标准计算图。你不需要重写模型,只需要做一次转换——PyTorch 模型用 torch.onnx.export 导成 .onnx 文件,TensorFlow/Keras 模型用 tf2onnx 工具转换。导出后,ONNX 文件描述的就是:哪些算子(操作),按什么顺序,处理哪些张量(数据块)。
有个实际注意点:ONNX 有算子集版本号,不同版本支持的算子范围不同。如果模型里有太新的算子、自定义层,浏览器端的运行时可能不认识。这时候要么换用等效的算子组合,要么把自定义层在转换前改写成标准层。这就像有些高级食材(如松露)不是每家分店都能处理,中央厨房要在封装前换成可替代的标准食材。
统一菜谱卡一出来,任何门店都能识别、照做。转换是预包装之前最重要的一步,它让“万国菜谱”变成“一种标准卡”。
- 算子节点集合 V图中的节点是卷积、矩阵乘、激活函数、归一化等算子。
- 张量边集合 E图中的有向边代表张量在算子之间流动,前一个算子的输出是后一个算子的输入。
- 完整计算图 G节点与边联合构成计算图,ONNX 文件保存的就是这份图信息。
Runtime 推理
菜谱标准了,料包也做出来了,但门店里还得有个“总控台”——料包一插、模式一选,机器自动出菜。浏览器端的这个总控台,就是 ONNX Runtime Web。
ONNX Runtime Web 是 ONNX Runtime 官方推理引擎的浏览器版本,核心用 Wasm 实现,所以能在所有现代浏览器里运行。你的 JS 代码只需要三步:创建一个 InferenceSession、加载 .onnx 模型文件、调用 session.run() 喂入输入张量。一次 run 就是一次完整的前向传播,输出张量直接返回给 JS。
输入数据通常要转成 Float32Array,并携带 shape 信息——比如图像分类模型的输入 shape 是 [1, 3, 224, 224],代表 1 张、3 通道、224×224 像素的图片。输出可能是 [1, 1000] 的得分向量,再过一层 softmax 就能得到各类别的概率。前处理(resize、归一化)和后处理(取 top-k、画检测框)通常在 JS 里做。ONNX Runtime Web 还支持多后端:默认 CPU 走 wasm 后端,如果浏览器支持 WebGPU 或 WebGL,可以切换到 GPU 后端自动提速。
总控台让你一键出菜,但备菜切菜(前处理)和装盘(后处理)仍需门店师傅亲手完成。Runtime 解决的是“标准料包进机器、热菜自动出来”这一核心环节。
session.run() 一行代码就完成了这些运算。- 构造输入张量将图片等原始数据预处理成固定 shape 的张量
x,例如[1, 3, 224, 224]。 - 第一层线性变换输入
x与权重矩阵W1相乘,加上偏置b1,得到中间结果z1。 - 激活函数用非线性激活函数
σ(如 ReLU)对z1进行处理,增加模型的表达能力。 - 输出层与 softmax再次线性变换后用 softmax 把得分归一化为概率,取最大者即为预测类别。
WebGPU 加速
有一家旗舰店换上了“多灶头集成灶”:十几个灶眼同时开火,工作效率立刻翻倍。GPU 之于 CPU,就是这种“多灶头”之于“一位大厨”——单个灶眼不厉害,但几十上百个灶眼同时炒菜,翻台率就上来了。
WebGPU 是浏览器新一代的图形与计算标准,让 JS 和 Wasm 能调用 GPU 做通用计算。在 ONNX Runtime Web 里,把 executionProviders 配置为 ['webgpu'],矩阵运算就会自动跑在 GPU 上。CNN、Transformer 这类富含张量乘加的模型,特别适合这种大规模并行。
但 WebGPU 不会让一切变快。Amdahl 定律告诉我们:一个程序的提速上限受制于串行部分。前处理、后处理、数据搬运是“切菜备菜”,仍然由 CPU 完成;只有当计算量够大、并行占比够高时,GPU 的优势才真正体现。Wasm 在这里像“主厨”:负责调度、分发数据;GPU 是“灶台矩阵”:批量翻炒。如果模型小、计算量小,GPU 的启动和搬运开销反而可能让总时间更久。
集成灶只解决“炒制”环节,备菜动线没优化一样慢。所以 WebGPU 要配合其他优化手段一起上,才能真正实现“秒级出菜”。
p 和并行单元数 n。就算 n 趋向无穷大,加速比也超不过 1/(1-p)。- 并行占比 p
p表示能被 GPU 并行加速的部分占整体耗时的比例,取值范围 0 到 1。 - 并行单元数 n
n是同时参与计算的硬件单元数量,比如 GPU 的核心数。 - 计算加速比加速比等于总耗时除以优化后耗时,串行部分不可缩减,并行部分被
n等分。
模型量化
食材成本上涨,招牌菜用走地鸡快卖不动了。中央厨房偷偷把走地鸡换成普通饲养鸡,控制火候和调味,顾客大多吃不出差别,成本却降了四分之一。这就是“平替食材”的智慧,模型优化里对应着“量化”。
模型里大部分参数是 32 位浮点数(FP32),占空间大、算得慢。量化就是把 FP32“换购”成更小精度的数,最常见的是换到 8 位整数(INT8)。体积直接减到四分之一,推理速度明显提升,代价是精度轻微下降。对于 MobileNet、YOLO 这类模型,量化后准确率通常只掉 1% 以内,却换来 2~4 倍的推理加速。
量化不是简单截断,而是把浮点区间线性映射到整数区间。映射过程记录两个关键参数:缩放因子 S(一个整数刻度代表多大的浮点范围)和零点 Z(浮点 0 对应哪个整数)。实际部署时,动态量化在推理时才计算范围,适合无校准数据的场景;静态量化在训练后用一小批校准数据提前算好范围,运行更快,是部署首选。
顾客尝不出区别,招牌菜照样爆卖。平替的哲学,就是“用最经济的食材保留最大的味觉还原度”。量化之后,模型变得更小、更快,也更适合塞进浏览器。
r 变成整数 q,反量化再把整数近似还原成浮点。S 是缩放因子,Z 是零点偏移。- 求缩放因子把浮点范围
[r_min, r_max]分成2^b - 1格,每格大小就是S。 - 求零点偏移浮点 0 在整数区间里对应的位置,保证浮点 0 被精确映射。
- 量化取整每个浮点数
r除以S后四舍五入并加Z,得到整数q。 - 反量化还原用
q反推近似浮点值,误差源于取整。
推理综合优化
有一家后厨,厨师炒一个菜要来回走十几步拿盐、拿糖、拿碗,一天能走两万步。店长重新布置动线,把常用调料、备菜台和灶台凑在一起,出菜速度立马翻倍。模型推理也怕“来回走路”。
算子融合就是把 Conv + Bias + ReLU 这类“放盐—放糖—搅拌”的连续操作合并成一步,减少中间张量的读写。内存优化是复用中间缓冲区,避免频繁申请释放,减少垃圾回收抖动。模型裁剪/蒸馏则是直接“砍掉冗余配菜”——剪去不重要的网络层或参数,让菜谱更精简。流式加载则是“边等料包边出菜”:模型文件很大时,先下载前面几层就开始推理,后续分片继续加载,大幅缩短首屏等待时间。
这些优化很多由 ONNX Runtime 的图优化器自动完成,也可以通过 session 配置手动开关。推理优化的目标可以提炼为一个约束优化问题:在体积和延迟都有限制的前提下,尽量保住模型精度。前端开发者通常不需要从零实现这些算法,但理解它们,才能知道瓶颈到底出在哪个环节。
动线一顺,出菜总量猛增。优化不是为了炫技,而是为了让顾客(用户)少等——后厨内部的每一小步优化,最终都体现在顾客体验上。
S_max、单次推理耗时不超过 T_max 的前提下,最小化损失函数 L(θ),也就是尽量保住精度。- 定义目标函数
L(θ)是模型在验证集上的损失,值越低代表精度越高,优化要尽量压低它。 - 体积预算约束模型参数量对应的存储体积不能超过
S_max,否则浏览器下载太慢。 - 延迟预算约束单次推理的耗时不能超过
T_max,否则用户会感到明显卡顿。
实战应用案例
云厨房的终极形态是“扫码下单—后厨本地出菜—热菜上桌”,全程不出店。浏览器端 AI 的目标也一样:数据不出本地,模型在浏览器里直接推理,结果立刻呈现。这带来两个巨大优势:隐私不泄露、响应无延迟。
三个招牌应用最能体现这套技术栈。第一是浏览器端 OCR:用户上传身份证或发票照片,页面本地完成前处理→文字检测→文字识别→后处理,全程不上传服务器,特别适合金融、政务等隐私敏感场景。第二是实时物体检测:把 YOLO 模型转成 ONNX,接入摄像头,浏览器逐帧推理并框出人、车、商品或生产线缺陷,适用于工厂质检和智慧零售。第三是图像分类:MobileNet 转成 ONNX 后,拍照识花、识物,弱网甚至断网环境下都能用,体验远超依赖云端的方案。
这些应用的技术栈高度一致:TensorFlow/PyTorch 训练模型 → 导出 ONNX → ONNX Runtime Web 加载 → Wasm/WebGPU 后端推理。工具链生态也在快速成熟,比如 transformers.js 把语言模型也搬到了浏览器。但要注意,端到端延迟等于前处理、推理、后处理三段之和,哪一段都可能成为瓶颈,上线前需要整体压测。
招牌菜在本地做熟,端上桌还冒着热气。浏览器端推理的核心价值正是“本地、及时、私密”——数据不出设备,结果即点即到。这就是 WebAssembly 运行 AI 模型最大的意义。
- 前处理耗时图片解码、缩放、归一化、转张量等准备工作,通常由 CPU 完成。
- 推理耗时ONNX Runtime Web 执行一次完整的前向传播,在 Wasm 或 GPU 上完成。
- 后处理耗时对模型输出做非极大值抑制、格式转换、渲染到页面等收尾工作。
AI 应用场景
隐私合规的文档识别
阶段:模型部署与推理
解决的问题:传统 OCR 需要把身份证、合同等敏感图片上传到云端识别,既慢又面临数据合规风险。用 ONNX Runtime Web 把 OCR 模型跑在浏览器里,图片全程不出本机,秒级返回文字,彻底避免了敏感数据泄露和服务器带宽成本。
具体案例:某政府服务小程序接入浏览器端 OCR 后,用户上传身份证照片,页面本地完成检测与识别,自动回填表单。上线后识别延迟从云端的 1.2 秒降到 0.3 秒,且不再需要购买 OCR 云服务按次付费。
工厂实时缺陷检测
阶段:推理优化与硬件加速
解决的问题:产线质检需要实时性,云端推理在网络波动时会漏检。把 YOLO 模型量化成 INT8 并导出 ONNX,再用 WebGPU 后端在浏览器中逐帧检测摄像头画面,可在本地实现 30 FPS 以上的实时质检,且数据不离开工厂内网。
具体案例:某电子元件工厂在浏览器页面中接入工业摄像头,模型自动框出电路板上的划痕和缺件,并联动声光报警。相比原来人工目检,效率提升 3 倍,误检率下降 40%。
弱网环境下的识花识物
阶段:模型压缩与端侧部署
解决的问题:户外景区、偏远地区网络差,云端识别经常超时。MobileNet 转 ONNX 并量化后仅有 5MB 左右,完全可在浏览器本地运行。用户拍照后立即得到结果,即使完全断网也能用。
具体案例:某植物园公众号上线“拍照识花”功能,游客拍一张花,前端直接用 Wasm 推理识别物种并展示介绍卡片。上线后功能使用率提升 5 倍,运营成本几乎为零。
Python 演示
import numpy as np def quantize(tensor, bits=8): qmin = 0 qmax = (1 << bits) - 1 tmin = float(tensor.min()) tmax = float(tensor.max()) scale = (tmax - tmin) / (qmax - qmin) if scale == 0: scale = 1.0 zero_point = round(qmin - tmin / scale) q = np.round(tensor / scale + zero_point).astype(np.int32) q = np.clip(q, qmin, qmax) return q, scale, zero_point def dequantize(q, scale, zero_point): return scale * (q - zero_point) def simulate(weights, bits): q, s, z = quantize(weights, bits) approx = dequantize(q, s, z) mse = float(np.mean((weights - approx) ** 2)) size_ratio = (1 << bits) / 32.0 return mse, size_ratio def main(): rng = np.random.default_rng(42) weights = rng.normal(loc=0.0, scale=0.05, size=(256, 256)) print("bits mse size_ratio") for bits in (32, 16, 8, 4): mse, ratio = simulate(weights, bits) print(f"{bits:2d} {mse:.6e} {ratio:.2f}") if __name__ == "__main__": main()
qmax = (1 << bits) - 1计算量化等级上界,8 位就是 255,4 位就是 15,位数越低格子越少。scale = (tmax - tmin) / (qmax - qmin)把浮点取值范围均匀切成整数区间,每格代表多大的浮点跨度。zero_point = round(qmin - tmin / scale)算出浮点 0 落在哪个整数刻度上,保证浮点 0 能被精确映射。np.round(tensor / scale + zero_point)对每个权重做量化取整,这是产生误差的根源。np.clip(q, qmin, qmax)把越界值强行拉回合法整数范围,避免溢出。approx = scale * (q - zero_point)反量化还原近似浮点值,用于计算误差。mse = np.mean((weights - approx) ** 2)量化前后的均方误差,误差越大说明精度损失越多。
常见误区
误区“WebAssembly 性能这么强,以后 JavaScript 就没用了,前端都用 Wasm 写。”我一开始也觉得 Wasm 是 JS 的终结者,毕竟名字里都带 Web。
正解Wasm 和 JS 是搭档不是对手。Wasm 不能操作 DOM,不能直接调用浏览器 API,也不擅长处理对象和字符串。前端仍是 JS 的天下,Wasm 负责把计算密集的部分(矩阵乘加、编解码)加速。就像后厨里料包再好,也需要传菜员(JS)把菜端给顾客。
为何常见:看到 Wasm 速度碾压纯 JS 的 benchmark 后,很容易产生“替代”的错觉,忽视了它们在浏览器中各司其职的分工。
误区“把 PyTorch 模型导出成 ONNX,再放到浏览器里,速度就自然起飞了。”转换完发现还是很慢,以为是转错了。
正解ONNX 只是一个统一格式,本身并不加速。速度提升来自运行时优化:ONNX Runtime 的算子融合、量化、WebGPU 后端等。格式转换只是“翻译成统一菜谱卡”,厨艺(运行时优化)才是出菜快慢的关键。
为何常见:很多人把“转换为 ONNX”和“部署优化”混为一谈,以为格式统一就等于性能统一。
误区“量化只是换个存储格式,模型精度应该完全不变吧?”毕竟菜谱换了食材,味道还能一样?
正解INT8 量化有精度损失,因为取整过程丢掉了小数部分。好在大多数模型对参数噪声不敏感,量化后准确率通常只掉 1% 以内,但极少数敏感模型可能掉十几个点。每部署一个模型,都要用验证集重新测精度。
为何常见:看到“Inference 加速 3 倍”的营销图,容易忽略测试报告里那行小字"accuracy drop 0.8%"。
误区“WebGPU 是 GPU 加速,肯定比 Wasm 的 CPU 执行快,那把所有模型都切到 WebGPU 后端就行。”
正解GPU 的优势在大规模并行计算。模型小、算子稀疏或频繁数据搬运时,GPU 的启动开销和上传下载成本反而更慢。ONNX Runtime Web 的做法是在 executionProviders 里配好优先级,让运行时按设备能力自动选择合适的后端。
为何常见:混淆了“理论算力”和“实际端到端延迟”,没把数据搬运、内存分配这些隐藏成本算进去。
面试题
Q1. WebAssembly 的 .wasm 文件本质上是什么?
- A.一种新的 JavaScript 编写语法
- B.一种跨平台字节码指令格式← 正确答案
- C.一种只能运行在 GPU 上的脚本
- D.一种数据库系统的查询语言
答案:B。Wasm 是一种紧凑的二进制字节码格式,浏览器引擎会将其编译成机器码执行。它不是 JS 语法,不依赖 GPU,也不是数据库语言,因此 B 正确。
Q2. ONNX 的主要作用是什么?
- A.一种模型训练优化框架
- B.一种开放模型中间格式← 正确答案
- C.一种浏览器页面渲染引擎
- D.一种 GPU 硬件驱动接口
答案:B。ONNX 是开放神经网络交换格式,用于在不同深度学习框架之间统一模型表示。它不负责训练、渲染或驱动 GPU,而是一张“统一菜谱卡”。
Q3. Wasm 通过什么机制隔离恶意代码,防止它破坏浏览器页面?
- A.沙箱隔离机制← 正确答案
- B.数据库事务回滚
- C.数字水印加密
- D.专用网线传输
答案:A。Wasm 运行在沙箱虚拟机中,不能直接访问文件系统、网络和 DOM,只能通过宿主导入的接口工作。这就像料包被密封袋隔离,不能污染整个厨房。
Q4. 在 ONNX Runtime Web 中,可以通过 executionProviders 配置哪些后端?
- A.wasm 后端← 正确答案
- B.webgpu 后端← 正确答案
- C.webgl 后端← 正确答案
- D.tensorflow 后端
答案:ABC。ONNX Runtime Web 支持 wasm、webgpu、webgl 等后端,按浏览器能力自动选择。tensorflow 是训练/推理框架而非 Runtime Web 的后端选项。
Q5. FP32 模型量化为 INT8 后,模型体积大约变为原来的多少?
- A.二分之一
- B.四分之一← 正确答案
- C.八分之一
- D.十六分之一
答案:B。FP32 每个参数占 4 字节,INT8 每个参数占 1 字节,所以体积变为原来的 1/4。这和用平价食材替换成本结构是同一个逻辑。
Q6. 下面哪些手段能提升浏览器端模型推理的综合性能?
- A.模型量化到 INT8← 正确答案
- B.算子融合减少中间读写← 正确答案
- C.增大输入图片分辨率
- D.切换到 WebGPU 后端← 正确答案
答案:ABD。量化减小体积、算子融合减少内存访问、WebGPU 提供并行计算,都能提升性能。增大图片分辨率会让输入张量变大,反而增加计算量拖慢速度。
Q7. Amdahl 定律说明了一个什么道理?
- A.并行核心越多,加速比可以无限提升
- B.整体加速比受串行部分比例的限制← 正确答案
- C.并行优化对任何程序都毫无帮助
- D.内存容量越大,程序运行一定越快
答案:B。Amdahl 定律指出即使并行单元趋向无限,加速比也只能逼近 1/(1-p)。串行部分无法被并行消除,就像备菜切菜的时间永远省不掉。
Q8. 关于 Wasm 线性内存的描述,正确的是哪一项?
- A.一段连续的字节数组,按页增长← 正确答案
- B.浏览器自动管理的对象引用集合
- C.仅能存储字符串类型的数据
- D.存放在服务器端的一段共享磁盘
答案:A。Wasm 线性内存是一段连续的字节数组,初始大小按 64KB 页对齐并可动态扩容。它不是对象堆、不仅限字符串,也不存在服务器端。它像后厨一条码放整齐的备料长桌。
Q9. 在浏览器中,让 Wasm 与 GPU 协同工作的标准接口是?
- A.WebGPU API← 正确答案
- B.WebSocket API
- C.IndexedDB API
- D.Service Worker API
答案:A。Wasm 本身没有直接访问 GPU 的能力,需要通过 WebGPU API 申请 GPU 计算资源。WebSocket 管通信,IndexedDB 管存储,Service Worker 管离线缓存,它们都不负责 GPU 计算。
Q10. 浏览器端 AI 推理相比服务端推理的优势有哪些?
- A.数据不出本机,隐私性更高← 正确答案
- B.离线或弱网环境下依然可用← 正确答案
- C.完全不受设备性能差异影响
- D.省去网络往返,延迟更低← 正确答案
答案:ABD。本地推理让数据留在设备上,隐私好,离线可用,且省去网络传输延迟。但设备性能参差不齐,推理速度受硬件制约,所以 C 是错误的。