中 困难
LLM推理优化#
一句话答案#
推理优化核心手段:量化(INT8/INT4)、KV Cache、PagedAttention(vLLM)、推测解码、连续批处理。
核心要点
五大优化技术对比:
| 技术 | 原理 | 效果 | 代表工具 |
|---|---|---|---|
| 量化(INT8/INT4) | 降低权重精度 FP16→INT8/INT4 | 体积缩小 2-4x,推理加速 | GPTQ、AWQ、bitsandbytes |
| KV Cache | 缓存历史 token 的 Key/Value 矩阵 | 避免重复计算注意力 | 所有推理框架默认支持 |
| PagedAttention | 借鉴 OS 虚拟内存分页管理 KV Cache | 解决显存碎片,提升吞吐 | vLLM |
| 推测解码 | 小模型生成候选,大模型并行验证 | 2-3x 加速,不损精度 | Medusa、SpecInfer |
| 连续批处理 | 动态加入/退出请求,共享 GPU 计算 | 提高 GPU 利用率 | vLLM、TGI |
量化方案选型:
- GPTQ:后训练量化,GPU 推理,精度损失小
- AWQ:激活感知量化,保留重要权重通道精度
- bitsandbytes:集成简单,适合快速实验(QLoRA 依赖)
KV Cache 显存估算公式:
显存 = 2 × num_layers × hidden_dim × seq_len × batch_size × precision_bytesplaintext以 7B 模型 FP16 为例:2 × 32 × 4096 × 2048 × 1 × 2 ≈ 1GB
(此式假设 MHA、KV 维度=hidden_dim;GQA/MQA 下 KV 头数远少于 Q 头,需按 KV head 数折算,显存大幅降低)
PagedAttention 核心思想:
- 传统方式预分配连续显存 → 碎片浪费严重(平均浪费 60-80%)
- PagedAttention 将 KV Cache 分成固定大小的 Block,用 Block Table 映射逻辑块到物理显存
- 类比 OS 虚拟内存分页:逻辑地址连续,物理地址不必连续
推理框架选型:
| 框架 | 核心特性 | 适用场景 |
|---|---|---|
| vLLM | PagedAttention + 连续批处理 | 高吞吐在线服务 |
| TGI | HuggingFace 生态,部署简单 | 快速上线,中等规模 |
| llama.cpp | CPU/边缘推理,GGUF 格式 | 本地部署、端侧推理 |
面试回答(2分钟版)
LLM推理优化主要从五个方向入手。第一是量化,把模型权重从FP16降到INT8甚至INT4,模型体积和显存占用大幅减小,推理速度提升,精度损失通常可接受。第二是KV Cache,Transformer自回归生成时每个新token都要和之前所有token做注意力计算,KV Cache把历史token的Key和Value缓存起来避免重复计算,是最基本的优化。第三是PagedAttention,vLLM提出的核心技术,借鉴操作系统的虚拟内存分页思想管理KV Cache,解决了预分配导致的显存碎片和浪费问题。第四是推测解码,用一个小模型快速生成多个候选token,大模型并行验证,如果候选正确就跳过这些步骤,本质是用小模型打草稿大模型审批。第五是连续批处理,不同请求的生成长度不同,连续批处理允许完成的请求退出、新请求随时加入,提高GPU利用率,类似拼车。
追问与易错
追问方向:
- vLLM 和 TGI 怎么选型?各自适合什么场景? → vLLM 高吞吐首选(PagedAttention 核心优势),TGI 部署简单适合 HuggingFace 生态快速上线。自建高并发服务用 vLLM,中等规模用 TGI
- 量化后精度下降了怎么补救?哪些任务对量化敏感? → 用 AWQ(激活感知量化)保留重要通道精度,或用 GPTQ 后再做 calibration。数学推理和代码生成对量化最敏感,简单对话影响小
- 推测解码的小模型怎么选?和大模型不匹配怎么办? → 选同架构的小版本(如 7B 给 70B 打草稿),分布越接近候选接受率越高。不匹配时拒绝率高反而更慢,需要在具体任务上评测
- KV Cache 超出显存了怎么处理? → 三种方案:设 max_seq_len 截断(最简单)、PagedAttention 动态分页(vLLM)、KV Cache 卸载到 CPU/SSD(牺牲延迟换容量)
易错点:
- ❌ “量化不影响精度” → INT4 在复杂推理任务上可能有明显退化,需要评测验证
- ❌ “KV Cache 可以无限增长” → 受显存限制,需要设置 max_seq_len 或用 PagedAttention 动态管理
- ❌ “推测解码一定更快” → 小模型和大模型分布差异大时,候选拒绝率高反而更慢