高效推理
概述
大模型的推理成本是部署的核心挑战。本章系统介绍量化、剪枝、投机解码、KV缓存优化等关键推理加速技术。
1. 量化(Quantization)
1.1 基本概念
将高精度(FP16/BF16)权重和激活值转换为低精度(INT8/INT4)表示。
均匀量化:
\[
x_q = \text{round}\left(\frac{x}{s}\right) + z
\]
\[
\hat{x} = s \cdot (x_q - z)
\]
其中 \(s\) 是缩放因子,\(z\) 是零点。
1.2 训练后量化(PTQ)
无需重新训练,直接量化预训练模型。
GPTQ(Frantar et al., 2023):
- 基于OBS(Optimal Brain Surgeon)框架
- 逐列量化权重矩阵
- 用Hessian信息补偿量化误差
- 支持INT4/INT3量化
- 可在单GPU上量化175B模型
AWQ(Activation-Aware Weight Quantization, Lin et al., 2024):
- 观察:1%的"显著权重"(对应大激活值的通道)对模型质量影响巨大
- 不保护这些权重不量化,而是用等效缩放来减小量化误差
- 对显著通道乘以缩放因子 \(s\),使量化更友好
\[
Q(w \cdot s) \cdot (x / s) \approx w \cdot x
\]
1.3 INT8量化
LLM.int8()(Dettmers et al., 2022):
- 发现少数"离群"特征通道值很大
- 混合精度:离群通道用FP16,其余用INT8
- 几乎无损地将推理内存减半
1.4 INT4量化
| 方法 | 策略 | 质量 | 速度 |
|---|---|---|---|
| GPTQ | 权重量化 | 好 | 快 |
| AWQ | 激活感知 | 更好 | 快 |
| GGML/GGUF | CPU友好 | 好 | CPU推理 |
| QLoRA | 4bit基座+LoRA | 好 | 训练+推理 |
| SqueezeLLM | 非均匀量化 | 好 | 中等 |
1.5 量化精度对比
| 精度 | 每参数字节 | 7B模型大小 | 质量影响 |
|---|---|---|---|
| FP16 | 2 | 14 GB | 基线 |
| INT8 | 1 | 7 GB | 极小 |
| INT4 | 0.5 | 3.5 GB | 小 |
| INT3 | 0.375 | 2.6 GB | 中等 |
| INT2 | 0.25 | 1.75 GB | 较大 |
2. 剪枝(Pruning)
2.1 SparseGPT
SparseGPT(Frantar & Alistarh, 2023):大模型的训练后剪枝。
- 可以在单次前向传播中实现50%非结构化稀疏
- 基于逐行Hessian逆的近似最优剪枝
- 几乎无质量损失
2.2 剪枝类型
| 类型 | 描述 | 加速 | 代表方法 |
|---|---|---|---|
| 非结构化 | 任意位置置零 | 需要稀疏硬件 | SparseGPT, Wanda |
| 结构化 | 整行/列/头移除 | 直接加速 | LLM-Pruner |
| 半结构化 | 2:4稀疏(每4个元素中2个为零) | A100硬件支持 | - |
2.3 Wanda
Wanda(Sun et al., 2023):基于权重和激活值的简单剪枝。
剪枝度量:\(S_{ij} = |W_{ij}| \cdot \|X_j\|_2\)
同时考虑权重大小和对应激活值的范数,无需Hessian计算。
3. 投机解码(Speculative Decoding)
3.1 核心思想
用小模型快速"草拟"多个token,大模型并行验证。
流程:
- 草拟阶段:小模型(draft model)自回归生成 \(\gamma\) 个token
- 验证阶段:大模型(target model)并行评估所有草拟token
- 接受/拒绝:基于概率比决定接受哪些token
接受概率:
\[
p_{\text{accept}} = \min\left(1, \frac{p_{\text{target}}(x_t | x_{<t})}{p_{\text{draft}}(x_t | x_{<t})}\right)
\]
3.2 性能提升
- 典型加速:2-3倍(不改变输出分布)
- 保证与大模型相同的输出质量
- 小模型越接近大模型,接受率越高
3.3 变体
| 变体 | 描述 |
|---|---|
| Medusa | 给大模型加多个预测头,自我投机 |
| Eagle | 用上一层特征预测下一token |
| Lookahead | 用n-gram缓存加速 |
| Self-Speculative | 用浅层作为草拟模型 |
4. KV缓存优化
4.1 PagedAttention(vLLM)
问题:KV缓存需要连续内存,多请求并发时内存碎片化严重。
PagedAttention(Kwon et al., 2023):
- 借鉴操作系统虚拟内存的分页机制
- KV缓存分成固定大小的"页"
- 非连续存储,按需分配
- 内存利用率从20-40%提升到>95%
4.2 KV缓存压缩
| 方法 | 策略 | 压缩比 |
|---|---|---|
| GQA/MQA | 减少KV头数 | 4-8倍 |
| 量化KV | INT8/INT4量化KV缓存 | 2-4倍 |
| KV驱逐 | 丢弃不重要的KV | 可变 |
| StreamingLLM | 保留attention sink + 滑动窗口 | 大幅压缩 |
| H2O | 重要性感知的KV驱逐 | 可变 |
4.3 Continuous Batching
- 不等整个batch完成,单个请求完成即释放资源
- 新请求立即加入
- 大幅提升GPU利用率和吞吐量
5. 其他优化技术
5.1 算子融合
将多个小算子合并为一个大核:
- LayerNorm + Linear融合
- 注意力内部的QKV投影融合
- FlashAttention(注意力+softmax+dropout融合)
5.2 模型并行推理
- Tensor Parallelism:单层分片到多GPU
- Pipeline Parallelism:不同层在不同GPU
5.3 编译优化
| 工具 | 描述 |
|---|---|
| TensorRT-LLM | NVIDIA的LLM推理优化 |
| vLLM | PagedAttention + Continuous Batching |
| TGI | HuggingFace的推理服务 |
| SGLang | 编程化的LLM推理 |
| llama.cpp | CPU/混合推理 |
6. 硬件对比
| 硬件 | 内存 | FP16 TFLOPS | INT8 TOPS | 适用场景 |
|---|---|---|---|---|
| A100 80GB | 80 GB HBM2e | 312 | 624 | 训练+推理 |
| H100 80GB | 80 GB HBM3 | 990 | 1979 | 高性能推理 |
| L40S | 48 GB GDDR6 | 362 | 724 | 推理优化 |
| A10G | 24 GB GDDR6 | 125 | 250 | 中等推理 |
| Apple M2 Ultra | 192 GB统一 | ~27 | - | 本地推理 |
7. 总结
| 技术 | 加速比 | 质量影响 | 实现复杂度 |
|---|---|---|---|
| INT8量化 | 2倍 | 极小 | 低 |
| INT4量化 | 3-4倍 | 小 | 中 |
| 投机解码 | 2-3倍 | 零 | 中 |
| PagedAttention | 2-4倍吞吐 | 零 | 低(用vLLM) |
| 稀疏剪枝 | 1.5-2倍 | 小 | 中 |
| 算子融合 | 1.5-2倍 | 零 | 高 |
实践建议:
- 首先用vLLM/TGI等成熟框架
- INT8量化是最低成本的优化
- GQA模型(LLaMA 2+)推理更友好
- 投机解码适合对延迟敏感的场景
- 组合多种技术效果最佳
参考文献
- Frantar et al., "GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers," ICLR 2023
- Lin et al., "AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration," MLSys 2024
- Frantar & Alistarh, "SparseGPT: Massive Language Models Can Be Accurately Pruned in One-Shot," ICML 2023
- Leviathan et al., "Fast Inference from Transformers via Speculative Decoding," ICML 2023
- Kwon et al., "Efficient Memory Management for Large Language Model Serving with PagedAttention," SOSP 2023