一句话定义
统一内存(Unified Memory) 指 CPU 与 GPU(或 NPU)共用同一套物理内存、同一个地址空间,不再有独立的一块显存。设备上不再区分「内存」和「显存」,模型加载进哪一块,两边都能直接访问。
传统的独显方案里,内存和显存是两块:权重先读进主机内存,再拷到显存,推理时显存不够就得退回一部分到主机内存,来回搬运。统一内存把这一步去掉了,模型的装载上限变成整机内存的容量。
它解决什么问题
本地跑模型,第一个卡点通常不是算力,是装不装得下。
一个模型的常驻占用由三部分组成:权重、KV 缓存(对话越长越大)、以及推理过程中的中间张量。这三样在独显方案里必须一起塞进显存。常见独显是 8GB、12GB、24GB 三档,模型稍大一点就得做模型切分、分层卸载,或者在上下文长度上让步。
统一内存把这道墙往后推了:整机 32GB、64GB 的机器,就能装下显存装不下的模型。近两年本地跑大模型的小主机走红,主要就是这个原因——不是它算得快,是它装得下。
代价在另一侧:带宽。独显用的是专用高频显存,带宽常在每秒钟几百 GB 到 1TB 量级;统一内存要和 CPU 共用同一套内存控制器,带宽低一个档。而本地推理的吐字速度,恰恰是被带宽卡住的。
关键做法
先分清两个阶段。 推理分预填充(prefill)和解码(decode)两步,瓶颈不一样:
| 阶段 | 做什么 | 卡在哪 |
|---|---|---|
| 预填充 | 一次读完输入的整段提示词 | 算力,矩阵乘密集 |
| 解码 | 一个字一个字往外吐 | 内存带宽,每个字都要把权重过一遍 |
解码阶段的速度上限,可以粗算成「内存带宽 ÷ 每个字需要读取的字节数」。一个 8B 模型压到 4 位,权重约 4GB;如果设备带宽是 120GB/s,理论上限就在每秒 30 个字左右,实际打对折是常态。同一份模型放到带宽 936GB/s 的独显上,上限高一个数量级——前提是 24GB 显存装得下它和它的 KV 缓存。
所以选型要先问用途。 短输入、短输出的任务(识别一张图、判断一句话的意图),预填充和解码都很短,容量比带宽重要;长输出的任务(语音问答、写一段话),解码占大头,带宽就直接体现在「等多久」上;带工具调用的助手类应用反复携带长提示词,预填充反而成了主要开销,这时前缀缓存比带宽更值钱。
工程上能做的几件事:
- 量化:权重和 KV 缓存都压,直接减少每个字要读的字节数,对带宽受限的场景收益最直接。
- 控制上下文长度:KV 缓存随对话轮数线性增长,聊得越久越挤占内存。
- 复用前缀:系统提示词、工具定义这类固定前缀做缓存,避免每轮重算。
- 分层卸载:装不下的部分放主机内存或固态盘,按层换入,用延迟换容量。
用不上的时候
- 只跑几 GB 的小模型。 普通核显或纯 CPU 就够,统一内存不构成优势。
- 多路并发。 所有请求共享同一条带宽,三路并发时单路速度大致按比例下降。本地设备的并发能力要按总线宽算,不能按单路数据乘系数。
- 要训练或微调。 训练对算力和带宽的要求是另一个量级,统一内存不是为这个场景设计的。
- 对首字延迟极敏感。 长提示词的预填充受算力限制,统一内存帮不上忙。
常见误区
- 「内存大就跑得快。」 容量决定装不装得下,带宽决定吐字快不快。这两件事经常被一句话带过,买回来才发现「能跑,但慢得没法用」。
- 「统一内存就等于零拷贝。」 物理上是一套内存,但缓存一致性、页迁移仍有成本,实际表现取决于驱动和访问模式,不能按「完全免费」估算。
- 「不同设备的每秒字数可以直接比。」 必须在同一个模型、同一种量化、同一段提示词长度下比,否则比的是测试条件,不是硬件。
参考
- Hacker News 讨论《Running Local Models for Agents – A Mac Mini vs. a 6-Year-Old GPU》(2026-10-20):openengine.cc/blog/local-models-mac-mini-vs-rtx-3090,对比同价位统一内存小主机与一张六年前的独显在本地 agent 模型上的实际表现。
- 硬件规格取自厂商公开资料:RTX 3090 为 24GB GDDR6X、带宽 936GB/s;Apple M4 统一内存带宽 120GB/s。带宽与容量的换算方法为通用工程估算,不是实测数据。
延伸阅读
- 本地推理设备怎么挑:内存大的小主机,还是便宜的老显卡 —— 这篇讲的是这件事对门店意味着什么。
相关词条
火眼识别提供端侧视觉引擎与设备管理平台,相关方案见 火眼识别官网。