以下内容来自这篇 ICML 的综述 tutorial
LLM Infra 深度学习笔记:从算法到系统
第一部分:核心挑战与技术全景
核心矛盾: LLM Serving 面临的主要挑战是显存墙(Memory Wall)和计算墙(Compute Wall)。Transformer 的自回归生成机制导致了内存受限(Memory-bound)的特性,特别是在长序列场景下 。
优化分类体系 (Taxonomy):
目前的优化技术主要分为两大类 :
- 算法创新 (Algorithmic Innovations): 修改模型结构或解码过程。
- 系统优化 (System Optimizations): 改进底层系统(内存、调度、内核),不改变模型语义。
第二部分:算法创新 (Algorithmic Innovations)
这一层面的优化旨在通过“更聪明的计算”来减少工作量。
1. 解码算法 (Decoding Algorithm)
传统的自回归解码(Auto-regressive)需要逐个生成 Token,速度受限于串行依赖。

- 投机解码 (Speculative Decoding/Inference):
- 原理: 利用一个小模型(Draft Model)快速生成多个候选 Token,然后由大模型(Target Model)并行验证。打破了串行依赖,因为验证过程是并行的 。
- 代表工作:
- SpecInfer: 基于树(Tree-based)的推测,生成 Token Tree 进行并行验证 。
- Medusa: 不使用独立小模型,而是在大模型上增加额外的 Head 来预测后续 Token,已被 TensorRT-LLM 集成 。
- 效果: 在不牺牲准确性的情况下,推理性能提升 2-3 倍 。
- 非自回归解码 (Non-autoregressive Decoding): 尝试一次性并行生成所有 Token,但在 Token 依赖关系强的场景下,准确性不如自回归 。
- Early Exiting (早期退出): 对于简单的 Token 生成,不需要跑完所有 Transformer 层,通过中间层的分类器提前输出,减少计算量 。
2. 架构设计 (Architecture Design)
针对 Transformer 结构的固有瓶颈进行改造。

- Attention 简化与 KV Cache 优化:
- MQA (Multi-query Attention) & GQA (Group-query Attention): 多个 Query Head 共享一组 Key/Value Head,显著减少 KV Cache 的显存占用和加载量 。目前 LLaMA-2, Falcon 等均采用此方案。
- Sliding Window / StreamingLLM:
- 发现: 起始 Token(Attention Sinks)对语义贡献最大,必须保留。
- 机制: 保留起始 Token 和最新的滑动窗口 Token,丢弃中间部分。这使得模型可以处理无限长的流式输入,且计算量不随长度增加 。
- 混合专家模型 (MoE, Mixture of Experts):
- 原理: 条件计算(Conditional Computing)。将模型拆分为多个 Experts,每个 Token 经由 Router 只激活部分 Expert。
- 优势: 在增加参数量(提升模型容量)的同时,保持推理时的计算量(FLOPs)不变 。
- CoE (Combination of Experts): SambaNova 提出的架构,相比 MoE 具有更大的扩展性,旨在降低训练成本 。
- 线性 Attention 与 RNN 变体: 试图打破 $O(L^2)$ 复杂度,如 Mamba (SSM), RWKV, RetNet 。
3. 模型压缩 (Model Compression)
- 量化 (Quantization):
- Weight-only: 仅量化权重(如 GPTQ, AWQ),保留激活为 FP16,适合显存受限场景 。
- Weight + Activation: 同时量化权重和激活(如 SmoothQuant W8A8),适合计算密集型场景 。
- 挑战: 激活值的异常值(Outliers)使得量化比权重更难 。
- 剪枝 (Pruning): 结构化剪枝(Structured Pruning)如 LLM-Pruner,移除整行/列或 Head,便于硬件加速 。
第三部分:系统优化 (System Optimizations)
这一层面的优化旨在通过“更高效的工程”来压榨硬件性能。
1. 显存管理 (Memory Management)
显存是 LLM 推理的核心瓶颈,尤其是 KV Cache。
- PagedAttention (vLLM 核心技术):
- 问题: 传统 KV Cache 预分配连续显存,导致严重的内部碎片(Internal Fragmentation)和显存浪费 。
- 方案: 借鉴操作系统的虚拟内存(Virtual Memory)分页思想。将 KV Cache 切分为非连续的 Blocks,按需分配。
- 收益: 极大地提升了显存利用率,从而允许更大的 Batch Size,显著提高吞吐量 。
2. 请求调度 (Request Scheduling)
- Continuous Batching (Orca 核心技术):
- 问题: 传统 Static Batching 必须等待 Batch 中最长的序列生成完,短序列才能返回,导致 GPU 空转 。
- 方案: 迭代级调度(Iteration-level scheduling)。一个序列生成结束(遇到 EOS)立即移出,新请求立即加入 Batch,无需等待整个 Batch 结束 。
- 现状: 已被 vLLM, TensorRT-LLM, RayLLM 等所有主流框架采用 。
3. 内核优化 (Kernel Optimization)
- FlashAttention (v1 & v2):
- 原理: IO 感知(IO-aware)。利用 GPU 的 SRAM(高速缓存)进行分块计算(Tiling),减少与 HBM(显存)之间的数据搬运次数。将复杂度从 $O(N^2)$ 的内存访问优化为线性 。
- FlashDecoding:
- 场景: 针对长序列(Long Context)生成阶段的优化。
- 原理: 在 Sequence Length 维度进行并行计算(Split-K),解决 Batch Size 较小时 GPU 利用率不足的问题 。
- FlashDecoding++: 进一步引入异步 Softmax 和硬件资源优化 。
4. 并行计算 (Parallel Computation)
当单卡显存不足以放下模型时,需要分布式推理。
- Tensor Parallelism (TP): 切分模型层内部(如矩阵乘法),粒度最小,通信频繁,通常用于单机多卡(NVLink 环境) 。
- Pipeline Parallelism (PP): 将模型按层切分到不同设备,流水线执行。通过微批次(Micro-batches)减少气泡 。
- Sequence Parallelism (SP) / Context Parallelism: 针对超长序列,将序列切分到不同设备。Megatron 的实现结合了 Ring Attention 。
第四部分:训练基础设施 (Training Infra)
虽然重点是 Serving,但掌握 Infra 必须了解训练侧的演进 。
- Megatron-LM 演进史:
- 第一代: 引入 Tensor Parallelism (TP) 和 Model Parallelism 。
- 第二代: 协同优化 TP, PP, DP。优化了 Pipeline 的气泡 。
- 第三代: 支持 Sequence Parallelism,并实现了选择性重计算(Selective Recomputation),即只重算计算量小但占显存大的激活值 。
- DeepSpeed:
- ZeRO (Zero Redundancy Optimizer): 核心特性。去除数据并行中的显存冗余。
- Offloading: 将计算或存储卸载到 CPU/NVMe,降低显存门槛 。
第五部分:主流框架对比与选型
根据 和 的分析:
| 框架 | 核心技术 | 显存管理 | 调度策略 | 适用场景 |
|---|---|---|---|---|
| vLLM | PagedAttention | Block-level (Paged) | Continuous Batching | 高吞吐量要求、易用性要求高的场景。社区最活跃。 |
| TensorRT-LLM | In-flight Batching, Tensor Core 优化 | PagedAttention | In-flight Batching | NVIDIA 官方,追求极致性能(FP8, Kernel 优化),但在定制化上门槛较高。 |
| LightLLM | Token-level memory | Token-level | Token-level | 更加细粒度的显存管理,适合学术研究。 |
| FlexFlow-Serve | SpecInfer | - | - | 专注于低延迟,利用 SpecInfer 进行投机解码。 |
| DeepSpeed-MII | ZeRO-Inference | - | - | 适合多节点大规模模型推理。 |
第六部分:总结与关键知识点速记
- 为什么要做 LLM Infra? 解决显存不够(存不下)和计算太慢(等太久)的问题。
- 显存优化两大神器: PagedAttention(解决碎片化,提升 Batch Size)、Quantization(W8A8/W4A16,降低显存占用)。
- 速度优化两大神器: FlashAttention(减少 IO 访问)、Speculative Decoding(打破串行依赖)。
- 调度优化核心: Continuous Batching(随进随出,不留空转)。
- 未来趋势: 软硬协同(FP8 硬件支持)、长窗口优化(FlashDecoding, Sequence Parallel)、投机推理的普及。
