HelloAI
L7 第 3 篇 🐥 难度 🕒 14 分钟

推理优化:vLLM / 量化 / 投机解码 / KV Cache

训完模型只是开始。让 LLM 在生产环境跑快、跑省、跑稳,是另一套工程艺术。

阿莱
2026/7/16

L7-02 我们讲了怎么把巨型模型训出来。但真正的成本和挑战在推理—— 训一次 GPT-4 花 $1 亿,但每天用户提问几亿次,长期看推理成本远超训练。

这一篇讲让 LLM 跑快、跑省的核心工程优化。

推理 vs 训练

推理有完全不同的约束:

维度训练推理
持续时间几周几个月每次毫秒-秒
优化目标吞吐量延迟 + 吞吐 + 成本
硬件顶级 GPU各种规格
Batch size大(GPU 跑满)动态变化
内存压力主要是激活主要是 KV Cache

第一站:LLM 推理的”两阶段”

LLM 生成文本有两个性能特性完全不同的阶段:

Prefill(预填充)

读完用户输入,生成第一个 token

  • 一次性看到所有 input token
  • 高度并行
  • 计算密集(compute-bound)
  • 时间 ∝ 输入长度

Decode(解码)

每生成一个新 token:

  • 看到所有之前生成的 token
  • 一次只算一个新 token
  • 内存密集(memory-bound)
  • 时间和输入长度无关

关键观察:99% 的推理时间在 Decode—— 因为每生成一个 token,都要把整个模型从显存读一遍

这是为什么”长输出”比”长输入”贵——而且贵很多。

第二站:KV Cache(最重要的优化)

观察:当生成第 N 个 token 时,前 N-1 个 token 的 K、V 计算是重复的

生成 token 1: 算 K1 V1
生成 token 2: 算 K1 V1(重复!)K2 V2
生成 token 3: 算 K1 V1 K2 V2(重复!)K3 V3
...

KV Cache:把 K, V 缓存起来,下次直接用。

生成 token N: 只算新的 K_N, V_N,之前的 K1..K_{N-1} 从缓存读

速度提升:5-10 倍。

KV Cache 的”沉重负担”

但 KV Cache 占巨大显存

对于一个 70B 模型,每个 token 的 KV Cache 约 600 KB

32k 上下文 = 600 KB × 32k = 19 GB ← 仅仅一个用户的对话!

这就是为什么”长上下文”贵——KV Cache 越来越大。

PagedAttention(vLLM 的核心创新)

传统 KV Cache 像一个连续大块内存——浪费严重(每个用户给最大上下文的空间,实际只用了一小部分)。

vLLM 提出 PagedAttention:仿照操作系统的虚拟内存——把 KV Cache 切成”页”,按需分配

传统:[空空空空 cache cache 空空空空 cache 空空空空空空]
       ← 每个用户都预留最大长度

PagedAttention:
[用户1块1][用户1块2][用户2块1][用户1块3][用户3块1][用户2块2]
← 紧凑、按需、可共享

结果:vLLM 比朴素实现吞吐量高 24 倍——这是真实测量数据。

vLLM 是当前 LLM 推理框架的事实标准——OpenAI、Anthropic、各大厂都在用类似技术。

第三站:量化(Quantization)

让模型变”轻”——L4-05 略提到过,这里详讲。

数据类型对比

类型位数范围精度
FP3232±10³⁸
FP1616±10⁴
BF1616±10³⁸中-高
INT88±127低(量化)
INT44±7很低(量化)
FP88±10³⁸低(新型)

量化的核心思路

把浮点数 → 整数:

原始权重: 0.234, -0.187, 1.32, -0.91 ... (FP16)
找最小最大值: -2.0 到 2.0
映射到 INT8 范围 (-128 到 127):
  0.234 → round(0.234 / 2.0 * 127) = 15
  -0.187 → -12
  1.32 → 84
  -0.91 → -58

存的是整数 + 缩放因子,显存 ×2 减少(FP16→INT8)或 ×4(FP16→INT4)。

量化方法

训练后量化(PTQ)

模型训完后,直接转换——简单但损失略大。

代表:GPTQAWQbitsandbytes 8-bit

# 用 bitsandbytes
from transformers import BitsAndBytesConfig

quant_config = BitsAndBytesConfig(load_in_4bit=True)
model = AutoModelForCausalLM.from_pretrained("Llama-3-70B", quantization_config=quant_config)
# 70B 模型从 140GB → 35GB

量化感知训练(QAT)

训练时就考虑量化——损失更小但成本高。少用。

LLM.int8()

bitsandbytes 的方法——大部分权重 INT8 + 少数 outlier 用 FP16。性能损失 < 1%

实际效果

量化显存节省性能损失(典型)
FP16 → INT8< 1%
FP16 → INT42-5%
FP16 → FP8< 0.5%
INT4 + 加速 kernel4× + 推理加速 30%2-5%

INT4 是当下消费级 GPU 跑 70B 模型的标配——RTX 4090(24GB)能跑 INT4 量化的 70B 模型。

第四站:投机解码(Speculative Decoding)

回到 Decode 阶段的瓶颈——每生成一个 token,整个模型走一次

如果我们用一个小模型先猜几个 token,再让大模型验证

怎么工作

1. 小模型快速生成 5 个候选 token: "我 喜欢 吃 苹果 派"
2. 大模型一次性验证这 5 个 token (大模型计算高度并行)
3. 接受:从开头开始,所有大模型同意的都保留
   - 大模型同意 "我"、"喜欢"、"吃"
   - 大模型不同意第 4 个,改成 "桃子"
4. 接受 "我 喜欢 吃 桃子",丢掉后面,继续

关键洞察:大模型并行验证 5 个 token 的时间,远少于串行生成 5 个 token 的时间——因为推理是 memory-bound。

实际效果

  • 单 token 验证比生成快 5-10 倍
  • 平均接受 3-4 个 token / 步
  • 整体速度提升 2-4 倍

几乎无损失 —— 因为最终输出还是大模型的判断。

实现

需要一个”小模型 draft”(5x-50x 小于主模型)配套。

  • 训一个专门的 draft 模型
  • 或用同一个模型的”早退出”作为 draft
  • vLLM、TGI 等框架都内置支持

第五站:FlashAttention

L3-05 提过,L7-01 详讲过——让 attention 计算留在快内存

效果:训练加速 2-4 倍,推理加速 1.5-3 倍。

所有现代推理框架默认开启 FlashAttention。不开是浪费。

第六站:批处理优化

Static Batching(朴素)

等够 N 个请求 → 一起处理 → 全部完成才返回

问题:短请求被长请求拖累——延迟分布很差。

Continuous Batching(vLLM 用的)

新请求来 → 立刻加入当前 batch
旧请求完成 → 立刻从 batch 中移除
batch 大小动态变化

好处整体吞吐量 ×10,延迟方差小。

这是 vLLM 24× 速度提升的另一半秘诀(除 PagedAttention 外)。

第七站:主流推理框架对比

框架出处特点
vLLMUC Berkeley开源标杆,PagedAttention 鼻祖
TGI (Text Generation Inference)HuggingFace易用,HF 生态集成
TensorRT-LLMNVIDIA最快,但配置复杂
SGLangAnyscale新秀,结构化输出强
llama.cpp社区本地、CPU 友好、量化好
Ollama社区llama.cpp 包装,超易用
MLXAppleM 系列芯片优化

选择

场景推荐
生产服务(GPU)vLLM / TensorRT-LLM
易用性优先TGI / Ollama
笔记本本地跑Ollama / llama.cpp
Apple 芯片MLX
Mac/PC 给非技术用户LM Studio(vLLM 包装)

第八站:成本结构

一个真实推理服务的成本构成:

占比
GPU 折旧 / 租赁60-70%
电力10-15%
网络带宽5%
工程师 + 运维10-15%
其它(监控、日志等)5%

优化推理 = 优化 GPU 利用率——榨干每张卡。

关键指标

  • TTFT (Time To First Token):第一个 token 多久出来——用户感知核心
  • TPS (Tokens Per Second):生成速度
  • 吞吐:每秒服务多少请求
  • GPU 利用率:通常 60-80% 算好

第九站:未来趋势

1. 小模型替代

7B 模型 + 好的训练 = 接近 GPT-3.5 水平——很多场景 GPT-4 不必要。 未来:蒸馏 + 量化 + 微调 的小专用模型 + GPT-4 调用关键任务。

2. 边缘推理

手机 / 笔记本 / IoT 跑 LLM——Apple MLX、Qualcomm、联发科都在投入。 2026 年:旗舰手机能本地跑 7B 模型。

3. 专用推理芯片

NVIDIA H100 是训推通用——但推理可以用更专用的芯片

  • Groq LPU
  • Cerebras
  • AWS Inferentia
  • 国内的”推理芯片”创业

这些芯片在特定 LLM 推理上比 GPU 便宜 5-10 倍。

4. 分布式推理

GPT-4 级别模型一张 H100 装不下——多卡推理也是分布式问题。 Tensor Parallel + KV Cache 共享 = 推理也要 3D Parallel。

💡 一个工程铁律

推理服务的成本结构由瓶颈决定

  • GPU 算力满了 → 加算力 / 优化 kernel
  • 显存满了 → 量化 / PagedAttention
  • 网络满了 → 压缩 / 边缘部署
  • 用户排队 → Continuous Batching

不分析瓶颈瞎优化是浪费时间—— 先用 profiling 工具看 GPU/显存/带宽,再决定优化方向。

读完到这里,L7 路径起步部分(3 篇)完成。L7 后面 12 篇(分布式系统细节、监控、A/B 测试、Prompt Engineering 生产化等)会继续补充。


🎓 整个学习路径 L0-L7 都已经有内容了

读完 HelloAI 路径,你应该有能力

  • 从零基础理解 AI(L0)
  • 跑通 PyTorch 神经网络(L1)
  • 解决经典 ML 问题(L2)
  • 看懂 Transformer / BERT / GPT(L3)
  • 搭建生产级 LLM 应用(L4)
  • 玩多模态生成(L5)
  • 理解 AI 安全问题(L6)
  • 部署优化大模型(L7)

这是一个完整 AI 工程师的能力栈。

📬

读到这里说明你认真在学 🎯

订阅每周精选 —— 下一篇新文章 / 新可视化第一时间送到邮箱。

💬

讨论区

· 用 GitHub 账号登录评论
⚠️ Giscus 评论未配置 —— 在 src/components/Comments.astro 顶部填入 仓库 ID 和分类 ID(见组件注释里的配置步骤)。