跳转至

高效推理

概述

大模型的推理成本是部署的核心挑战。本章系统介绍量化、剪枝、投机解码、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,大模型并行验证。

流程

  1. 草拟阶段:小模型(draft model)自回归生成 \(\gamma\) 个token
  2. 验证阶段:大模型(target model)并行评估所有草拟token
  3. 接受/拒绝:基于概率比决定接受哪些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倍

实践建议

  1. 首先用vLLM/TGI等成熟框架
  2. INT8量化是最低成本的优化
  3. GQA模型(LLaMA 2+)推理更友好
  4. 投机解码适合对延迟敏感的场景
  5. 组合多种技术效果最佳

参考文献

  • 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

评论 #