核心要点
连续批处理(continuous batching):请求级动态拼批,谁解码完就替换,GPU 利用率远高于静态批。
PagedAttention:把 KV Cache 分页管理,消除显存碎片、支持前缀共享,大幅提升并发数。
量化(INT8/FP8/INT4,GPTQ/AWQ):降显存与带宽压力,换取吞吐提升,需评估精度损失。
标准回答
先看瓶颈
LLM 推理分两阶段:prefill(处理 prompt,算力密集)和 decode(逐 token 生成,访存密集、受 KV Cache 与显存带宽限制)。优化要分别对症。
吞吐优化
- 连续批处理:传统静态批要等整批结束,长短请求互相拖累。vLLM 等做请求级动态调度,某请求解码完立刻让新请求补位,GPU 几乎不空转。
- PagedAttention:仿操作系统分页,把 KV Cache 切成固定块按需分配,消除内存碎片、支持相同前缀共享,并发能力成倍提升。
- 量化:INT8/FP8 权重激活量化、INT4(GPTQ/AWQ)权重量化,降显存占用与带宽压力。
延迟优化
- 投机解码:小草稿模型一次猜多个 token,大模型并行验证,接受则跳步,降低首字后延迟。
- 张量并行:把单层权重切到多卡,扩展可服务的模型规模。
- 其它:prefix caching 复用系统提示、PD 分离(prefill/decode 拆分部署)、chunked prefill。
参见 vLLM/TGI 部署实践 与推理服务架构。
常见误区
⚠️ 常见踩坑
别把「连续批处理」和「静态批处理」混淆——前者是请求级动态调度,后者必须等整批同进同出。也别以为量化「免费提速」:INT4 可能损精度,需在目标任务上评测;FP8 需硬件支持。吞吐与单请求延迟常此消彼长,要按 SLO 权衡。
追问
追问 1:KV Cache 为什么是显存瓶颈,怎么省?
自回归生成需缓存每层每 token 的 K/V,显存随 batch×序列长度×层数线性增长,长上下文/高并发时极易爆显存。优化:PagedAttention 分页消碎片、GQA/MQA 减少 KV 头数、KV 量化(INT8/FP8)、前缀共享复用公共部分。
追问 2:投机解码为什么能加速,瓶颈在哪?
decode 受访存带宽限制、算力闲置。小草稿模型一次提议 k 个 token,大模型一次前向并行验证,接受的 token 免去逐个解码。加速取决于接受率:草稿与目标越接近、温度越低接受率越高;接受率低时额外开销反而拖慢。
追问 3:吞吐和延迟如何权衡?怎么定 SLO?
增大 batch 提吞吐但推高单请求延迟(排队+计算)。按场景定 SLO:在线对话重视 TTFT 与 token 间延迟,离线批处理重视总吞吐与成本。可用 PD 分离、动态 batch 上限、优先级队列分别满足不同 SLA。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。
📖 术语表
🛠️ AI 工具