Skip to content

显存与速度 ​

很多人以为推理速度看 CPU 主频或显卡算力,其实生成阶段的瓶颈几乎全在内存/显存带宽。理解这一点,很多"为什么我的机器这么慢"就有答案了。

一、生成一个字要读一遍模型 ​

大模型逐 token 生成文字。每吐一个字,都要把模型全部权重从显存(或内存)里读一遍做矩阵运算。7B 的 Q4 模型约 4.5GB,生成 100 个字,理论上要把 4.5GB 数据搬 100 次。

所以速度上限 ≈ 内存带宽 ÷ 模型体积。

平台带宽量级7B Q4 理论上限
DDR4 双通道约 50 GB/s十几 token/s
DDR5 双通道约 90 GB/s二三十 token/s
入门独显(8–12GB)300–500 GB/s上百 token/s
中高端独显更高受限于调度

这是理论上限,实际还要打折。关键是量级差:独显带宽是内存的几倍到十几倍,同一个 7B 模型在显卡和纯 CPU 上能差一个数量级。

也解释了一个常见困惑:核显和独显的算力差距很大,但跑 7B 时的速度差往往小于算力差,因为这一阶段拼的是带宽,不是算力。

二、CPU 推理为什么慢 ​

  1. 带宽低:单双通道内存在几十 GB/s 级别,这是硬上限。
  2. 延迟高:CPU 内存访问延迟远高于显存,模型又放不进缓存。
  3. 算力也吃亏:prefill(读入提示词)阶段是计算密集的,CPU 和 GPU 差得更远。
  4. 其他程序抢带宽:边跑模型边开浏览器、同时跑两个模型,都会明显掉速。

三、显存不够会"分层" ​

显存放不下整个模型时,框架会把部分层放 CPU、部分放显卡,叫 offload。看起来能跑,但速度往往断崖式下跌,甚至比全 CPU 还慢。ollama ps 里的 xx%/yy% CPU 就是在告诉你这件事。

四、上下文也会拖慢速度 ​

KV 缓存随上下文长度增长。从 4K 涨到 32K,显存占用和每步计算量都会上去。长文档问答感觉"越聊越慢",常常就是这个原因。

五、能做的优化 ​

  • 换更小的量化(Q4 而不是 Q8),体积小一半,速度差不多翻倍。
  • 降低 num_ctx,够用就行。
  • 关掉占显存的程序:浏览器硬件加速、游戏、视频。
  • 避免同时常驻多个模型。
  • 一次问完整问题,减少多轮往返。

六、结论 ​

必须用 CPU 跑,就接受 7B 模型每秒几个到十几个字的速度;想快,唯一的正路是把模型完整放进显存。这也是判断要不要升级硬件时最重要的一条依据。