文章介绍了大模型推理面临的显存不足和并发不高效挑战,以及vLLM框架如何通过系统级优化解决这些问题。vLLM的核心技术包括PagedAttention(解决KV Cache显存碎片)、Prefix Sharing(相同前缀共享KV Cache)、Continuous Batching(动态批处理提高GPU利用率)和KV Cache淘汰策略。这些技术使vLLM在高并发、长上下文场景下实现高吞吐、低延迟和显存高效利用,成为生产环境中的高性能推理框架。
大模型应用正在飞速发展:从聊天机器人(Chatbot)、智能客服,到 AI 写作、代码助手,它们已经融入到我们日常的工作与生活中。
但当我们真正把大模型“搬到生产环境”时,往往会撞上两个难题:
显存不够用:模型本身能跑,但一旦上下文变长,显存占用就迅速膨胀,甚至直接报错 Out Of Memory;
并发不高效:多个用户同时请求时,GPU 资源并未被充分利用,请求排队导致延迟体验差。
大模型推理的挑战
大模型的推理表面上是输入 Prompt,输出 Respone。但背后隐藏着多重挑战。
1. Prefill & Decode 的差异性
推理可以拆分为两个阶段:
- Prefill 阶段:一次性处理用户输入的完整 prompt,算力开销集中且巨大。
- Decode 阶段:逐 token 生成输出,每次计算量小,但需要频繁访问和新增 KV Cache,显存开销持续增长。
这意味着:Prefill 阶段的问题是算力,Decode 阶段的瓶颈是显存,两者对系统的要求完全不同,很难用统一的调度与资源管理策略兼顾。
2. 动态请求场景下的调度难题
在线服务场景中,请求是随时到来的:
- 有的请求只生成几十个 token,很快结束。
- 有的请求可能要生成几千个 token,长期占用显存和算力。
如果调度不合理:
- 短请求会被“拖慢”,延迟上升,用户体验差。
- 长请求可能“霸占资源”,导致其他用户的任务无法及时调度。
3. KV Cache 的显存瓶颈
每个 token 的推理都需要存储对应的 KV Cache。
- 上下文越长,占用显存越大;
- 多个请求并发时,显存消耗会急剧膨胀;
- 如果显存不足,系统只能淘汰一些KV Cache,然后重算,但这会带来 性能下降。
大模型推理复杂性来自 算力差异、请求动态性 和 显存瓶颈,系统必须在 算力、显存、调度 三者间做精细化优化。
推理框架的演进
大模型推理框架的发展经历了从 易用 到 高效 的演进:
- Hugging Face Transformers:易用为主
简单易用、生态成熟,但长上下文和高并发场景下,吞吐率和显存利用率有限。 - DeepSpeed-Inference / FasterTransformer:算子级优化
通过内核优化和算子融合加速推理,但仍难解决:
- KV Cache 的高效管理(长上下文显存膨胀);
- 动态批处理(在线请求随时到达的调度问题)。
正是针对这些挑战,vLLM 从系统层重新设计推理引擎,引入 动态批处理、PagedAttention 和 前缀共享,实现高吞吐、高并发、高显存利用率。
什么是 vLLM?
vLLM 是由 UC Berkeley 团队开源的一个 大模型推理框架(Serving Framework),它的目标是让大语言模型(LLM)在推理时更高效,特别是在 高并发、多请求、长上下文 等场景下。

vLLM 的三大关键技术:
- **PagedAttention:**像操作系统虚拟内存一样管理 KV cache,解决显存碎片问题。
- **Continuous Batching:**动态批处理机制,让新请求能随时加入,提升吞吐与并发。
- **Prefix Sharing:**相同前缀的请求共享 KV Cache,减少重复计算。
从而解决了显存碎片问题、KV Cache 不能复用的问题,在相同的延时水平下,vllm 是FastTransformer 的 2~4 倍。

PagedAttention 在大模型推理中,KV Cache 是加速生成的核心机制。它存储了历史上下文的注意力信息,使模型在 decode 阶段无需重新计算整个上下文的注意力,从而大幅提升推理效率。 然而,传统框架在管理 KV Cache 时存在几个明显痛点: 1. 内部显存碎片 短请求仍然必须占用最大生成长度(max new token)显存空间,导致大量内存被闲置,利用率低。 假设模型context length 为 2048,max new token 为 512。如下述例子,浪费 505 个 token 显存空间。 2. 外部显存碎片
不同请求的长度和生命周期不一致,显存中容易形成零散空洞。显存分配器 很难找到连续大块显存,可能引发 OutOfMemory。 假设 request 3 推理完成后,释放了物理显存空间,但是未来的请求,如 request 5 等需要的显存空间比 request 3释放的空间大,request 3 释放的空间就成为了外部碎片。 3. KV Cache 无法复用 每个请求的 KV Cache 都是独立分配且独占使用的。即使两个请求(例如 request 1 和 request 2)的 prompt 存在相同的前缀部分,这些已经计算好的 KV Cache 也无法共享或复用,只能重复计算并各自存储一份。 vLLM 提出的 PagedAttention 技术巧妙借鉴了操作系统的分页机制: * 拆分KV Cache:把每个请求的 KV Cache 分成固定大小(如16个token)的逻辑页。 * 灵活分配:不同请求可以按需申请页,不需要大块的连续物理显存。 * 页表管理:每个请求维护一个页表,记录它的 KV cache 存在哪些物理页里。注意力计算时通过页表将这些小页拼接起来使用。 优势: * 避免显存碎片:零散小页可以灵活复用,不会出现大块空洞无法使用的情况。 * 显存利用率高:短请求只占用实际需要的页数,不浪费资源。
Prefix Sharing
在大模型推理中,不同请求的 prompt 往往有相同的前缀。例如:
- request 1:“写一首诗,主题是春天,风格模仿李白”
- Request 2:“写一首诗,主题是春天,风格模仿杜甫”
传统方法会重复计算和存储前缀的 KV Cache,浪费显存。
vLLM 的 Prefix Sharing 技术正是为了解决这一问题。其核心思路是:
- 借助 PagedAttention 的分页机制,把 KV Cache 划分成固定大小的逻辑页。
- 用这些逻辑页构建一棵 前缀树(Prefix Tree)。相同前缀的请求共享同一组物理页,不再重复存储。
- 当请求在共享前缀之后生成了不同的 token,就会触发 Copy-on-Write(写时复制):共享的逻辑页保持不变,新的 token 会写入一份复制出的新页,从而在前缀树中分叉。

优势:
- 节省显存:相同前缀只保留一份 KV Cache。
- 减少计算:前缀部分只需计算一次。
- 保证正确性:通过 Copy-on-Write,让分叉后的请求互不干扰。
Continuous Batching
在传统推理框架里,batch 通常是静态批处理(Static Batching):
- 一个 batch 中的所有请求必须同时交给 GPU 执行。
- 如果某些请求先完成,其余请求仍在生成,那么 batch 中空闲的位置就浪费了。
- 新来的请求需要等到当前 batch 完成后才能被处理,延迟增加。
举个例子:
request 1 生成 10 个 token 就完成了,request 2 生成 1000 个 token 才完成。当 request 1 在第 10 步完成后,它在 batch 里对应的 slot 会空出来,但这部分计算资源不会自动被新请求利用。
结果就是:
- 吞吐率下降:GPU 有空闲却不能马上服务新请求。
- 延迟增加:新请求必须等 batch 完成。
vLLM 引入了 Continuous Batching,允许不同的请求同时在一个 batch 中运行:
- 已在 decode 阶段的老请求,和刚进入 prefill 阶段的新请求,可以放在同一个 batch 里计算。
- 当一个请求完成时,它占用的 slot 会立即被回收,新请求可以立刻加入 batch,而不用等待整个 batch 完成。
- batch 的大小是 动态变化 的,始终保持 GPU 尽可能满负荷运行。
优势:
- 高吞吐:GPU 始终保持高利用率。
- 低延迟:新请求无需等待,随时可以插入。
- 更灵活的调度:不同长度的请求能混合执行,避免长请求拖慢整体速度。
KV Cache 淘汰策略
在 vLLM 中,KV Cache 是推理加速的关键,但显存有限,需要动态管理。系统采用分页管理和淘汰策略,核心逻辑如下:
- 分页管理:KV Cache 按固定大小逻辑页分配,每页存储若干 token KV Cache。
- 显存不足时交换:当 GPU 显存不足时,部分 KV Cache 页会被换出到 CPU 内存,释放 GPU 显存供新请求使用。
- 内存不足时淘汰:如 CPU 内存也不足,使用淘汰策略如 LRU,丢弃相应的 KV Cache 页。
- 需要时重新计算:被丢弃的 KV Cache 页在后续生成新 token 时,会重新计算,保证推理正确性。
总结
vLLM 通过系统级优化,引入了 PagedAttention、Prefix Sharing、Continuous Batching 和 KV Cache 淘汰策略,形成高性能推理方案:
- PagedAttention:将 KV Cache 分页管理,按需分配逻辑页,解决内部与外部显存碎片问题。
- Prefix Sharing:相同前缀请求共享 KV Cache,节省显存并减少重复计算,分叉时通过 Copy-on-Write 保证正确性。
- Continuous Batching:动态批处理机制,让新请求随时加入正在执行的 batch,提高 GPU 利用率 并 降低请求延迟。
- KV Cache 淘汰策略:显存不足时先换到 CPU 内存,内存不足时再淘汰,必要时重新计算。
通过这些技术,vLLM 能在高并发、长上下文场景下,实现 显存高效利用、高吞吐量 和 低延迟。vLLM 成为生产环境的高性能推理框架。
参考资料:
https://arxiv.org/pdf/2309.06180
如何系统学习掌握AI大模型?
AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。
学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。
这里给大家精心整理了一份
全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!

1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。

2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)

3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。

4. 大模型行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

5. 大模型项目实战
学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以
微信扫描下方优快云官方认证二维码,免费领取【保证100%免费】

608

被折叠的 条评论
为什么被折叠?



