大语言模型推理优化:从 KV Cache 到量化
本文系统梳理大语言模型推理阶段的关键优化技术,涵盖 KV Cache、注意力优化、量化与稀疏化等方向。
你有没有想过一个问题:同一个大模型,为什么不同家的 API 价格能差好几倍?为什么 2023 年还贵得离谱的模型,2026 年已经白菜价?
模型还是那个模型(参数一样),变的不是"模型本身",而是服务端怎么把它跑起来——这套学问叫"推理优化"。大模型"变快变便宜"的真相,几乎全在这里。
这篇文章把最常见的推理优化手段讲一遍:它们各自解决什么问题、怎么解决、效果有多夸张。理解了这套组合拳,你就理解了 AI 定价的底层逻辑。
先看问题:推理为什么又慢又贵
要理解优化手段,先看推理的钱和时间花在哪。一次请求的服务端旅程,有两本账:
计算账:模型回答 500 个字 = 逐个生成 500 个 token,每生成一个 token 都要让 96 层网络完整算一遍。回答越长,算得越多——所以 API 定价里"输出"总是比"输入"贵 2-4 倍。
显存与带宽账:模型权重(几千亿个参数)必须常驻显存;同时,每个正在服务的用户还占着一份"KV 缓存"(下一节讲)。更麻烦的是生成阶段每蹦一个字,都要从显存里把全部上下文数据读一遍——GPU 的计算单元大部分时间在"等数据",而不是"算数据"。
一句话:推理贵在"算得重 + 搬得慢",优化手段就是针对这两点的减法。
手段一:KV Cache——给"逐字重算"做缓存
模型是逐字生成的。第 1 个字生成完,第 2 个字要"看"前面所有内容——于是前面的内容被原样重算了一遍。生成 500 个字,前面的内容就被重算 500 次。这浪费大得离谱(总计算量与长度平方相关)。
KV Cache 的解法朴素到极点:把算过的"键值对"(K/V)缓存下来,下次直接用,每次只算新字的那一份——就像做数学作业时,把算过的步骤记在草稿纸上,而不是每道题都从头重推一遍。有了它,生成速度从"随长度平方恶化"变成"线性增长",这是大模型能实时对话的前提。
但缓存不是免费的:KV 缓存要占显存,且随上下文长度和并发用户数线性膨胀。Llama 2 7B 模型,4K 上下文的 KV 缓存约 2.1GB——相当于模型权重(14GB)的 15%;如果同时服务 32 个用户,光 KV 就 67GB。显存很快被 KV 塞满,这是推理服务最常见的瓶颈,也催生了后面的手段二(量化给 KV 减肥)和"前缀缓存"(多个请求共享开头时,公共部分只算一次)。
手段二:量化——给模型"瘦身"
模型的参数是数字,默认用 16 位(FP16)存。量化就是把数字的精度降下来:8 位(FP8)甚至 4 位(INT4)。
"0.12345678"变成"0.1234",损失可以忽略(现代量化精度损失常在 1% 以内),但显存直接减半、计算还更快——英伟达 GB200 上实测:FP8 的注意力比 FP16 快约 1.8 倍,4 位的矩阵运算最高快 1.9 倍。
更妙的是量化还能用在 KV 缓存上(手段一的痛点):KV 用 FP8 存,显存再减半、生成时的"搬数据"压力也减半。用不到 1% 的精度换一半的显存和近一倍的速度——几乎总是划算的,这也是为什么主流模型普遍直接提供 FP8 版本。
手段三:连续批处理——让 GPU"拼车"
GPU 一次能并行算很多,但一个用户一次只生成一个字——单用户时 GPU 大量算力在空转。早期做法是"凑一批人一起算",但必须等整批完成才能接下一批(短请求被长请求拖死)。
连续批处理改变了规则:请求随时进来、随时加入正在算的批次,谁生成完谁退出——GPU 永不空转,像拼车一样随上随下。加上配套的"分页显存管理"(PagedAttention,把 KV 缓存按小页分配消除碎片),vLLM 论文报告吞吐比旧方案高 2-4 倍。这是今天所有推理引擎的地基。
手段四:投机解码——一次"押中"好几个字
生成慢的另一个原因是"一次只能算一个字"。投机解码的思路很聪明:先用一个又小又快的"草稿模型"一口气猜出接下来几个字,再让大模型一次性验证——猜对的直接采用,一次前向就拿到了两三个字。
猜错怎么办?丢掉重来——验证机制保证输出和标准解码逐字一致,无损。效果有多好?DeepSeek V3 的多 token 预测(MTP)让输出吞吐最高提升 60%;而在"一次只服务一个用户"的低并发场景(agent 长思考的典型形态),提速可达 3 倍——并发越低,投机解码越值。
手段五:PD 分离——把"读题"和"答题"分开排队
回到最开头:推理分两个阶段——**prefill(读入你的长输入,算得重)**和 decode(逐字生成,搬得慢)。两个阶段特征完全相反,却挤在同一批 GPU 上互相拖累:一个用户贴了 10 万字长文(prefill 重),会拖慢所有正在生成的人(decode 慢)。
PD 分离的做法:用不同的 GPU 分别跑 prefill 和 decode,各自按各自的特征优化、独立扩容——prefill 池管"读题",decode 池管"答题",各排各的队。SGLang 在 GB200 NVL72 上把 PD 分离 + 专家并行等组合起来,DeepSeek V3/R1 达到每 GPU 2.6 万输入/1.3 万输出 token/秒,比 H100 快 3.8-4.8 倍。这已是规模化推理的事实架构。
组合拳才是真相
看到这里你可能会问:哪个手段最有用?答案是——它们不是竞争关系,是乘法关系。KV Cache 解决重复计算,量化解决显存,连续批处理解决空转,投机解码解决带宽等待,PD 分离解决阶段失衡——每个手段削掉一个瓶颈,叠加起来是数量级的成本下降。
一个直观的终点:SGLang 团队用 96 张 H100 把 DeepSeek-R1 跑起来,成本约 0.2 美元/百万输出 token——大约是当时官方 API 价格的五分之一。同一模型,服务端优化不同,成本差一个数量级。
这就是 AI 定价的真相:你付的钱里,一部分是模型的智能,另一部分是服务端把这套组合拳打到多好。 而过去三年大模型 API 价格暴跌,一半靠模型进步,另一半靠的就是这篇讲的手段——KV Cache、量化、连续批处理、投机解码、PD 分离,每一项都在把"推理"从奢侈品变成日用品。
下次再看到"大模型降价 90%"的新闻,你可以会心一笑:模型还是那个模型,但服务端又精进了。