中文资讯 掘金 AI Wed, 28 Oct 2026 正文 thin 2 words

vLLM是什么:PagedAttention 让大模型推理快 2-4 倍,还能撑起更长思维链

英文标题:vLLM是什么:PagedAttention 让大模型推理快 2-4 倍,还能撑起更长思维链

vLLM 并不改变模型本身的逻辑能力,而是通过大幅降低显存占用与计算开销,降低了模型“多想几遍”的推理成本。其核心创新 PagedAttention 借鉴操作系统分页思想,将传统 KV Cache 高达 60%-80% 的显存浪费率直接压缩至 4% 以下,在保持端到端延迟基本不变的前提下,使系统吞吐量提升 2-4 倍。这一特性显著降低了长思维链(Chain-of-Thought)和多轮 Agent 调用的部署门槛,已成为大模型工业化高并发落地的核心基建。
打开原文相关 3 · 机会 0

中文

vLLM 是什么:PagedAttention 让大模型推理快 2-4 倍,还能撑起更长思维链

在大语言模型(LLM)从“尝鲜试用”迈向“规模化落地”的过程中,推理成本与并发吞吐成为摆在所有工程师面前最大的瓶颈。随着模型规模扩大以及长思维链(Chain-of-Thought, CoT)、多轮 Agent 迭代模式的普及,显卡显存往往在算力耗尽前就已见顶。

vLLM(由 UC Berkeley 团队主导开发的开源 LLM 推理与服务引擎)的诞生,正是为了解决这一痛点。它不改变模型权重,也不改变输出能力,而是通过自研的 PagedAttention 机制,重构了显存中注意力机制键值缓存(KV Cache)的管理方式,将显存浪费从 60%-80% 降至 4% 以下,并在相同延迟下实现了 2-4 倍的吞吐提升。


一、 核心瓶颈:为什么大模型推理显存总是“爆”?

大模型在生成 Token 时是自回归(Auto-regressive)的,每次生成下一个词都需要前文所有词的信息。为了避免重复计算前序 Token 的自注意力,系统会在显存中保留每个请求对应的 KV Cache(Key-Value Cache)。

但在传统推理引擎中,KV Cache 的管理面临严重问题:

  1. 预分配浪费(Over-allocation):系统必须按照设定的最大生成长度(如 2048、4096 甚至更长)预先在显卡上连续分配空间,但实际上很多请求可能只生成几十个 Token 就结束了。
  2. 外部碎片(External Fragmentation):不同的请求长度各异,显存频繁申请与释放,产生大量无法被有效利用的连续显存碎片。
  3. 共享困境(Sharing Inefficiency):在并行采样(Parallel Sampling,如生成多条候选答案)、束搜索(Beam Search)或多轮 Agent 交互中,相同的 Prompt 无法低成本共享 KV Cache。

统计数据显示,在传统的推理服务架构中,KV Cache 中真正存储有效 Token 数据的显存仅占 20%-40%,其余 60%-80% 的显存完全处于被预留、碎片化和浪费的状态。


二、 破局方案:PagedAttention 的虚拟内存分页机制

操作系统在几十年前就通过**虚拟内存(Virtual Memory)与分页(Paging)**技术解决了内存碎片问题——物理内存不必连续,只需通过页表建立映射即可。

vLLM 的核心突破就在于把这一经典思想引入了 GPU 显存管理,提出了 PagedAttention:

  • 逻辑连续,物理离散:将每个请求的 KV Cache 切分为固定大小的“块(Blocks)”(例如每个块容纳 16 个 Token)。在逻辑上它们按生成顺序连续,但在物理显存中可以散布在任何可用位置。
  • 按需分配,零碎片:只在生成新 Token 填满当前块时,才分配下一个物理块。这彻底消除了预分配带来的浪费,将显存浪费率压至 4% 以下。
  • 显存级 Copy-on-Write:在长思维链的多分支采样或并行推理时,不同路径可以共享相同的 Prompt 块;只有当各自生成不同 Token 时才写入新的独立块,使并行采样成本降低数倍。
对比维度 传统推理引擎 vLLM (PagedAttention)
显存分配方式 预先分配连续大块显存 按需分页动态分配(块级别)
KV Cache 显存浪费率 60% - 80% < 4%
批处理吞吐(Throughput) 基线 提升 2 - 4 倍
多路径/分支显存共享 困难(需复制副本) 原生支持(类似 Copy-on-Write)

三、 为什么它能撑起更长的思维链(CoT)与 Agent?

长思维链(Chain-of-Thought)本质上是在输出最终答案前,让模型产生数百乃至上千个推理步骤。对于 Agent 来说,更是伴随大量的环境观察、历史回放和多轮自省。

  • 显存容量决定并发上限:过去,单个长思维链请求可能占满大量预留显存,导致并发数急剧下降。
  • 降低“多想几遍”的单位成本:PagedAttention 通过极高的显存利用率,允许 GPU 在显存受限的前提下容纳数十甚至上百个并发的长思维链,从而让应用层得以大批量运行复杂的自省与重试逻辑。

四、 快速上手:可运行代码示例

vLLM 提供了极简的 Python SDK,同时原生兼容 OpenAI API 规范。

1. 离线推理示例(Offline Batched Inference)

python from vllm import LLM, SamplingParams

准备测试 Prompt(包括需要模型进行多步推导的问题)

prompts = [ "请用逻辑严密的步骤解释什么是量子纠缠:", "如果一艘飞船以 0.8 倍光速飞行,它与地球的时钟流速有何区别?请逐步推理:" ]

设置采样超参数

sampling_params = SamplingParams(temperature=0.7, top_p=0.95, max_tokens=512)

初始化 vLLM 引擎(自动启用 PagedAttention,并自动分配最优显存块)

llm = LLM(model="Qwen/Qwen2.5-7B-Instruct", trust_remote_code=True)

执行批量推理

outputs = llm.generate(prompts, sampling_params)

打印生成结果

for output in outputs: prompt = output.prompt generated_text = output.outputs[0].text print(f"\n[Prompt]: {prompt}") print(f"[Generated]:\n{generated_text}")

2. 启动 OpenAI 兼容的 API 服务

只需一行命令即可启动与 OpenAI 接口格式完全兼容的 HTTP 服务:

bash python3 -m vllm.entrypoints.openai.api_server
--model Qwen/Qwen2.5-7B-Instruct
--port 8000
--gpu-memory-utilization 0.9

随后即可直接用官方 openai Python 客户端调用:

python from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="empty") response = client.chat.completions.create( model="Qwen/Qwen2.5-7B-Instruct", messages=[{"role": "user", "content": "你好,请自我介绍"}] ) print(response.choices[0].message.content)


五、 关于 vLLM 的三个常见误解

虽然 vLLM 性能出色,但在工程实践中仍存在若干认知偏差:

误解一:vLLM 能让单个请求的首字延迟(TTFT)大幅缩短?

错。PagedAttention 主要优化的是 KV Cache 的管理开销和并发批处理(Batching)能力。对于并发数为 1 的单独请求,首字延迟(Time to First Token)和逐字解码速度并不会比经过良好优化的原生算子更快。它的绝对优势在于高并发吞吐(相同时间内服务的请求数量翻倍)。

误解二:vLLM 会提高模型的智商或生成质量?

错。vLLM 是一个系统级推理执行引擎,它不修改模型权重,也不改变自注意力机制的数学逻辑。在 FP16/BF16 模式下,其输出在数学上与原生 Transformer 是一致的。它改变的是“运行模型的效率”,而非模型本身的能力。

误解三:只要用了 vLLM,显存就绝对不会溢出(OOM)?

错。PagedAttention 极大地消除了显存碎片,但并没有改变物理显存的总量限制。当并发请求数量极大、且大量请求同时达到模型最大上下文极限(max_model_len)时,若物理显存耗尽,系统仍会触发块的交换(Block Swapping,将部分块置换到 CPU 内存)甚至请求抢占(Preemption),此时需要合理配置 --gpu-memory-utilization 和并发调度参数。

English / 原文

Please wait...