📘 vLLM·内存管理
PagedAttention 精讲
🎯 30 章 · 从入门到源码
✨ 点击卡片跳转对应章节 · 友好色系
1
大模型推理的显存困境:为什么KV Cache是瓶颈?传统内存管理方式的缺陷。
显存瓶颈 · 传统缺陷
2
PagedAttention核心思想:从操作系统的虚拟内存分页机制借鉴灵感,解决显存碎片化问题。
虚拟内存 · 碎片化解法
3
KV Block的设计:固定大小的逻辑块(Block),每个Block存储固定数量token的Key和Value。
逻辑块 · 固定token
4
Block Table机制:逻辑块到物理块的映射表,实现非连续物理显存的连续逻辑访问。
映射表 · 非连续连续化
5
物理显存管理:物理块分配器(Block Allocator),如何管理空闲块和已分配块。
分配器 · 空闲/已分配
6
内存共享(Copy-on-Write):多个序列共享同一个物理块,减少显存占用。
写时复制 · 共享显存
7
调度器与内存管理:vLLM调度器如何根据可用物理块数量决定是否调度新请求。
调度决策 · 物理块感知
8
Prefill阶段的内存分配:首次推理时如何为Prompt分配KV Block。
预填充 · 首次分配
9
Decode阶段的内存分配:逐token生成时如何动态分配新的KV Block。
逐token · 动态分配
10
显存预留与水位线:Watermark机制,防止显存耗尽导致OOM。
水位线 · OOM防护
11
交换到CPU(Swapping):当显存不足时,将不活跃的KV Block换出到CPU内存。
CPU换出 · 显存不足
12
前缀缓存(Prefix Caching):相同Prompt前缀的KV Block复用,加速推理。
前缀复用 · 推理加速
13
自动前缀检测:如何自动识别和匹配共享前缀,无需用户手动指定。
自动匹配 · 无需指定
14
哈希与缓存查找:使用哈希表快速查找已缓存的KV Block。
哈希表 · 快速查找
15
缓存淘汰策略:LRU(最近最少使用)策略在vLLM中的应用。
LRU · 淘汰策略
16
多GPU推理的内存管理:张量并行(Tensor Parallelism)下的显存分配。
张量并行 · 多GPU
17
流水线并行(Pipeline Parallelism)的内存管理:各Stage的显存隔离与共享。
流水线并行 · Stage隔离
18
投机解码(Speculative Decoding)的内存优化:草稿模型与目标模型的KV Cache共享。
投机解码 · 草稿模型
19
连续批处理(Continuous Batching)与内存复用:动态增删序列时的内存回收。
连续批处理 · 内存复用
20
显存统计与监控:vLLM提供的显存使用统计API,如何监控Block使用率。
监控API · Block使用率
21
性能调优:Block大小(Block Size)的选择对吞吐量和显存利用率的影响。
Block Size · 吞吐调优
22
最大序列长度与最大批处理大小的关系:如何根据显存容量计算最大并发数。
序列长度 · 并发计算
23
与HuggingFace Transformers的对比:传统实现的内存爆炸 vs vLLM的高效管理。
HF对比 · 内存爆炸
24
与TensorRT-LLM的对比:两种框架在内存管理上的设计哲学差异。
TensorRT-LLM · 设计哲学
25
源码解析:BlockManager类的核心逻辑与数据结构。
BlockManager · 核心源码
26
源码解析:PagedAttention CUDA Kernel的实现要点。
CUDA Kernel · 实现要点
27
源码解析:Scheduler如何与BlockManager交互。
Scheduler · 交互机制
28
实战:使用vLLM API监控显存使用并调整Block Size。
实战 · 监控调参
29
实战:配置Swapping参数,在显存受限环境下运行大模型。
实战 · Swapping配置
30
未来展望:PagedAttention的演进方向,如稀疏注意力与PagedAttention的结合。
未来 · 稀疏注意力