vLLM:大模型推理的加速引擎,PagedAttention 颠覆显存管理
📖 简介
📝 详细介绍
vLLM:PagedAttention 重新定义大模型推理显存效率
大模型推理时,显存碎片和 KV cache 浪费是低吞吐量的根本原因。vLLM 用 PagedAttention 解决了这个问题,让单卡也能跑高并发推理,吞吐量比传统方案提升 2-4 倍。如果你正被显存限制推理成本,这值得你花十分钟了解。
| 指标 | 数据 |
|---|---|
| Stars | 41k+ |
| 语言 | Python / C++ / CUDA |
| 协议 | Apache 2.0 |
| 最近更新 | 2025-04-10(持续活跃) |
项目背景
vLLM 由加州大学伯克利分校的 Sky Computing Lab(团队核心成员包括罗志强等)开发,最初为了应对大模型推理中显存管理的痛点。传统推理框架(如 Hugging Face Transformers)在服务多个请求时,KV cache 会占用大量连续显存,且 memory fragmentation 导致有效利用率仅 20%-40%。vLLM 的 PagedAttention 技术借鉴操作系统虚拟内存分页思想,将 KV cache 按页管理,消除碎片,实现接近零浪费的显存利用。
核心痛点:连续显存分配导致大量碎片,高并发场景下即使显存未满,新的请求也可能因找不到连续块被拒绝。
核心功能解析
PagedAttention:显存管理的操作系统级革新
vLLM 的核心是 PagedAttention,将 KV cache 切分成固定大小的页(Page),每个页不是连续存储,而是通过页表映射。这彻底解决了碎片问题:大序列可以分散在多个非连续页中,新请求可以填入任何空闲页,显存利用率接近 100%。调度时仅需维护一个页表,代价极小。
# vLLM 启动时默认使用 PagedAttention
python -m vllm.entrypoints.openai.api_server
--model meta-llama/Llama-2-7b-chat-hf
--max-num-seqs 256 # 高并发下也能保持低显存
# 在 API 调用中,用户无需关心显存管理细节
curl http://localhost:8000/v1/completions
-H "Content-Type: application/json"
-d '{"model": "meta-llama/Llama-2-7b-chat-hf", "prompt": "Hello", "max_tokens": 100}'
Continuous Batching:动态批处理减少等待
传统批处理(静态批处理)需要等一个 batch 所有序列完成才能返回或开始新请求。Continuous Batching 允许在序列完成后立即退出 batch,空闲槽位立即被新请求填充,消除了尾部延迟。vLLM 的调度器会在每个推理步骤根据当前活跃序列动态重组计算图,实现流水线无空转。
# 启动时指定调度策略
python -m vllm.entrypoints.openai.api_server
--model TheBloke/Llama-2-13B-chat-GPTQ
--gpu-memory-utilization 0.9
--max-num-batched-tokens 4096 # 控制一次 batch 的 token 总数,避免 OOM
量化与格式原生支持
vLLM 内置对 AWQ、GPTQ、SqueezeLLM 等量化格式的原生加载,无需额外 converter。还支持 Flash Attention v2,在 Ampere 及以上架构上自动启用,进一步加速 attention 计算。
# 加载量化模型直接指定量化方法
python -m vllm.entrypoints.openai.api_server
--model TheBloke/Llama-2-7B-Chat-GPTQ
--quantization gptq
快速上手
# 安装(推荐 Python 3.10+,CUDA toolkit 11.8+)
pip install vllm
# 启动 OpenAI 兼容 API 服务(自动下载模型权重)
python -m vllm.entrypoints.openai.api_server
--model meta-llama/Llama-2-7b-chat-hf
--port 8000
# 测试请求
curl http://localhost:8000/v1/completions
-H "Content-Type: application/json"
-d '{"model": "meta-llama/Llama-2-7b-chat-hf", "prompt": "What is vLLM?", "max_tokens": 50}'
# 更多功能:使用 Ray 做分布式推理
python -m vllm.entrypoints.openai.api_server
--model meta-llama/Llama-2-70b-chat-hf
--tensor-parallel-size 4 # 4 张 GPU 并行
技术亮点
vLLM 最让我佩服的设计决策是将操作系统级的内存管理思想直接搬到 GPU 显存上。传统框架(如 Transformers)为每个序列预分配连续 block,遇到碎片宁可直接报 OOM。PagedAttention 的页表开销极小(每页 4KB 大小,页表条目仅 8 字节),在 Llama 2-7B 上,页表只占显存的 0.1% 不到。更妙的是,它支持 copy-on-write:多个序列共享相同前缀时,页表条目可指向同一物理页,只在写入不同位置时才拷贝,这在公共前缀(如 Chat 场景的系统提示)下节省大量显存。
此外,vLLM 的调度器做了一个很聪明的“前缀缓存”:它将输入 prompt 的 token 做哈希,相同前缀的 token 可以复用 KV cache 页,不必重新计算。在实际多用户场景中(如前缀都是“You are a helpful assistant”),推理速度几乎翻倍。
同类对比
| 项目 | 显存利用率 | 批处理策略 | 量化支持 | 分布式 | 框架依赖 |
|---|---|---|---|---|---|
| vLLM (PagedAttention) | 95%+ (消除碎片) | Continuous Batching | 原生 AWQ/GPTQ/SqueezeLLM | Ray TP/PP | 无(独立调度器) |
| Hugging Face TGI | 70-80% (连续分配) | 静态 + 动态拼接 | 需外部转换 | 自定义 | Transformers + HF Hub |
| NVIDIA TensorRT-LLM | ~90% (预调优) | In-flight batching | 专用引擎 | 内建多卡 | TensorRT |
| LightLLM | 类似 vLLM (页式) | Continuous Batching | 部分 | 简单TP | 自定义 |
简评:TGI 生态好但显存浪费严重;TensorRT-LLM 性能顶尖但编译配置复杂、不灵活;vLLM 在易用性和性能间做了最好的平衡。
总结
如果你是推理服务开发者、部署大模型应用的 SRE,或者只是想在自己卡上跑个高并发 Chatbot,vLLM 是当前最推荐的推理引擎:安装一行命令,性能让 TGI 望尘莫及,开源生态活跃,社区贡献者包括 NVIDIA 工程师。唯一需要留意的是,它目前主要优化 LLM 的 decoder-only 架构,对于 encoder-decoder 模型支持有限——但对主流 Llama、Mistral、Falcon 系列来说,它就是最佳选择。
AI 项目推荐
大模型- 标签
- #大模型推理 #LLM Serving #PagedAttention #CUDA
- 浏览
- 👁️ 3
- 发布日期
- 2026-07-30