· 王思腾 · 大模型工程 · 10 分钟阅读

LLM 推理优化:大模型为什么慢,以及如何提速降本

大模型推理是自回归逐 token 生成,显存带宽是瓶颈。本文讲清 Prefill/Decode 两阶段、KV Cache 的作用与开销,再逐个聊连续批处理、PagedAttention(vLLM)、量化(INT8/INT4)、投机解码、FlashAttention 与并行策略,以及延迟与吞吐怎么权衡。

大模型推理是自回归逐 token 生成,显存带宽是瓶颈。本文讲清 Prefill/Decode 两阶段、KV Cache 的作用与开销,再逐个聊连续批处理、PagedAttention(vLLM)、量化(INT8/INT4)、投机解码、FlashAttention 与并行策略,以及延迟与吞吐怎么权衡。

大模型应用最大的运营成本往往不是训练,而是推理(inference):用户每发一句话,模型都要实时计算。一次生成可能要几秒、占用昂贵的 GPU。理解推理为什么慢,才能谈优化。本文从原理出发,梳理当前主流的推理加速技术。

一、为什么大模型推理慢且贵

大模型是自回归(autoregressive)生成的:它不是一次性输出整句,而是一个 token 一个 token 地生成,每个新 token 都要把模型完整跑一遍前向计算。

两个关键事实:

  1. 参数量巨大:70 亿~数千亿参数,权重本身就要占数十 GB 显存;
  2. 逐 token 串行:生成第 100 个 token 必须等前 99 个算完,无法并行跳过。

而且推理阶段常常是显存带宽受限(memory-bound),而非算力受限——瓶颈在于“把庞大的权重从显存搬到计算单元”的速度,而不是算术运算本身。这决定了优化方向:减少要搬运的数据、提高 GPU 利用率、压缩模型。

二、两个阶段:Prefill 与 Decode

一次推理分两个性质不同的阶段:

阶段做什么计算特征
Prefill(预填充)一次性处理整个输入 prompt,算出每个 token 的表示计算密集(compute-bound),可大规模并行
Decode(解码)逐 token 生成输出,每步只算 1 个新 token访存密集(memory-bound),GPU 利用率低
  • Prefill 像“批量读题”,一次并行处理所有输入 token;
  • Decode 像“逐字写字”,每步都要加载全部权重却只产出 1 个 token,单请求时 GPU 大量算力闲置。

这就引出了推理优化的核心抓手之一:别让 GPU 在 Decode 阶段闲着。

三、KV Cache:空间换时间

生成每个新 token 时,都要用到前面所有 token 的注意力(Attention)。如果每步都重算全部历史,代价是 O(n²)。

KV Cache 的做法是:把之前每个 token 的 Key、Value 张量缓存下来,生成新 token 时只计算新 token 的部分、复用缓存。这把重复计算省掉了,是现代推理的标配。

但代价是显存占用随上下文长度和并发数线性增长:

  • 上下文越长、并发越高,KV Cache 占的显存越多,甚至超过模型权重;
  • KV Cache 管理得好不好,直接决定能同时服务多少用户。

围绕 KV Cache 的优化是推理引擎的核心战场。

四、关键优化技术

1. 连续批处理(Continuous Batching)

传统静态批处理要等一批里最长的请求生成完才能释放整批,短请求被拖慢、GPU 空转。

连续批处理(也叫动态批处理 / in-flight batching)以 token 为粒度调度:

  • 每个解码步,把当前所有活跃请求动态组成一个 batch 一起算;
  • 某请求生成结束就立即退出、新请求立即插入,不必等整批;
  • 极大提升 Decode 阶段的 GPU 利用率和吞吐。

这是 vLLM、TGI 等推理引擎高吞吐的基础。

2. PagedAttention 与 vLLM

KV Cache 的显存碎片和浪费是大问题。vLLM 提出 PagedAttention,借鉴操作系统虚拟内存分页思想:

  • 把 KV Cache 切成固定大小的块(block/page),逻辑上连续、物理上可不连续;
  • 按需分配、跨请求共享(如相同 prompt、beam search),显著减少碎片和预留浪费;
  • 结果是显存利用率大幅提升,相同显存下并发量可达数倍。

vLLM 因此成为开源推理服务的事实标准之一。

3. 量化(Quantization)

用更低的数值精度存储权重和计算,减少显存占用和数据搬运:

精度说明
FP16/BF16训练/推理常用基准
INT88 位整数量化,精度损失通常很小
INT44 位,压缩更激进,体积约为 FP16 的 1/4
  • 方法:GPTQ、AWQ(权重量化,离线校准);SmoothQuant、W8A8(权重+激活);
  • 收益:显存大降、访存减少 → 单卡能装更大模型、Decode 更快;
  • 代价:极低比特可能损失效果,需评测;通常要推理引擎和 GPU(如 INT8/INT4 指令)支持。

4. 投机解码(Speculative Decoding)

用一个小模型(draft)快速猜测接下来的几个 token,再用大模型(target)一次并行验证这一串猜测对不对:

  • 猜对的 token 直接采纳,猜错的丢弃重算;
  • 利用“验证多个 token 可并行”的特性,在不损失输出质量的前提下降低延迟;
  • 适合小模型命中率高的场景。

5. FlashAttention

标准 Attention 要把中间的注意力矩阵写回显存,I/O 开销大。FlashAttention 通过分块计算、融合算子,尽量在 GPU 高速缓存(SRAM)里完成、减少对显存的读写,显著加速 Prefill 和长上下文,并省内存。它不改变计算结果,是“免费”的工程加速。

6. 模型与并行层面

  • 模型蒸馏 / 用小模型:能用 7B 解决就别上 70B;任务路由让简单请求走小模型(对应 Agent 文章里的路由模式)。
  • 张量并行(Tensor Parallelism):把单层权重切到多卡,适合单个大模型放不下;
  • 流水线并行(Pipeline Parallelism):把不同层放到不同卡,适合多机;
  • 前缀缓存 / Prompt 缓存:对重复的系统提示词、公共前缀缓存 KV,多请求共享。

五、延迟 vs 吞吐:两个目标

推理优化要先分清你优化什么:

  • 面向在线对话:关注首 token 延迟(TTFT)和每 token 延迟(TPOT/ITL),用户要“秒回、打字流畅”,倾向小 batch、低延迟;
  • 面向离线批处理:关注总吞吐(tokens/s)和成本,可大 batch、高并发、激进量化。

工程上常通过连续批处理、合理的最大并发、前缀缓存在两者间平衡,并对在线/离线用不同部署。

六、常用推理框架

框架特点
vLLMPagedAttention、连续批处理、高吞吐,开源主流
TensorRT-LLM(NVIDIA)极致性能,算子/量化深度优化,运维较重
SGLang结构化生成、RadixAttention 前缀复用
TGI(HuggingFace)易部署,生态成熟
llama.cpp / OllamaCPU/单卡、量化本地运行,适合边缘与开发
云托管各云厂 Serverless 推理 API,免运维、按量计费

七、落地建议清单

  1. 先选对模型大小:小模型能达标就不用大模型,配合路由;
  2. 上推理引擎:用 vLLM/SGLang 等获得连续批处理与 PagedAttention;
  3. 开前缀缓存:系统提示词、公共上下文复用 KV;
  4. 试量化:INT8/INT4(AWQ/GPTQ)显存立省,务必做效果评测;
  5. 长文本优化:FlashAttention、合理上下文长度、必要时用 KV 量化;
  6. 区分在线/离线部署,分别优化延迟与吞吐;
  7. 建立监控:TTFT、TPOT、吞吐、显存、每千 token 成本,用数据驱动调优。

八、小结

LLM 推理的本质矛盾是:自回归逐 token 生成 + 访存受限。优化围绕三条主线展开:

  1. 喂饱 GPU——连续批处理、PagedAttention/vLLM 提升 Decode 利用率与 KV 管理;
  2. 减少搬运与计算——KV Cache、FlashAttention、量化、前缀缓存、蒸馏小模型;
  3. 对齐业务目标——在线重延迟、离线重吞吐,用监控和评测持续权衡。

把这些手段组合起来,同样的模型往往能在不牺牲体验的前提下,把吞吐提升数倍、成本砍掉一大半——这正是大模型从 demo 走向规模化落地的关键工程能力。

本文由 AI 辅助创作,所有内容仅供交流与参考。
分享:
返回博客
Prompt Engineering 实战:让大模型稳定输出的方法论与 7 个技巧

Prompt Engineering 实战:让大模型稳定输出的方法论与 7 个技巧

同样一个模型,有人用起来频频翻车,有人却能让它稳定产出。差别往往不在模型,而在 Prompt 写得够不够“像一份规格说明”。这篇不讲玄学咒语,而是从模型为什么会听 Prompt 讲起,把角色边界、Few-shot、思维链、结构化输出、任务拆解、拒答策略、版本评测七个技巧讲透,并补上上下文工程和常见反模式。

RAG 原理详解:让大模型用上私有知识的检索增强生成

RAG 原理详解:让大模型用上私有知识的检索增强生成

大模型知识冻结、会幻觉、不知道企业内部数据。RAG(检索增强生成)通过“先检索、再生成”把外部知识注入上下文,是当前落地最广的大模型应用范式。本文带你走通 RAG 的完整链路:分块、嵌入、检索与重排,以及工程上最常踩的坑。

大模型应用架构进阶:从 Prompt、工作流、RAG 到 Agent 的选型与演进

大模型应用架构进阶:从 Prompt、工作流、RAG 到 Agent 的选型与演进

“Prompt、RAG、Agent 三选一”是个过于粗糙的说法。真实系统是一条从“全确定”到“全自主”的连续光谱,RAG 本质是给模型接知识的能力,Agent 也分固定编排和自主循环。这篇往深里聊:工作流模式、RAG 的三个深浅层级、什么时候才该让模型自主决策,以及成本、延迟和失败模式这些入门文章很少算的账。

Spring AI 介绍与实践:用 Java 生态的方式接入大模型

Spring AI 介绍与实践:用 Java 生态的方式接入大模型

Java 团队想接大模型,不必硬套 Python 的 LangChain。Spring AI 把 ChatClient、Prompt 模板、结构化输出、RAG(向量库)、函数调用、对话记忆这些能力做成了 Spring 风格的抽象和 Starter,配几行 yml、写几行链式调用就能跑。这篇从核心抽象讲起,带你用 Spring Boot 一步步实现聊天、结构化映射、RAG 知识库和工具调用,并聊聊生产里要注意的事。