外观
推理优化与量化
推理优化(Inference Optimization) 是通过量化、缓存、批处理、蒸馏等手段,降低大语言模型(LLM)推理延迟与成本、提升吞吐量的技术集合。如果说训练是"造发动机",推理优化就是"让发动机在高速公路上以最低油耗长跑"——它决定了你的大模型应用能不能规模化赚钱、够不够快、稳不稳。
一句话判断:推理成本是 LLM 应用的最大账单;训练只花一次钱,推理每响应一次都在花钱。本文从成本动机讲起,逐个拆解 KV Cache、量化、蒸馏、投机解码、批处理、结构优化六大核心技术,最后给出框架选型表与端到端调优路径。
一、为什么推理优化如此重要
1. 账本结构:训练一次,推理无数次
训练和推理的成本结构完全不同。训练是"一次性投入",而推理是"每次调用都在扣费":
| 环节 | 成本量级(约,截至 2025-06) | 频率 |
|---|---|---|
| 预训练 | GPT-4 级模型估计数千万美元 GPU 算力 | 一次性 |
| 微调(PEFT) | 数百至数千美元(单 GPU 数天) | 偶尔 |
| 推理 | 每百万 token 输入约 $0.1~$0.8、输出约 $0.4~$4(取决于模型与厂商) | 每秒都在发生 |
一个 10 万日活的对话应用,一天产生数亿 token 推理量,一天的推理账单就可能超过一次小模型微调的成本。这也是为什么业界常说"训练贵在单次,推理贵在累积"——大语言模型(LLM)的规模越大,这条规律越残酷。
2. 延迟决定产品体验
推理优化不只是省钱,还直接决定产品生死:
- TTFT(首 token 延迟):用户按下回车到第一个字出现的时间,超过 2 秒流失率显著上升;
- TPOT(每输出 token 延迟):打字机般逐字输出的速度,决定"流畅感";
- 吞吐量:单卡/单集群同时服务多少请求,决定单位成本。
ChatGPT、Perplexity 这类对话与搜索产品能成为标杆,背后是持续的推理优化投入,详见ChatGPT 与对话式 AI。而 DeepSeek-R1 更是把"低成本高吞吐推理"做成了核心竞争力。
二、核心技术总览
推理优化大体可分"算法层"和"系统层"两类。先给全景,再逐个展开:
| 技术 | 类别 | 优化目标 | 典型收益(约) |
|---|---|---|---|
| KV Cache | 算法/系统 | 省重复计算、省显存 | 推理速度提升 10~100 倍(相比每步重算) |
| 量化(INT8/INT4) | 算法 | 减小模型体积与计算量 | 显存减半以上,速度提升 1.5~3 倍 |
| 模型蒸馏 | 算法 | 用小模型逼近大模型效果 | 体积小 5~50 倍,延迟大降 |
| 投机解码 | 算法 | 降低逐 token 串行延迟 | 端到端加速 1.5~3 倍 |
| 连续批处理 | 系统 | 提高 GPU 利用率 | 吞吐提升 2~10 倍 |
| PagedAttention | 系统 | 消除 KV cache 碎片 | 显存浪费从 60~80% 降到 <4% |
| FlashAttention | 系统 | 减少显存读写 | 注意力部分加速 2~4 倍 |
| 稀疏注意力 | 算法 | 降低长文本注意力复杂度 | 长文本显存/时间大幅下降 |
三、KV Cache:让重复计算消失
Transformer 自回归解码的本质是"逐 token 生成":每生成一个新 token,都要重新对全部历史 token 做注意力计算。KV Cache 就是把这个瓶颈砍掉的缓存技术。
理解它的前提是注意力机制:注意力层对每个 token 计算 Query(Q)、Key(K)、Value(V)三个向量,新 token 需要与所有历史 token 的 K、V 做点积。没有缓存时,第 N 步要重算前 N-1 个 token 的 K、V;有了 KV Cache,历史 K、V 存进显存,每步只算新 token 的 K、V 并追加到缓存即可——把 O(序列长度²) 的重复计算降为 O(1) 追加计算。
无缓存: 第 N 步 计算 token 1..N 的 K、V → 与 Q 做注意力 ← 前面全白算了
有缓存: 第 N 步 只算 token N 的 K、V → 追加到 KV Cache → 直接做注意力KV Cache 的显存占用与上下文长度成正比,是推理显存的最大变量。以 7B 模型为例,单请求上下文 2048 时 KV Cache 约需 0.5GB 级显存,且随 batch 和序列长度线性增长——这直接引出了后面的 PagedAttention(见第七节)。KV Cache 的机制细节完全建立在注意力之上,可回看 Transformer 与注意力机制 一文。
一句话判断
KV Cache 是"用显存换速度"的经典交易——它让生成阶段避免重复计算,但让显存成了新的瓶颈。所有大模型推理框架默认开启,你只需要操心它怎么放、怎么省。
四、量化:把权重"瘦身"
量化(Quantization) 用更低比特数表示模型权重(有时也包括激活值),从而减小显存占用、提升计算速度。权重精度每降一半,模型体积几乎减半:
| 精度 | 每权重字节数 | 7B 模型权重体积 | 相对 FP16 | 典型效果 |
|---|---|---|---|---|
| FP32 | 4 | ~28GB | 200% | 训练与高精度基线 |
| FP16/BF16 | 2 | ~14GB | 100% | 推理默认精度 |
| INT8 | 1 | ~7GB | 50% | 精度损失极小 |
| INT4 | 0.5 | ~3.5GB | 25% | 精度略降,多数任务可接受 |
1. 权重量化:GPTQ 与 AWQ
大模型推理最常用的是训练后权重量化(Post-Training Quantization, PTQ)——不需要重训模型,直接用预训练权重做低位表示。主流方法:
- GPTQ(2022,arXiv:2210.17323):逐层(layer-wise)量化,用 Hessian 矩阵的二阶信息做误差补偿,把量化误差在层内做二次近似校正。4bit 量化后困惑度损失很小,是开源社区 INT4 部署的经典方案。
- AWQ(Activation-aware Weight Quantization,2023,arXiv:2306.00978):根据激活值的分布识别"重要通道",对它们保留更高精度,其他通道做 INT3/INT4。在保持精度的同时不依赖重校准,部署友好。
2. 动态量化 vs 静态量化
| 维度 | 静态量化 | 动态量化 |
|---|---|---|
| 权重 | 离线量化好 | 离线量化好 |
| 激活值 | 用校准集统计出的固定范围 | 运行时实时计算范围 |
| 速度 | 更快(范围已知可预计算) | 略慢(有额外运行时开销) |
| 精度 | 依赖校准集代表性 | 更稳(逐层实际范围) |
| 适用 | 云端固定场景 | CPU 推理、输入分布波动大的场景 |
3. 量化不是免费的
量化省显存、提速度,但精度一定有所牺牲。质量如何验证?必须在业务相关的 LLM 评估与基准 上跑对比,而不是只看困惑度:
量化的三个坑
- 只看困惑度会骗人:困惑度损失小不代表数学、代码、长文本任务不退化——请用真实任务集对比 FP16 基线;
- 激活值量化的风险高于权重量化:激活值随输入剧烈波动,异常 token 可能被"截断"出大错误;
- 不是所有层都该均匀量化:首层、末层和注意力投影层通常更敏感,AWQ 的做法(按通道加权)比一刀切更稳。
一句话判断:先上 INT8(几乎无损),不够再上 INT4(配评估兜底),蒸馏等其他手段见下节。
五、模型蒸馏:大模型教小模型
模型蒸馏(Knowledge Distillation) 让一个"老师"大模型教一个"学生"小模型:训练时小模型不仅学老师的正确答案(hard label),还学老师的概率分布(soft label),从而继承大模型学到的泛化知识。2015 年 Hinton 等人的经典论文将其总结为"把知识从大模型蒸馏到小模型"。
蒸馏 vs 量化
| 维度 | 量化 | 蒸馏 |
|---|---|---|
| 模型结构 | 不变,只改数值精度 | 换成更小的结构/更少参数 |
| 显存收益 | 4~8 倍(INT4) | 数十倍(取决于小模型规模) |
| 质量损失 | 通常较小 | 与压缩比强相关 |
| 成本 | 几乎免费(PTQ 无需训练) | 需要训练(可复用大模型生成的数据) |
| 与微调的关系 | 独立 | 可结合 微调与 PEFT(LoRA) |
两者可以叠加:先蒸馏出小模型,再对小模型做 INT4 量化——这也是移动端、端侧场景的通行做法。蒸馏的副作用是"数据飞轮":老师模型的输出可以当作训练数据反复迭代,越用越强。
什么时候选蒸馏
- 追求极致低延迟/端侧部署(比如要跑在手机上)→ 蒸馏;
- 只是云端省钱、希望改动最小 → 先量化;
- 混合预算→ 先量化(一天上线),跑出瓶颈后再蒸馏(数周)。
六、投机解码:小模型打草稿,大模型把关
自回归生成是串行的:每个 token 都要等前一个 token 算完,GPU 利用率天然上不去。投机解码(Speculative Decoding) 的思路是"用一个快的小模型打草稿,再用大模型并行验证":
- 草稿模型(小模型,通常 1B 级)快速生成 n 个候选 token;
- 目标模型(大模型)并行一次前向,为这 n 个候选 token 算出真实概率;
- 拒绝采样:从草稿中按概率接受正确 token,遇到不一致就回退——由于并行验证 n 个 token 只需一次前向,端到端延迟可降低 1.5~3 倍,且输出分布与不加投机完全一致(这是它最大的优点)。
草稿: "今天天气真" → 生成 ["不","错","我"]
验证: 大模型一次前向算这三个位置的概率 → 全接受 → 一次前向"赚"了 3 个 token投机解码的正确性有理论保证(输出与原始自回归采样同分布),因此它几乎零质量代价。适合:流式对话、代码补全等对逐 token 延迟敏感的场景。注意它优化的是延迟而非吞吐,且需要额外加载一个草稿模型,显存占用略有增加。
七、批处理:吞吐量的发动机
1. 连续批处理(Continuous Batching)
传统推理框架按"请求批次"调度:一批请求要么全部结束、要么一起等最慢的——慢请求拖累整批(队头阻塞),吞吐打折扣。连续批处理(Continuous Batching,也叫 iteration-level scheduling) 把调度粒度从"请求"细化到"一次前向迭代":每步动态决定哪些请求参与计算、哪些请求可以进出,GPU 显存和算力始终被填满。相比请求级批处理,吞吐可提升 2~10 倍,是 vLLM 等现代框架吞吐碾压旧方案的核心原因之一。
2. PagedAttention:给 KV Cache 装"分页"
KV Cache 会随请求增长,预分配大量显存又浪费、动态分配又产生碎片。PagedAttention(vLLM 的核心创新,见论文 arXiv:2309.06180)借鉴操作系统虚拟内存分页思想:
- 把 KV Cache 切成固定大小的"页"(block),用页表把逻辑连续映射到物理上分散的显存块;
- 请求增长时按需分配页面,相邻请求还能共享相同前缀的页面(如系统提示词);
- 显存浪费率从传统方案的 60~80% 降到 4% 以下,同一批能塞进更多请求。
这也是"共享前缀"场景(RAG 应用先注入同一段文档、检索增强生成(RAG) 与 向量数据库与语义检索 的查询前缀高度相似)吞吐暴涨的原因。
八、结构优化:FlashAttention 与稀疏注意力
1. FlashAttention:让注意力别"进出显存"
标准注意力要把 N×N 的注意力矩阵整体写进/读出显存(HBM),显存带宽是瓶颈。FlashAttention(2022,arXiv:2205.14135)用 IO-aware 的 tiling 技术把计算分块在 SRAM 内完成,避免物化完整注意力矩阵:训练加速 2~4 倍、显存占用从 O(N²) 降到 O(N)。FlashAttention-2(2023)进一步把并行度、warp 划分优化到接近理论峰值——如今所有主流框架已默认集成,属于"你用了但感觉不到"的隐形优化。
2. 稀疏注意力
注意力复杂度是 O(N²)(N 为序列长度)。稀疏注意力(Sparse Attention) 让每个 token 只对"局部窗口 + 少数全局 token"做注意力,把复杂度降到近似 O(N)。代表做法有 Longformer、BigBird 的滑动窗口 + 全局哨兵 token。代价是信息可能丢失,长文本质量有损;许多前沿工作在做"稀疏 + 稠密混合"来兼顾两者,见 前沿进展 一文。
| 方法 | 复杂度 | 质量影响 | 适用 |
|---|---|---|---|
| 全注意力 | O(N²) | 无损 | 通用基线 |
| FlashAttention | O(N²) 但带宽优化 | 无损 | 所有场景(默认开启) |
| 稀疏注意力 | ~O(N) | 有损(长距离依赖弱化) | 超长文本、边缘部署 |
九、推理服务框架选型
同一套优化技术,不同框架的实现深度差异巨大。截至 2025-06 的主流选择:
| 框架 | 核心特色 | 定位 | 上手难度 | 典型场景 |
|---|---|---|---|---|
| vLLM | PagedAttention、连续批处理、兼容 OpenAI API | 云端开源主力 | 中 | 生产 API 服务、RAG/Agent 后端 |
| TensorRT-LLM | NVIDIA 出品,TensorRT 内核融合、深度绑定 GPU | 云端极致性能 | 高 | NVIDIA GPU 生产环境、追求极限吞吐 |
| llama.cpp | GGUF 量化格式、CPU/Apple Silicon 优化 | 本地/边缘 | 低 | 无 GPU 机器、端侧、个人部署 |
| SGLang | RadixAttention 前缀复用、结构化输出、Agent 场景 | 云端新兴 | 中 | 多轮对话/Agent、JSON 输出约束 |
| Ollama | 基于 llama.cpp 的一键体验 | 本地个人 | 最低 | 本地试用、开发者玩具、教育 |
选型一句话判断:要上线对外服务选 vLLM(生态最成熟)或 TensorRT-LLM(吃满 NVIDIA);跑自己电脑上选 llama.cpp/Ollama;Agent/结构化生成任务多可评估 SGLang。详细部署细节见 部署与推理优化实战。
十、端到端调优路径
优化不是堆砌技术,而是按"性价比"顺序决策。推荐的端到端路径:
| 步骤 | 动作 | 收益 | 陷阱 |
|---|---|---|---|
| 1. 模型选择 | 先用能满足效果的最小模型(参考 模型与榜单速查) | 源头省钱 | 一上来就用最大的模型 |
| 2. 量化 | 上 INT8/INT4(GPTQ/AWQ) | 显存减半+ | 跳过评估直接上线 |
| 3. 缓存 | 开启 KV Cache、共享前缀/提示词缓存 | 延迟大降 | 忽略长上下文的显存占用 |
| 4. 批处理 | 连续批处理 + PagedAttention 类框架 | 吞吐 2~10 倍 | 批大小拍脑袋 |
| 5. 硬件 | 按显存与带宽选 GPU(带宽决定解码速度) | 单卡吞吐提升 | 只看显存不看带宽 |
| 6. 部署 | vLLM 等框架 + 观测延迟/吞吐指标 | 可运维、可扩容 | 上线后不监控 |
硬件选择的常识:解码(生成)阶段是显存带宽瓶颈,带宽型 GPU(H200、A100 等)比纯算力型更适合生成密集负载;多请求并发场景才吃算力。给团队的完整作战手册见 部署与推理优化实战。
先跑基线再优化
任何优化都先建立基线:同一个数据集上测好未优化的 TTFT、TPOT、tokens/s 和单 token 成本,然后一项项加优化、逐项对比。不要上来就全上——每一项优化的边际收益递减,先解决最大的瓶颈。
十一、权衡与取舍
1. 速度 vs 质量 vs 成本三角
| 取舍 | 说明 |
|---|---|
| 速度 ↔ 质量 | INT4、蒸馏、投机草稿都可能损失或改变输出质量,用评估兜底 |
| 速度 ↔ 成本 | 高吞吐框架与集群要算总账:省了单 token 成本,多了工程与硬件投入 |
| 质量 ↔ 成本 | 大模型质量高但贵;蒸馏正是用训练成本换推理成本 |
| 延迟 ↔ 吞吐 | 投机解码降延迟但加显存;连续批处理提吞吐但单请求延迟略升 |
2. 用指标说话,而不是感觉
衡量推理优化的三把尺子(标准定义见 LLM 评估与基准,落地见 搭建一套 LLM 评估):
| 指标 | 全称/含义 | 测什么 | 典型目标(聊天场景,约) |
|---|---|---|---|
| TTFT | Time To First Token,首 token 延迟 | 响应"起跑"快慢 | < 1~2 秒 |
| TPOT | Time Per Output Token,每输出 token 时间 | 生成"步频" | 20~60ms/token |
| 吞吐 | tokens/s(生成/秒) | 单位时间产量 | 越高越好(成本越低) |
优化后的上线纪律
上线前必须做回归评估:量化/蒸馏/投机解码都会改变输出分布,先跑一轮业务评估再发布,量化模型尤其要做。评估体系搭法见 搭建一套 LLM 评估,面试与岗位视角可看 面试题库。术语口径统一见 术语表。
一句话总结:推理优化的本质是用工程手段把"模型能力"按最低成本、最低延迟交付出去——先量化,再批处理,必要时蒸馏,永远用指标验证。
延伸阅读
- Transformer 与注意力机制——KV Cache 与注意力优化的原理地基
- 大语言模型(LLM)——推理优化服务的对象
- LLM 评估与基准——量化/蒸馏后质量如何验证
- 微调与 PEFT(LoRA)——蒸馏与微调的关系
- 部署与推理优化实战——从本文理论到落地的完整手册
- 搭建一套 LLM 评估——上线前的回归评估实践
- 前沿进展——FlashAttention、稀疏注意力等结构优化的最新工作
- ChatGPT 与对话式 AI——大规模推理服务的产品样本
参考资料
- Kwon et al. Efficient Memory Management for Large Language Model Serving with PagedAttention(2023,arXiv:2309.06180) —— vLLM 与 PagedAttention 原始论文
- Frantar et al. GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers(2022,arXiv:2210.17323) —— GPTQ 权重量化经典方法
- Lin et al. AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration(2023,arXiv:2306.00978) —— AWQ 通道感知量化
- Dao et al. FlashAttention: Fast and Efficient Exact Attention with IO-Awareness(2022,arXiv:2205.14135) —— FlashAttention 原始论文
- Leviathan et al. Fast Inference from Transformers via Speculative Decoding(2023,arXiv:2211.17192) —— 投机解码理论基础
- vLLM 官方文档 —— 生产级推理服务框架文档
- llama.cpp 仓库 —— GGUF 量化与本地推理开源实现
- Ollama 官网 —— 本地一键部署工具
- NVIDIA TensorRT-LLM 文档 —— NVIDIA GPU 极致优化推理栈