Apple Silicon 上出现了一项对本地 AI 运行时很重要、但不该被夸大的技术验证:有开发者证明,WebAssembly 模块的线性内存可以由 Metal 直接封装为 GPU buffer,CPU 与 GPU 访问的是同一块物理内存,不再需要额外复制。它的现实意义不在一次 128×128 矩阵乘法,而在于给“沙箱化应用 + 本地 GPU 推理”提供了一条更短的数据路径。我的判断是,这更像一块运行时层面的地基改造:对做 Mac 本地 AI 产品的人,它开始改变内存预算和状态管理方式;对跨平台团队,它还不能被当成默认能力。
验证成立的事实,不是性能神话,而是内存副本真的少了一份
这次实验来自开发者搭建中的 Driftwood 运行时。实现路径有三个关键动作:用 mmap 申请 16KB 对齐内存,用 Metal 的 makeBuffer(bytesNoCopy:length:) 直接把这段地址包装成 GPU buffer,再通过 Wasmtime 的 MemoryCreator 把同一块内存交给 Wasm 作为线性内存。
结果很直接。Wasm guest 写入数据,GPU 读取并回写,guest 再从原地址看到结果。这说明共享不是概念上的“统一内存”,而是运行时层面已经把同一块地址贯通了。
作者给出的测试数字里,最有价值的不是算得多快,而是占了多少内存:在 16MB 区域下,零拷贝路径的 RSS 增量约为 0.03MB,显式 copy 路径约为 16.78MB。128×128 GEMM 的延迟两边都在 6.75ms 左右,16,384 个结果元素零错误。
这组数据至少说明两件事:
- 小规模链路已经跑通,而且结果正确
- 真正被省掉的是那份额外副本,而不是 magically 把 GPU 变快
这是一个需要说清的判断。今天很多本地 AI 应用并不是先死在算力上,而是先死在内存冗余、缓存搬运和状态重复构造上。推理速度没明显提升,不代表这件事不重要;当一条链路能稳定少占一份内存,它对多会话和长上下文的价值,往往比一次基准跑分更实在。
价值落在 KV cache 和会话恢复,受影响最大的不是浏览器,而是 Mac 本地 AI 开发者
原始实验后面接入了苹果的 MLX 框架,并跑通了 Llama 3.2 1B Instruct。作者在一台 2021 年 M1 MacBook Pro 上记录到,4-bit 量化、695MB 模型,加载 safetensors 约 229ms,5 token prefill 为 106ms,单 token 生成约 9ms;Wasm 调用主机函数再到 GPU 的边界开销,几乎测不出额外损耗。
这让 Wasm 的角色发生了变化。过去它更常被放在“安全、可移植,但跑重活不合适”的位置。现在在 Apple Silicon 上,Wasm 更像一个隔离层和状态容器:业务逻辑、工具调用、会话状态留在 Wasm 里,真正耗算力的算子交给本地 GPU。
对两类人影响最直接。
一类是做 Mac 本地 AI 应用的团队,尤其是桌面助手、隐私优先工具、企业内网智能体。以前如果 Wasm 沙箱和 GPU 推理之间要反复拷贝数据,架构上就会很别扭:安全隔离有了,内存账却算不过来。现在他们会更认真地把 Wasm 当成运行时容器,而不是只拿来跑插件。实际动作会体现在工具链选择上:一些原本准备直接把控制逻辑写死在原生 Swift 或 Python 宿主里的团队,可能会转向 Wasmtime 这类方案,把会话、工具执行和插件系统收回到 Wasm。
另一类是做多会话、本地 agent 的产品经理和工程负责人。Transformer 的 KV cache 会随着上下文增长不断吞内存,这部分成本平时不会在宣传页上出现,但会直接决定一台 Mac 能同时挂几个会话、恢复一次上下文要等多久。作者测到,KV cache 导出为 safetensors 时,24 token 的序列化约 1.1ms、恢复约 1.4ms,而从头 re-prefill 要 67.7ms,恢复路径快约 5.45 倍。
这句话可以记住:本地 AI 的瓶颈,很多时候不是“算不出来”,而是“每次都要把已经算过的东西再搬一遍、再建一遍”。
如果这个方向继续成立,用户端会感受到很具体的变化:上次停在一半的本地对话,不必重新预填充几十毫秒到更久;企业内网里的本地 agent,会更容易做会话冻结、迁移、恢复,而不是每次从头热启动。
公开能力和行业现实之间,有一条很窄的成立边界
把这件事放回行业背景里看,边界会清楚很多。
Apple Silicon 的优势来自统一内存架构。CPU 和 GPU 本来就共享物理内存池,所以 bytesNoCopy 这类做法有成立空间。到了 NVIDIA 或 AMD 的典型独显环境,主存和显存隔着 PCIe,复制和同步成本不是运行时技巧就能抹掉的。浏览器里的 Wasm/WebGPU 则还要多过一层安全模型和抽象封装,几乎不可能按这种方式共享裸内存。
更直白地说,这不是一个“Wasm 终于打通 GPU 推理”的行业结论,而是“在苹果统一内存机器上,Wasm 沙箱和本地 GPU 之间原本那层多余搬运,可以被显著压缩”。
对照起来看,差异大致是这样的:
| 路线 | 内存关系 | 常见代价 | 这次验证说明了什么 | 现实约束 |
|---|---|---|---|---|
| Apple Silicon + Metal | CPU/GPU 统一内存 | 理论上可直连、少一份副本 | Wasm 线性内存可被 Metal 直接使用 | 高度绑定苹果平台 |
| 独显 + PCIe | 主存与显存分离 | 复制、同步、生命周期管理复杂 | 很难复刻同样的零拷贝条件 | 生态成熟但链路更重 |
| 浏览器 Wasm/WebGPU | 受浏览器安全层约束 | 常有额外封装与隔离开销 | 更适合部署便利,不适合裸地址共享 | 安全模型决定上限 |
这个对照很重要,因为它决定了谁该兴奋,谁该冷静。做 Mac 产品的人可以把它当成新武器;做跨平台推理框架的人,暂时不能把它写进默认设计;想把服务器端 CUDA 工作负载迁到 Wasm 的人,也很难从这次实验里得到直接答案。
真正难的部分还没开始:更大模型、更长上下文、更多并发
目前公开出来的样本,成立在 1B 级模型、M1 设备、有限 token 长度和相对可控的实验环境里。它证明的是“这条路能走”,还没证明“这条路在生产里能稳定跑很久”。
后面要补的验证至少有四类:
- 更大模型下,统一内存是否会被更快吃满
- 长上下文和多会话并发时,KV cache 的快照、回收和一致性怎么处理
- Wasm 线性内存增长后,Metal buffer 生命周期和地址稳定性是否会带来新问题
- 多 actor 或多 agent 调度时,CPU/GPU 同步语义是否会成为新的瓶颈
还有一个不能跳过的现实约束是生态。MLX 是苹果在 2023 年底推出的机器学习框架,和 Apple Silicon 的匹配度很高,但它还不是行业里的通用底座。今天大多数训练和推理基础设施仍围绕 PyTorch、CUDA 以及更成熟的服务器端工具链展开。也因此,这项进展更接近“Mac 本地 AI 产品开发的一次架构增量”,不是整个 AI 基础设施栈已经转向。
这里的判断要收住一点:它足以影响一批本地应用的技术决策,还不足以改写跨平台推理的主流路线。
如果接下来一年里,Driftwood 这类运行时能在更大模型、长上下文和稳定恢复上继续给出数据,Mac 端团队会出现很具体的动作变化:有人会推迟原生重写计划,先把状态层放进 Wasm;有人会重新评估“本地多会话”是否值得做;也有人会因为平台绑定过深,继续把这条路线限制在 Apple 端产品线内,而不扩展到 Windows 和 Linux。技术路线的分叉,往往不是因为理念不同,而是因为内存账单终于算清了。
