面试知识库
困难

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_bytes
plaintext

以 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 虚拟内存分页:逻辑地址连续,物理地址不必连续

推理框架选型:

框架核心特性适用场景
vLLMPagedAttention + 连续批处理高吞吐在线服务
TGIHuggingFace 生态,部署简单快速上线,中等规模
llama.cppCPU/边缘推理,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 动态管理
  • ❌ “推测解码一定更快” → 小模型和大模型分布差异大时,候选拒绝率高反而更慢