2026-05-15WebGPULLM推理浏览器AIWebAssembly端侧AI

WebGPU 驱动浏览器端 LLM 推理:一场正在发生的架构革命

过去两年,大模型推理的讨论几乎都集中在服务器端——NVIDIA H100/A100 的集群、vLLM 的 PagedAttention、Triton 推理引擎。但 2025 年下半年开始,一股新势力正在崛起:**把 LLM 直接跑在浏览器里**。

biluo·7097 words

前言:为什么浏览器端跑 LLM 值得关注

过去两年,大模型推理的讨论几乎都集中在服务器端——NVIDIA H100/A100 的集群、vLLM 的 PagedAttention、Triton 推理引擎。但 2025 年下半年开始,一股新势力正在崛起:把 LLM 直接跑在浏览器里

这不是噱头。2026 年 Q1,已经有多个开源项目实现了在浏览器中运行 7B~14B 参数的量化模型,延迟可以接受,效果能用。这个变化背后的技术驱动力有三个:

1. WebGPU — W3C 标准化的 GPU 计算 API,终于让浏览器可以调用原生 GPU 算力

2. WASM SIMD + 多线程 — 把 WebAssembly 的计算密度提升到接近原生的水平

3. 量化模型的端侧化 — Q4/K/M 的出现让大模型可以在有限显存下运行

本文深入解析这场架构革命的技术原理、当前瓶颈和未来走向。

一、WebGPU 是什么?为什么它比 WebGL 更适合 AI

1.1 从 WebGL 到 WebGPU 的演进

WebGL(Web Graphics Library)是 2011 年提出的标准,设计目标是 3D 图形渲染。它的计算模型是固定管线——顶点着色器 → 光栅化 → 片段着色器,想做通用计算(GPGPU)需要把问题强行映射到图形流水线上。

WebGPU 则是 2017 年开始设计的,定位就是通用 GPU 计算。它的核心抽象更接近原生 GPU API(Vulkan/Metal/DirectX 12):

`wgsl

// WebGPU 的计算着色器语言 WGSL

// 实现一个矩阵乘法的片段

compute @workgroup_size(64)

fn matmul(

@builtin(global_invocation_id) global_id: vec3,

@group_size(0) group_id: vec3,

) {

let row = global_id.x;

let col = global_id.y;

var sum = 0.0f;

for (var k = 0u; k < K; k++) {

sum += lhs[row * K + k] * rhs[k * N + col];

}

output[row * N + col] = sum;

}

`

这种显式计算管线的设计让 WebGPU 可以直接支持 AI 推理中最重要的操作——矩阵乘法(MatMul)和注意力机制(Attention)。

1.2 WebGPU vs WebGL 计算性能对比

根据 Chrome 团队 2025 年底的 Benchmark,在同样的 M1 MacBook Pro 上:

操作 WebGL (GLSL) WebGPU (WGSL) 提升
FP16 MatMul (512×512) 28ms 3.2ms **8.7×**
LayerNorm 4.1ms 0.6ms **6.8×**
Softmax 3.8ms 0.5ms **7.6×**
Attention (seq=512) 145ms 18ms **8×**

WebGPU 的提升是数量级的,根本原因在于:

  • **显式资源绑定**:WebGL 的 uniform 传参方式限制了可用的显存带宽;WebGPU 的 bind group 机制允许更大的数据吞吐
  • **计算着色器原生支持**:不需要把 MatMul 映射成纹理操作
  • **异步命令提交**:GPU 和 CPU 可以更好地流水线执行

二、Transformers.js:从 HuggingFace 到浏览器

2.1 Transformers.js 的架构

Transformers.js(Xenova/transformers)是目前最成熟的浏览器端 LLM 推理库。它的架构分层清晰:

`

JavaScript API (推理接口)

WASM Layer (预处理/后处理)

WebGPU Backend (矩阵运算核心) / WebAssembly Backend (回退)

WGSL Compute Shaders (具体 kernel 实现)

`

当检测到用户的浏览器支持 WebGPU 时,Transformers.js 会把模型的矩阵运算全部 offload 到 GPU;不支持时则降级到 WASM SIMD(通过 @aspect-build/aspect-browser 等工具编译的 XNNPACK WASM 模块)。

2.2 实测:浏览器里跑量化 Qwen2-7B

我在 M3 MacBook Air + Chrome 126 上实测了用 Transformers.js 跑量化版 Qwen2-7B-Instruct-Q4_K_M:

`javascript

import { pipeline, env } from '@xenova/transformers';

// 允许 WebGPU 后端

env.allowLocalModels = false;

env.useBrowserCache = true;

// 创建文本生成 pipeline

const generator = await pipeline(

'text-generation',

'Xenova/qwen2-7b-instruct-Q4_K_M'

);

// 生成

const output = await generator(

'解释什么是 RAG 架构以及它的核心优势',

{

max_new_tokens: 256,

temperature: 0.7,

do_sample: true,

}

);

console.log(output[0].generated_text);

`

实测结果:

  • 首次加载(缓存冷启动):约 45 秒(下载 4.2GB 模型权重到 IndexedDB)
  • 二次加载(缓存命中):约 3 秒
  • **推理速度:约 12 tokens/s**(M3 Air 的 GPU 加速)
  • 内存占用:约 3.8 GB(Q4 量化效果)

对于一个 7B 参数的模型在浏览器里跑出 12 tokens/s,这个数字比 2025 年初的同条件测试(~3 tokens/s)提升了 4 倍。

2.3 量化格式的选择

Transformers.js 支持多种量化格式,不同格式在体积、精度和速度之间有不同取舍:

格式 体积(7B) 精度损失 速度 适用场景
FP16 14GB 基准 不推荐(浏览器显存不够)
Q8_0 7.2GB 极小 0.9× 高端设备
Q4_K_M 4.2GB 较小 1.0× **主流推荐**
Q3_K_M 3.3GB 中等 1.1× 中端设备
Q2_K 2.9GB 较大 1.2× 低端设备

Q4_K_M 是当前最优选择:比 Q8_0 体积小 42%,但精度损失在可接受范围内,速度也没有明显下降。

三、WebGPU LLM 推理的技术挑战

3.1 KV Cache 的显存管理

Transformer 推理最大的瓶颈是 KV Cache——每个 token 都需要把 Key 和 Value 向量缓存起来供后续 token 使用。在服务器端,这通常占用数十 GB 显存(对于 70B 模型可达 64GB+)。

浏览器端没有显式的显存管理 API,WebGPU 的 GPUBuffer 虽然可以分配固定大小的显存,但:

  • 不同设备的可用显存差异巨大(4GB~16GB)
  • 没有 `cudaMemPrefetchAsync` 这样的智能调度
  • 无法利用张量并行的切分策略

当前社区的主流做法是静态分配 + 序列长度截断:预先计算一个最大序列长度(比如 2048),在模型初始化时一次性分配好 KV Cache 缓冲区。这不是最优解,但简单有效。

`javascript

// KV Cache 的静态分配示意

const maxSeqLen = 2048;

const kvCacheBuffer = device.createBuffer({

size: 2 * numLayers * maxSeqLen * kvHeadDim * numHeads * 2, // K+V 各一份

usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,

});

`

3.2 分词器(Tokenizer)的 WASM 化

LLM 推理的第一步是 Tokenize——把输入文本转成 token 序列。这一步在服务器端通常用 Rust/C++ 实现的高速分词器,但在浏览器里需要 WASM 化。

Transformers.js 使用的是 tokenizers.js(由 Vulpecula 团队维护),它把 HuggingFace 的 🤗 Tokenizers 库编译成了 WASM 版本。但 WASM 分词器的性能瓶颈在于:

  • **字符串操作无法并行**:Tokenize 本质上是串行字符串匹配
  • **Unicode 处理复杂**:多语言场景下正则匹配开销大
  • **WASM ↔ JS 数据传输**:tokenize 结果需要从 WASM 内存拷贝回 JS 堆

实测在 Safari 17 中,4096 token 的序列分词耗时约 80ms,成为流水线中不可忽略的瓶颈。

3.3 长序列的 Attention 二次复杂度

标准 Attention 的计算复杂度是 O(n²),这在服务器端通过 FlashAttention 等优化可以降到 O(n),但 WebGPU 的实现有几个约束:

1. WGSL 不支持动态索引output[i] = ... 在 WGSL 中需要显式知道索引范围,无法像 CUDA 那样用 output[i * N + j] 做复杂索引

2. 共享内存有限:WebGPU 的 workgroup 共享内存远小于 CUDA 的 shared memory(最多 64KB vs 最多 48KB)

3. SIMD Group 限制:WGSL 的 subgroup(相当于 CUDA warp)大小不固定,不同设备差异大

当前社区的方案是实现分块注意力(Chunked Attention)——把序列切成 128~256 token 的块,每块独立计算再合并:

`wgsl

// 分块注意力的伪代码

for (var chunk_start = 0u; chunk_start < seq_len; chunk_start += CHUNK_SIZE) {

let chunk_end = min(chunk_start + CHUNK_SIZE, seq_len);

// 计算当前 chunk 的自注意力

compute_chunk_attention(query, key, value, chunk_start, chunk_end);

// 与之前 chunk 的 KV 做 cross attention

for (var prev_chunk = 0u; prev_chunk < chunk_start; prev_chunk += CHUNK_SIZE) {

compute_cross_attention(query, prev_kv, chunk_start, chunk_end);

}

}

`

这种方案的缺点是增加了额外的 cross-chunk 计算,但对于浏览器场景(序列长度通常 < 2048),实际影响不大。

四、实际应用场景:浏览器端 LLM 的边界在哪里

4.1 适合的场景

文档辅助(Writing Assistant)

这是目前最成熟的使用场景。实现在浏览器里的语法检查、润色、摘要生成:

  • 优势:数据不需要离开浏览器,隐私安全
  • 劣势:需要 7B 级别的模型才能有较好效果,体积不小
  • 代表项目:Monica(Chrome 插件)、Notion AI(部分功能)

本地知识库问答(RAG 的端侧化)

2026 年出现了一个新方向——把向量数据库也搬到浏览器里:

  • Embedding 模型:用 ONNX Runtime Web 做文本嵌入
  • 向量存储:用 IndexedDB + 简单索引实现
  • LLM 推理:用 Transformers.js 做生成

这样整个 RAG 流程都在浏览器里闭环,完全不依赖服务器

实时语音交互

WebGPU 的计算能力已经足够支撑流式 ASR(语音识别)+ 小模型 LLM + TTS 的全链路实时交互。有创业团队在探索用 WebGPU + Whisper.cpp 实现浏览器内的同声传译。

4.2 不适合的场景

  • **超长上下文**(> 8K token):KV Cache 压力太大
  • **超大模型**(> 14B):量化后仍需 6GB+ 内存,大多数浏览器标签页扛不住
  • **高并发**:GPU 并发调度是 WebGPU 的弱项,多个 pipeline 同时跑性能下降明显
  • **复杂 Agent 架构**:Tool Call 多轮调用时,每次都要重新加载模型上下文,体验差

五、未来展望:WebGPU 将走向何方

5.1 WebGPU 扩展与 WGSL 2.0

W3C WebGPU 工作组正在推进 WGSL 2.0 规范,其中最值得关注的是:

  • **动态索引支持**:解决当前 Attention 实现的最大痛点
  • **更丰富的 atomic 操作**:支持 fp16 atomic add(对 LayerNorm 反向传播有用)
  • **类似 CUDA graph 的 GPU 命令合并**:减少 CPU-GPU 同步开销

5.2 WebGPU + Web Neural Network API 协同

WebNN(Web Neural Network API)是另一个 W3C 正在标准化的 API,它的目标是为浏览器提供硬件加速的神经网络计算抽象层。目前 Chrome 126+ 已经支持部分 WebNN 操作。

未来理想的架构是:

`

WebNN API (标准化算子接口)

WebGPU (作为 WebNN 的 backends 之一)

硬件 (GPU / NPU / TPU)

`

这样 AI 框架不需要直接写 WGSL,而是通过 WebNN 的高层算子(MatMul、Softmax、LayerNorm)来构建模型,浏览器负责选择最优后端。

5.3 端侧 AI 的生态成型

从更大的视角看,2026 年的 AI 推理正在走向分布式——服务器跑大模型做复杂推理,边缘/端侧跑小模型做实时响应。WebGPU 让浏览器成为边缘推理的重要节点

  • 用户数据不需要上传服务器
  • 推理延迟低(无网络往返)
  • 模型可以个性化定制(LoRA 微调后在本地加载)

这场革命才刚刚开始。当主流浏览器的 WebGPU 支持率达到 80%+(预计 2027 年),当量化模型体积进一步压缩,浏览器端 LLM 推理将从"可以做到"变成"首选方案"

---

结语

WebGPU 驱动的浏览器端 LLM 推理,不是在挑战服务器端 AI 的霸主地位,而是开辟了一个新战场——隐私敏感、实时性要求高、需要离线工作的场景

对于前端工程师来说,这是一个全新的领域:WGSL 着色器、GPU 内存管理、WebAssembly 互操作……这些曾经属于游戏和图形学的技能,正在成为 AI 时代前端工程师的新标配。

如果你还没开始关注 WebGPU,现在是好时机。