vLLM 是当前最主流的开源 LLM 推理服务引擎,核心解决一个工程问题:在有限的 GPU 显存下,用更快的速度、更高的吞吐量跑大模型。传统推理方式在大并发下显存被 KV 缓存(模型生成时缓存历史 token 的键值向量)大量占用,批处理不灵活,吞吐上不去。vLLM 通过 PagedAttention(分页式 KV 缓存管理)和连续批处理(Continuous Batching)两大机制,把显存利用率提高到接近 90%,并把吞吐量提升到 Hugging Face Transformers 的数倍甚至数十倍。 业界大量生产环境(OpenAI 兼容 API 服务、私有化部署、RAG 应用)都在用它做模型服务。相比 LangChain 这类编排框架,vLLM 专注“把模型高效跑起来”;相比 TensorRT-LLM 这类编译优化方案,它上手更简单、模型生态更广。本篇按「安装 → 跑通服务 → 核心机制 → 生产运维」的顺序,让你读完能直接部署一个高吞吐推理服务。

岗位关联

对 AI 从业者而言,vLLM 是进入 LLM 推理基础设施领域的必修课——掌握它的调度、显存与部署机制,是 MLOps、推理平台工程师的核心竞争力。

目录
  1. 为什么需要 vLLM:传统推理吞吐瓶颈 → 高吞吐方案
  2. 安装与环境配置:3 步就绪
  3. 快速上手:10 分钟跑通 OpenAI 兼容服务
  4. 核心能力详解:4 大支柱
  5. 生产部署与监控:从上线到运维
  6. 版本迭代
  7. AI 应用场景
  8. 常见误区
  9. 面试题
工具类型
LLM 推理服务引擎(开源)
开发商
vLLM 社区(源自 UC Berkeley 等)
开源协议
Apache 2.0(可商用)
GitHub Stars
无
主要语言
Python / C++ / CUDA
当前版本
v0.8.6(2025-06)
安装方式
pip install vllm / Docker
下载地址
官方文档
上手难度
★★★☆☆(中等)
适合人群
推理平台工程师、MLOps、AI Infra 团队
同类工具
Hugging Face TGI、TensorRT-LLM、llama.cpp
托管服务
无

速览卡是工具类内容的固定首屏模块:30 秒判断「这工具是什么、能不能商用、适不适合我」。

为什么需要 vLLM:传统推理吞吐瓶颈 → 高吞吐方案

在 vLLM 出现前,主流推理方案有两种:直接调用 Hugging Face Transformers 的 generate,或使用简单的批处理服务。前者每个请求独占显存,KV 缓存按最大序列长度预分配,实际用不到的部分全部浪费,显存碎片化严重;后者要求同批次请求同时开始、同时结束,先完成的请求必须空等,GPU 大量时间在“空转”。结果是:单卡跑 7B 模型看似没问题,一上并发或长上下文,显存立刻爆炸,吞吐掉到每卡每秒几个 token。

vLLM 从操作系统内存管理获得启发,实现 PagedAttention:把 KV 缓存切成固定大小的“页”,按需分配,像虚拟内存一样消除碎片,显存利用率接近零浪费;配合底层调度器的连续批处理,请求一结束立刻腾出位置给新请求加入,GPU 从不空等。官方 README 披露,相比 Hugging Face Transformers,吞吐最高可提升 24 倍。

与同类工具的气质差异在于:vLLM 采取“调度器 + 运行时优化”路线,不做模型编译,因此对新模型(Hugging Face 上主流开源权重)开箱即用,不需要像 TensorRT-LLM 那样为每个模型构建 TensorRT 引擎;又比 llama.cpp 更面向服务化多用户场景。这也是它能成为社区默认推理框架的原因。

安装与环境配置:3 步就绪

步骤一 · 安装:vLLM 是 Python 包,最简方式直接 pip 安装。要求 Python 3.9–3.12、CUDA 11.8 或 12.1+(NVIDIA GPU 显存建议 16GB 以上跑 7B 级模型)。若机器没有预编译 wheel 匹配,pip 会尝试从源码编译,耗时较长,此时建议改用 Docker 镜像 vllm/vllm-openai,镜像内含完整预编译环境和模型服务入口。

步骤二 · 配置:默认从 Hugging Face 下载模型。若在离线环境,提前设置 HF_HOME 指向本地模型缓存目录,或用 HF_ENDPOINT=https://hf-mirror.com 指定下载镜像。

步骤三 · 验证:导入包并输出版本号,确认安装成功。

bash12 行
pip install vllm # 离线环境可选:指定模型缓存目录export HF_HOME=/data/models # 验证安装python -c "import vllm; print(vllm.__version__)" # Docker 方式(含预编译环境)docker run --gpus all -p 8000:8000 \  vllm/vllm-openai:latest \  --model Qwen/Qwen2.5-7B-Instruct

快速上手:10 分钟跑通 OpenAI 兼容服务

vLLM 最常用的方式是启动 OpenAI 兼容的 HTTP 服务。整套流程分三步:确认模型 ID → 启动服务 → 用 curl 或 OpenAI SDK 调用。服务启动时会先下载模型权重并做预热,7B 模型在 A100/H100 上通常 1–3 分钟即可就绪。

步骤一:在 Hugging Face 上确认目标模型的完整 ID(如 Qwen/Qwen2.5-7B-Instruct)。需要先登录 Hugging Face 账号并同意该模型的许可协议;也可使用本地已下载的模型路径。

步骤二:执行 vllm serve <model_id> 启动服务,默认监听 0.0.0.0:8000。访问官方 OpenAI 接口根路径 /v1 即可查看支持的路由。常用参数:--gpu-memory-utilization 控制显存占用上限,--max-model-len 限制最大上下文长度,--tensor-parallel-size 启用多卡张量并行。

步骤三:用 curl 发起 Chat Completions 请求验证服务。

进阶技巧:客户端直接使用 openai Python SDK,把 base_url 指向 http://localhost:8000/v1 即可无缝接入,无需改业务代码。

如果只做离线批量推理(如离线清洗数据、批量评测),vLLM 也提供 LLM 类 Python API,适合在脚本或 Notebook 中直接调用。示例代码如下:

bash9 行
vllm serve Qwen/Qwen2.5-7B-Instruct \  --gpu-memory-utilization 0.9 \  --max-model-len 8192 # 另开终端验证curl http://localhost:8000/v1/chat/completions \  -H "Content-Type: application/json" \  -d '{"model":"Qwen/Qwen2.5-7B-Instruct",       "messages":[{"role":"user","content":"介绍北京"}]}'
python7 行
from vllm import LLM, SamplingParams llm = LLM(model="Qwen/Qwen2.5-7B-Instruct")params = SamplingParams(temperature=0.7, max_tokens=256)outputs = llm.generate(["介绍上海", "写一首诗"], params)for output in outputs:    print(output.outputs[0].text)

核心能力详解:4 大支柱

支柱一 · PagedAttention 分页 KV 缓存管理。生成式 LLM 每生成一个 token 都要读取此前所有 token 对应的 KV 缓存(即历史键值向量),传统实现按最大长度预分配连续显存,造成巨大浪费。PagedAttention 将缓存切分为固定大小的内存块(block),按需分配、按块索引,显存碎片率趋近于零。实测显存占用可降低 50% 以上,是 vLLM 吞吐优势的根基。

支柱二 · 连续批处理调度。vLLM 调度器以迭代(iteration)为粒度动态决定每步计算哪些请求:新请求可随时加入、完成的请求立即退出,同一步内不同请求可处于不同生成阶段。传统批处理需要整个 batch 同步开始和结束,而连续批处理让 GPU 始终在处理“有效生成”,吞吐成倍提升。

支柱三 · 执行层优化。包括 CUDA Graph 捕获(将算子启动开销从毫秒级降到微秒级,减少内核启动 overhead)、算子融合、FP8/INT8/INT4/AWQ/GPTQ 等量化支持、投机解码(Speculative Decoding,用小模型草稿+大模型验证的方式加速生成)。这些优化叠加,使单卡 token 吞吐达到每秒数千甚至上万。

支柱四 · OpenAI 兼容服务与多卡扩展。vllm serve 提供 OpenAI 原生接口(/v1/chat/completions、/v1/completions、/v1/embeddings),支持流式输出,兼容 LangChain、LlamaIndex 等生态。多卡部署用 --tensor-parallel-size N 把单模型切分到多卡并行推理;超过单机时可用 --pipeline-parallel-size 做流水线并行。vLLM 还支持 LoRA 多适配器动态加载、多模态模型(如 Qwen2-VL、Llama 3.2 Vision)和结构化输出,可直接接入 RAG、Agent 等上层应用。

生产部署与监控:从上线到运维

部署方式一 · Docker 单机部署:生产环境最推荐用官方 vllm/vllm-openai 镜像,避免源码编译与依赖冲突。注意挂载模型缓存目录以复用已下载权重,并设置 --ipc=host 避免多进程共享内存不足。启动后可用 systemd 或 supervisor 守护进程。

部署方式二 · Kubernetes 集群部署:生产环境通常用 K8s 编排,将 vLLM 封装为 Deployment + Service。关键点是给 Pod 声明 nvidia.com/gpu 资源、设置 --pipeline-parallel-size 跨节点时配合 hostNetwork 或 Headless Service 满足 NCCL 通信需求。前端加 Gateway/Ingress 做负载均衡与鉴权。这种方式适合需要弹性扩缩容的多副本场景。

可观测性:vLLM 内置 Prometheus 指标端点 /metrics,提供 vllm:num_requests_running(正在生成请求数)、vllm:num_requests_waiting(排队请求数)、vllm:generation_tokens_total(生成 token 总数)、vllm:time_to_first_token_seconds(首 token 时延)等关键指标。建议配合 Grafana 监控:首 token 时延(TTFT)上涨说明排队严重,应扩容副本或降低 --max-num-seqs 限制;GPU 利用率长期低于 80% 说明并发不足或模型在等 I/O。生产环境同时开启 --structured-logs(结构化 JSON 日志)和 --otlp-traces-endpoint(OpenTelemetry 链路追踪)以排查单请求瓶颈。

<p class="para-label">避坑清单:</p>

<ul class="dash-list"><li>坑 1:--gpu-memory-utilization 设太高(如 0.98)导致显存 OOM:它只预留了少量不参与缓存池的显存,上下文一长容易触发 OOM,生产建议 0.85–0.92。</li><li>坑 2:max-model-len 改大导致并发骤降:KV 缓存按 max-model-len 预留页数,设得越大单请求占显存越多、并发越低,应小于模型训练上下文长度且匹配真实业务。</li><li>坑 3:用 pip 在无预编译 wheel 的环境安装,源码编译要 20 分钟以上且易失败:优先用官方 Docker 镜像,或加装对应 CUDA 工具链再安装。</li><li>坑 4:多卡 NCCL 通信失败:容器内需 --ipc=host 并确保 GPU 拓扑可见;跨机时配置 NCCL_SOCKET_IFNAME 指向业务网卡。</li><li>坑 5:量化与硬件不匹配:FP8 需 Ada/Hopper 架构(如 L4、H100),旧卡跑 FP8 会回退到慢路径,部署前先确认文档里的硬件支持矩阵。</li></ul>

bash7 行
docker run -d --name vllm-serve --gpus all \  -v /data/models:/root/.cache/huggingface \  -p 8000:8000 --ipc=host \  vllm/vllm-openai:latest \  --model Qwen/Qwen2.5-32B-Instruct \  --tensor-parallel-size 2 \  --gpu-memory-utilization 0.9
维度vLLMHugging Face TGITensorRT-LLMllama.cpp
定位LLM 推理服务引擎面向生产的高吞吐推理服务器NVIDIA 专属编译优化推理框架本地轻量推理(C++ 实现)
编排范式连续批处理 + 分页 KV 调度连续批处理 + 预分配缓存编译期图优化 + 批处理单进程单模型,无服务端调度
类型约束需内核支持模型算子,主流开源模型基本兼容依赖 HF 生态与模型转换需为每个模型构建 TensorRT 引擎需 GGUF 格式量化模型
学习曲线中:Python 上手快,调度参数需理解中低:以服务为主,配置简单高:涉及引擎构建、图优化低:命令行运行,适合本地
生态集成OpenAI 兼容 API、Ray、LangChain、多模态OpenAI 兼容 API、HF Hub 集成Triton 推理服务器集成绑定绑定各类本地应用与远端 API
生产部署Docker/K8s,Prometheus 指标完善Docker/K8s,HF 官方运维成熟强依赖 NVIDIA 生态与 Triton多见于边缘/本地点对点场景
LicenseApache 2.0Apache 2.0Apache 2.0MIT
适合谁需要快速部署高吞吐服务的团队已深度使用 HF 生态的团队追求极致性能且专攻 NVIDIA本地调试、离线单机用户

选型建议:默认选 vLLM——模型覆盖广、API 兼容 OpenAI、运维指标完善,适合绝大多数生产场景。已在 HF 生态且要求最小化运维可选择 TGI;追求单卡极限性能且环境固定在 NVIDIA 选 TensorRT-LLM;个人电脑或离线小批量场景用 llama.cpp 最省事。

版本迭代

vLLM 从 2023 年论文项目起步,v0.6 起完成引擎核心重构,v0.7 引入异步 EngineCore 与多步调度,v0.8 在调度、量化与多模态方面深度打磨,版本节奏约每月一个正式版(截至训练数据,后续可能有更新版本)。

版本时间变化提升
v0.6.02024-10引擎核心重构分离 LLMEngine 与 AsyncLLM,服务端模块化,为新增调度能力打基础
v0.6.62024-12稳定版维护完善 FP8、LoRA 与量化支持,修复多模态模型兼容问题
v0.7.02025-01异步 EngineCore 与多步调度调度吞吐提升,引入 vLLM 2 预览路线,降低排队时延
v0.8.02025-03大版本重构重写 PagedAttention 内存管理,量化框架整合,嵌入与多模态能力增强
v0.8.42025-05稳定性迭代修复显存泄漏与边缘模型加载问题,结构化输出稳定性提升
v0.8.62025-06最新正式版更多新模型支持、量化路径改进,多项 bug 修复,作为当前推荐生产版本
结论

vLLM 的迭代主线是“把调度做快、把显存做省、把兼容做广”。官方 README 披露相比 Hugging Face Transformers 吞吐最高提升 24 倍(具体数值随模型/硬件变化,建议以自建 bench 为准)。选型建议:新项目直接使用 v0.8.x 分支,生产环境跟随 v0.8.4+ 即可;不要长期停留在 v0.5 及更早版本,其调度器与 API 差异较大。

AI 应用场景

场景 1:RAG 应用的高并发服务端推理

解决的问题:RAG 应用需要同时服务大量用户请求,每个请求都要先检索再生成。传统推理在大并发下因 KV 缓存碎片和批处理不灵活,首 token 时延与吞吐双双恶化。vLLM 的连续批处理让检索类短请求迅速完成并让出位置,PagedAttention 让 32k 长上下文检索结果也能在单卡跑动。

具体案例:某企业内部知识库问答系统,将后端推理从 Transformers 改为 vLLM 服务后,同规格 2 卡 A100 下并发请求数从 8 提升至 60+,约 7 倍吞吐提升,P95 首 token 时延稳定在 1 秒内。

场景 2:Agent 与批处理任务的大规模并行

解决的问题:AI Agent(如代码审查、自动化测试生成)会发起大量独立的小请求,离线评测/数据清洗更是需要一次性跑成千上万个 prompt。vLLM 支持 LLM.generate 批量推理与服务的流式输出,GPU 利用率在长尾请求下依然饱满;多卡张量并行进一步支撑 70B+ 大模型在 Agent 任务中的实时响应。

具体案例:某代码助手团队用 vLLM 批量跑 1 万条代码补全测试,8 卡 A100 上约 25 分钟完成,比之前逐条调用 HF 的串行方式快约 20 倍。

场景 3:私有化部署与 LLM 成本压缩

解决的问题:生成式 AI 的边际成本主要是 GPU 推理成本。vLLM 通过量化(FP8/INT4)与高吞吐并发,让同样的推理吞吐用更少的卡完成,是私有化部署的首选落点。

具体案例:某金融公司私有化部署 7B 对话模型,从 naive 推理切到 vLLM + FP8 后,峰值吞吐提高约 6 倍,GPU 采购量从 12 卡降到 4 卡,推理成本下降约 60%。

常见误区

误区把模型放进 vLLM 就能自动获得 24 倍吞吐,模型不兼容时会提示报错。

正解24 倍是在官方支持的模型、连续批处理满载场景下的对比值,且需要模型算子被 vLLM 内核支持。若模型使用新颖算子或自定义前向结构,vLLM 可能回退到较慢的实现,吞吐不升反降。使用前应在官方「支持的模型列表」中确认目标模型,并做最小吞吐基准测试。

为何常见:官方 README 宣传的是“最高 24 倍”,用户容易把上限当成常态,且不了解其内核依赖。

误区把 `--gpu-memory-utilization` 设成 0.99 就能跑更大模型、更多并发。

正解该参数是 KV 缓存池可占显存的上限,设太高会导致权重加载后剩余可分配空间不足,长上下文时直接 OOM 崩溃。生产建议 0.85–0.92,同时配合 --max-model-len 控制单请求上限,预留系统与 CUDA context 开销。

为何常见:从直觉上“用满显存 = 不浪费”,但忽略了页表、CUDA context、权重之外的运行时开销。

误区所有 OpenAI SDK 参数在 vLLM 上都生效,换 `base_url` 就能无损迁移。

正解vLLM 实现了 OpenAI Chat/Completions/Embeddings 路由与主要参数,但部分参数不支持或忽略(如 logprobs 的详细选项、user 字段在 vllm 中的处理、Chat Templating 差异等)。迁移前应做参数对齐测试,重点检查 max_tokens、stop、stream、temperature 行为。

为何常见:语言模型服务都宣称“OpenAI 兼容”,用户默认这是完整等价,实际上兼容通常只覆盖主流通用参数。

误区用 INT4/FP8 量化一定能提速且模型性能不变。

正解量化能降低显存占用和带宽压力,但会引入精度损失,在代码生成、数学推理等对 logit 敏感的任务上效果退化明显;且 INT4(如 AWQ/GPTQ)依赖权重反量化解码,实际加速幅度因算子而异。生产上线前必须用评测集对比量化前后效果,必要时采用 FP8 这类损失较小的方案。

为何常见:量化省显存、提速度的效果直观,量化误差在短文本示例上难以感知,容易被忽视。

误区vLLM 是 CUDA 专属框架,没 A100/H100 就不能用。

正解vLLM 已支持 AMD ROCm、CPU(llama.cpp 之外的服务化 CPU 路径)、Intel 系列及 Google TPU 的扩展构建,但需要按官方文档编译对应后端,性能与兼容性弱于 CUDA 路径。判断能否使用,看官方文档中的「安装 — 平台支持」表,而不是只听 NVIDIA 生态的案例。

为何常见:vLLM 的绝大多数教程和 benchmark 基于 NVIDIA GPU,信息环境形成了“只有 NVIDIA”的印象。

面试题

Q1. vLLM 中 PagedAttention 主要解决什么问题?

单选题 · easy

  • A.KV 缓存的显存碎片化← 正确答案
  • B.模型参数过多的问题
  • C.训练数据不平衡的问题
  • D.网络带宽不足的问题

答案:A。PagedAttention 像虚拟内存一样把 KV 缓存切成固定大小的块按需分配,解决预分配连续缓存造成的碎片与浪费。它与模型参数量、训练数据无关,也不涉及网络传输。

Q2. 启动 vLLM OpenAI 兼容服务使用哪个命令?

单选题 · easy

  • A.vllm serve← 正确答案
  • B.vllm start
  • C.python run
  • D.serve gpt

答案:A。vllm serve <model_id> 是启动 OpenAI 兼容 HTTP 服务的官方入口,默认监听 0.0.0.0:8000 并提供 /v1 路由。其余命令均不是 vLLM 提供或常用的服务启动方式。

Q3. vLLM 采用的开源协议是?

单选题 · easy

  • A.Apache 2.0← 正确答案
  • B.MIT
  • C.GPL-3.0
  • D.商业专有

答案:A。vLLM 使用 Apache 2.0 协议,允许商用、修改和再分发,附带专利授权条款,对生产使用限制最少。

Q4. “连续批处理”的核心行为是?

单选题 · mid

  • A.整个批次必须同时开始、同时结束
  • B.每步动态调度:请求完成立刻让位,新请求随时加入← 正确答案
  • C.按请求到达时间严格串行处理
  • D.将模型切分为多段流水执行

答案:B。连续批处理以迭代为粒度,让不同请求在同一 batch 中处于不同生成阶段,完成者让位、新请求补入,避免 GPU 空等。A 是传统批处理,C 是串行,D 是流水线并行。

Q5. --gpu-memory-utilization 0.9 的含义是?

单选题 · mid

  • A.单请求最多使用 90% 显存
  • B.KV 缓存池最多占用总显存的 90%← 正确答案
  • C.模型权重会被压缩到原体积的 90%
  • D.GPU 计算利用率目标为 90%

答案:B。该参数控制 vLLM 缓存池可使用的显存上限,而不是单请求或利用率目标。设太高导致无余量处理长上下文而 OOM,生产建议 0.85–0.92。

Q6. vLLM 服务默认监听端口是?

单选题 · mid

  • A.8000← 正确答案
  • B.8080
  • C.9000
  • D.5000

答案:A。vllm serve 默认 host 为 0.0.0.0、端口为 8000,可用 --host 与 --port 修改。其余端口是常见替代默认值,但不是 vLLM 的默认端口。

Q7. 模型超出一张卡显存时,vLLM 推荐的第一种切分方式是?

单选题 · hard

  • A.tensor parallel← 正确答案
  • B.切分模型层数为两个半模型
  • C.将权重换入 CPU 内存
  • D.按请求轮询多张卡

答案:A。tensor parallel(张量并行)把单个算子的矩阵切分到多卡并行计算,是 vLLM 多卡部署的标准方式(--tensor-parallel-size),通信走 NCCL。C 会导致显存换入换出严重掉速,D 是负载均衡而非单模型显存扩展。

Q8. 显存不足时 vLLM 默认执行 preempt(抢占)的方式是?

单选题 · extreme

  • A.重新计算被抢占请求的 KV 缓存← 正确答案
  • B.将被抢占请求的 KV 缓存交换到 CPU
  • C.立即杀死最早到达的请求
  • D.暂停所有新请求直到显存释放

答案:A。vLLM 的调度器在显存不足时默认先做 recomputation(丢弃并重算缓存),因为它无需管理 CPU 交换通道、实现简单且多数场景更快。swap 到 CPU 是补充策略而非默认首选。

Q9. 以下哪些是 vLLM 提升吞吐的手段?

多选题 · mid

  • A.连续批处理← 正确答案
  • B.PagedAttention 显存管理← 正确答案
  • C.CUDA Graph 捕获← 正确答案
  • D.自动为模型增加层数

答案:ABC。连续批处理消除 GPU 空等,PagedAttention 提高显存利用率从而增大可调度请求数,CUDA Graph 降低算子启动开销。D 改变模型结构、不提升吞吐且会损害效果。

Q10. 生产环境观测 vLLM 服务的正确方式包括?

多选题 · hard

  • A.采集 /metrics 端点的 Prometheus 指标← 正确答案
  • B.开启 --structured-logs 输出结构化 JSON 日志← 正确答案
  • C.配置 --otlp-traces-endpoint 上报链路追踪← 正确答案
  • D.直接读取 GPU 寄存器自行分析

答案:ABC。/metrics 提供请求数、tokens、TTFT 等指标;结构化日志便于日志系统检索;OTLP 追踪可定位单请求瓶颈。D 方式成本高、信息零散,不是常规观测手段。