精读笔记 / LLM Inference Systems

大模型推理系统入门:从模型优化到调度优化

基于微信公众号文章正文与其中 22 个参考资料链接整理。重点不是复述原文,而是把模型侧、系统侧、分布式并行、调度、公平性与缓存策略串成一张可复用的推理系统技术地图。

原文:一起推理吧 正文约 8958 字 参考链接:22 个 生成时间:2026-05-08

核心结论

大模型推理系统的本质,是在 延迟、吞吐、显存、成本、公平性 之间做连续权衡。模型侧优化解决“单次计算和缓存占用太贵”,系统侧优化解决“真实请求又长又短、早到晚到、阶段不同、租户不同”的动态调度问题。

原文以 vLLM 代表的技术路线为主线,把推理系统拆成两条线:一条是模型内部的计算和内存优化,例如 KV Cache、PagedAttention、FlashAttention、MoE;另一条是服务系统的执行和调度优化,例如 continuous batching、prefill/decode 调度、prefix caching、speculative decoding、admission control 与 fairness。

Prefill处理完整 prompt,计算密集,决定首 token 前的大块工作。
Decode逐 token 生成,单步轻但重复多,直接影响流式体验。
KV Cache跨 token 持续占用显存,是长上下文和高并发的核心瓶颈。
Scheduler决定谁进入 batch、谁优先、谁迁移、谁被限流。
我的阅读判断:这篇文章适合作为推理系统入门地图。它没有陷入源码细节,而是把近几年主流论文和工程系统放在同一坐标系里:缓存管理、注意力 IO、稀疏专家、并行切分、批处理、P/D 解耦、缓存感知路由与公平调度。

技术地图

把正文和参考资料合在一起看,现代 LLM 推理系统可以粗略拆成五层。每一层解决的问题不同,但最终都会反馈到用户看到的 TTFT、TPOT、吞吐和尾延迟。

模型结构Transformer、Decoder-only、自回归生成、Attention、MLP、MoE。
内存管理KV Cache、PagedAttention、prefix caching、缓存回收与复用。
算子优化FlashAttention、FlashAttention-2、减少 HBM 读写、提升并行度。
执行调度static/dynamic/continuous batching、chunked prefill、decode 优先。
服务治理admission control、fairness、tail latency、跨实例迁移和多租户隔离。

什么是推理

推理是在模型参数固定后,接收输入并生成输出。与训练相比,它不做反向传播和参数更新,更关注服务体验、资源利用和稳定性。

生成式模型通常采用 Decoder-only 架构,每一步基于已有上下文预测下一个 token。因此推理不是一次性函数调用,而是一个持续推进的生成过程。

Prefill 与 Decode 的根本矛盾

Prefill 和 Decode 的计算形态不同,是推理系统调度复杂性的根源之一。

阶段特征优化目标
Prefill一次处理完整输入,计算密集,容易占住 GPU。降低首 token 等待,避免长 prompt 阻塞 decode。
Decode逐 token 迭代,单步轻但频繁,对流式体验敏感。稳定输出节奏,控制 TPOT 和尾延迟。
重要权衡:吞吐优化倾向更大 batch 和更高 GPU 利用率;延迟优化倾向更快进入执行、更少等待、更稳定 decode。推理系统必须在二者之间动态调和。

模型侧优化

1. KV Cache 与 PagedAttention

自回归生成时,如果每生成一个 token 都重算全部历史上下文,成本会非常高。KV Cache 把历史 key/value 状态保留下来,换取更快的后续 decode。但它也会随着上下文长度和并发数增长,成为显存瓶颈。

PagedAttention 借鉴操作系统分页思想,把一条请求的 KV Cache 拆成固定大小块,通过映射表管理,而不是要求连续大块显存。它减少碎片、降低浪费,也让复杂解码策略和高并发更可控。

2. Attention IO 优化

FlashAttention 的关键不是改变 Attention 数学定义,而是减少中间矩阵在 HBM 和片上 SRAM 之间来回搬运。FlashAttention-2 进一步改进线程块与 warp 的工作划分,提高并行性和实际硬件利用率。

3. MoE 与稀疏激活

MoE 把部分 MLP 替换为专家集合,并用路由器为每个 token 选择少量专家。它的好处是参数规模可以很大,但每个 token 只激活一部分计算;代价是专家路由、负载均衡、token 重排、跨卡通信和显存占用都变复杂。

模型侧主线:Attention 解决“长序列算得慢”,KV Cache 解决“历史不能重算”,PagedAttention 解决“缓存不好管”,MoE 解决“参数规模与计算量的矛盾”。

分布式并行

当模型或流量规模超过单卡能力,就需要把计算、参数或请求拆到多卡/多机。

方式拆什么适合解决
TP同一层张量/算子单层太大或算力不足。
PP模型层整模型放不进单卡。
DP模型副本模型能放下,但请求流量大。
EPMoE 专家专家数量多,专家参数放不下或通信需优化。

参考资料里的 Megatron Core 和 DeepSpeed MoE 都强调:MoE 的推理/训练不只是“多放几个专家”,真正难点是专家并行、token dispatch、通信重叠、负载均衡和专家切分。

Batching 演进

推理系统做 batching 是为了喂满 GPU,但拼批也会引入等待和互相拖累。

  1. Static Batching:攒够固定数量再跑,实现简单,对波动流量不友好。
  2. Dynamic Batching:在短时间窗里收集请求,兼顾一点灵活性。
  3. Continuous Batching:运行中的 batch 可持续加入新请求,适合输出长度高度不确定的生成任务。
  4. Selective Batching:按长度、阶段、缓存命中等特征分桶,减少互相干扰。

Orca 和 vLLM 相关资料共同指向一个结论:LLM 服务不是传统固定 batch 推理,调度器必须在生成过程中持续重组 batch。

系统侧优化

Chunked Prefill

Sarathi-Serve 的思路是把大块 prefill 切成更均匀的小块,使 decode 请求能在 prefill 片段之间穿插执行。它并不减少 prefill 总工作量,但降低了 prefill 长时间独占 GPU 造成的阻塞。

Prefill/Decode 解耦

DistServe 和 P/D-Serve 都强调 prefill 与 decode 的资源需求不同。把二者放在不同实例或资源池上,可以让 prefill 追求吞吐,让 decode 追求稳定延迟;代价是 KV Cache 转移、网络、路由和全局调度更复杂。

Prefix Caching 与缓存感知调度

很多请求共享系统提示词、模板、长文档前缀或 few-shot 示例。Prefix caching 复用已计算的 KV blocks,避免重复 prefill。Preble 进一步把“缓存能否复用”变成分布式调度决策的一部分,在缓存命中与负载均衡之间联合优化。

Speculative Decoding

Speculative decoding 先由便宜的 draft 路径生成多个候选 token,再让目标模型批量验证。它的目标是减少逐 token 等待。Self-speculative decoding 则不依赖外部小模型,而是通过跳过部分中间层生成草稿,再由原模型验证。

Admission Control 与 Fairness

当请求长度、输出长度和租户行为不可预测时,系统不能只优化平均吞吐。Fairness in Serving LLMs 把公平性定义到 token 成本层面;Llumnix 则强调运行时重调度和请求状态迁移,用于缓解负载不均、碎片和 SLO 违约。

参考资料精读索引

下面是对文章中参考链接的二次阅读整理。每条不是简单列名,而是标出它在技术地图里的位置。

资料主题读后定位
ai-infra-learningAI Infra 学习材料系统化学习入口,适合补齐工程基础与实践脉络。
Attention Is All You NeedTransformer现代大模型架构起点,解释为什么 Decoder-only 自回归生成成为主流。
Inside vLLMvLLM 系统剖析把引擎、调度器、KV cache manager、continuous batching、prefix/spec decoding 串起来。
OrcaContinuous batching早期代表性系统,核心是面向生成式模型的迭代级调度。
PagedAttention / vLLM paperKV Cache 内存管理用分页思想降低 KV Cache 碎片和重复,提升吞吐。
FlashAttentionIO-aware Attention关注 HBM/SRAM 之间的数据搬运,是 exact attention 的工程优化。
FlashAttention-2Attention 并行优化通过更好的 work partitioning 提升硬件利用率。
Hugging Face MoE 详解MoE 入门讲清专家、路由、稀疏激活、训练/推理挑战和显存压力。
Switch Transformers稀疏专家扩展用更简单路由和稀疏激活扩展到超大参数模型。
DeepSpeed MoE InferenceMoE 推理并行强调 expert parallelism、expert slicing、通信调度与 MoE 推理优化。
Megatron Parallelism GuideTP/PP/DP/CP/EP多维并行策略参考,适合理解大模型如何跨 GPU 拆分。
Megatron Core MoEMoE 工程实现覆盖专家并行、router、load balancing、token dispatch 与 grouped GEMM。
TensorRT-LLM In-Flight Batching在线拼批说明工业推理引擎如何把动态请求纳入执行过程。
Sarathi-ServeChunked prefill把 prefill 切块,缓解吞吐和延迟冲突。
DistServeP/D 解耦将 prefill 与 decode 拆到不同资源,追求 goodput 和 SLO。
P/D-Serve大规模 P/D 服务面向多 xPU 集群,关注细粒度组织、动态 P/D 比例和 RDMA KV 传输。
vLLM Prefix Caching前缀缓存复用 KV cache blocks,减少重复 prompt 计算。
Preble缓存感知分布式调度联合优化 KV 复用与负载均衡,面向共享前缀请求。
Speculative Sampling投机解码用 draft 模型生成候选,再由目标模型验证。
Draft & Verify自投机解码跳过部分层生成草稿,无需额外小模型,目标是无损加速。
Fairness in Serving LLMs公平调度用 token 成本定义公平性,而不是只做请求级限流。
Llumnix动态重调度通过请求和状态迁移缓解负载不均、碎片和 SLO 问题。

最值得记住的系统原则

  1. 显存比 FLOPs 更早成为瓶颈:长上下文和高并发下,KV Cache 管理决定系统上限。
  2. 平均吞吐不能代表线上体验:P95/P99、TTFT、TPOT 才能反映用户体感。
  3. 调度器是推理系统核心组件:它不是外围队列,而是决定 GPU 利用率和服务质量的控制面。
  4. 缓存应该进入路由决策:prefix caching 命中会改变请求真实成本,调度不能只看队列长度。
  5. MoE 把计算问题变成通信和负载均衡问题:稀疏激活降低每 token 计算,但专家路由会带来新系统复杂度。

实践落地清单

读后重构:一套推理请求的生命周期

把所有资料合并后,一个请求在现代推理系统中的路径可以这样理解:

入队 → admission control → 路由/缓存命中判断 → batch 选择 → prefill / chunked prefill → KV Cache 建立 → decode 循环 → speculative / prefix reuse / fairness 调整 → 输出完成 → KV blocks 回收

这条链路里每一步都可能成为瓶颈。早期系统常把优化焦点放在 kernel 和单模型吞吐上;新一代系统则越来越重视全局调度、缓存复用、跨实例迁移、公平性和 SLO。

风险与疑点

适合继续深挖的顺序

  1. 先读 vLLM anatomy,建立引擎、scheduler、KV manager 的整体模型。
  2. 再读 PagedAttention 与 FlashAttention,理解显存和 IO 为什么重要。
  3. 接着读 Orca、Sarathi、DistServe,理解 batching 与 P/D 调度演进。
  4. 做长上下文/RAG 时读 prefix caching 和 Preble。
  5. 做多租户平台时读 Fairness 和 Llumnix。
  6. 服务 MoE 模型时读 Hugging Face MoE、DeepSpeed MoE 和 Megatron Core MoE。

来源

原文:《大模型推理系统入门:从模型优化到调度优化》,公众号作者显示为“一起推理吧”。

正文提取时间:2026-05-08T09:49:02Z。参考资料通过 arXiv API 与网页正文提取工具读取。本文为阅读笔记与综合分析,不复制原文完整内容。

vLLM PagedAttention FlashAttention MoE Continuous Batching Prefill / Decode Prefix Caching Speculative Decoding Fairness