是什么

vLLM 是一个快速、易用的开源大模型推理与服务库,口号是「让每个人都能简单、快速、低成本地部署大模型」。它最初由加州大学伯克利分校的 Sky Computing Lab 开发,如今已经成为最活跃的开源 AI 项目之一,由来自数十家高校和企业的社区共同维护,贡献者超过 2000 人。

如果说 Ollama 这类工具解决的是「在个人电脑上跑起来」,那么 vLLM 关注的是「在服务器上跑得又快又省」。当一个大模型要同时服务成百上千个请求时,显存怎么分配、请求怎么排队、GPU 怎么尽量不闲着,直接决定了成本和延迟。vLLM 在这些问题上做了大量优化,因此被广泛用作生产环境中的推理后端。

vLLM 的核心技术 PagedAttention 发表在系统领域顶级会议 SOSP 2023 上。项目支持 Hugging Face 上 200 多种模型架构,覆盖 Llama、Qwen、Gemma 等常见的稠密模型,DeepSeek-V3、Mixtral 等混合专家(MoE)模型,以及多模态、嵌入和奖励模型。

主要功能

高性能推理:

  • 业界领先的服务吞吐量;
  • 用 PagedAttention 高效管理注意力的 KV 缓存;
  • 对请求做连续批处理(continuous batching),并支持分块预填充(chunked prefill)和前缀缓存(prefix caching);
  • 支持 FP8、INT8、INT4、GPTQ/AWQ、GGUF 等多种量化格式;
  • 集成 FlashAttention、FlashInfer 等优化的注意力内核;
  • 支持 n-gram、EAGLE 等多种推测解码(speculative decoding)方法;
  • 支持预填充、解码、编码的分离式部署。

灵活易用:

  • 与 Hugging Face 模型无缝衔接;
  • 支持并行采样、束搜索等多种解码算法;
  • 支持张量、流水线、数据、专家和上下文并行,用于分布式推理;
  • 流式输出、结构化输出、工具调用和推理内容解析;
  • 提供兼容 OpenAI 的 API 服务,并支持 Anthropic Messages API 和 gRPC;
  • 高效的多 LoRA 支持。

广泛的硬件支持: NVIDIA GPU、AMD GPU,以及 x86、ARM、PowerPC CPU;通过硬件插件还支持 Google TPU、Intel Gaudi、华为昇腾、Apple Silicon 等。

技术原理

PagedAttention。 大模型生成文本时,需要为每个请求保存之前所有 token 的注意力键值(KV 缓存)。传统做法通常按最大长度为每个请求预留一整块连续显存,但请求的实际长度事先并不知道,结果是大量显存被预留却用不上,碎片也很多。

PagedAttention 借鉴了操作系统的虚拟内存分页思想:把 KV 缓存切分成固定大小的「块」,按需分配,块在物理显存中不必连续,通过一张映射表记录逻辑位置和物理位置的对应关系。这样显存浪费大幅减少,同一块显存可以容纳更多并发请求;对于共享相同前缀的请求,相同的块还可以共享,进一步节省空间。

连续批处理。 传统的静态批处理要等一批请求全部生成完毕才能处理下一批,先结束的请求只能空等。连续批处理则以每一步生成为粒度调度:某个请求一结束就立即让出位置,新请求随时加入,让 GPU 始终保持较高的利用率。

在这两项技术之上,vLLM 又叠加了前缀缓存、分块预填充、CUDA Graph、torch.compile 等优化,共同构成它的性能优势。

分布式与并行。 当模型大到一张 GPU 放不下,或者单卡吞吐不够时,vLLM 提供多种并行方式:张量并行把每一层的矩阵运算拆到多张卡上;流水线并行把不同的层分配给不同的卡;数据并行用多份模型副本分担请求;专家并行则针对 MoE 模型,把不同的专家放到不同设备上;上下文并行用于处理超长输入。这些方式可以组合使用,并能借助 Ray、Kubernetes 等工具扩展到多机集群。

分离式部署。 大模型推理分为「预填充」(一次性处理整段输入)和「解码」(逐个生成输出)两个阶段,前者偏重算力、后者偏重显存带宽。vLLM 支持把预填充、解码乃至多模态编码拆分到不同的实例上运行,让每个阶段使用最合适的资源配置。

如何使用

安装。 官方推荐在 Linux 上使用 Python 3.10 到 3.13,并用 uv 管理环境。使用 NVIDIA GPU 时:

uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install vllm --torch-backend=auto

AMD、Intel、TPU、昇腾、Apple Silicon 等平台有各自的安装方式,详见官方安装指南。

离线批量推理:

from vllm import LLM, SamplingParams

prompts = ["你好,我的名字是", "法国的首都是"]
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)

llm = LLM(model="Qwen/Qwen2.5-1.5B-Instruct")
outputs = llm.generate(prompts, sampling_params)
for output in outputs:
    print(output.outputs[0].text)

在线服务: 一条命令启动兼容 OpenAI 的服务器,默认监听 http://localhost:8000:

vllm serve Qwen/Qwen2.5-1.5B-Instruct

之后就可以用 OpenAI 的接口格式调用,例如 curl http://localhost:8000/v1/models 查看模型列表。部署到公网时,可以通过 --api-key 参数或 VLLM_API_KEY 环境变量启用密钥校验。

vLLM 默认从 Hugging Face 下载模型;国内用户可以设置环境变量 VLLM_USE_MODELSCOPE=True 改为从魔搭社区下载。

项目地址

应用场景

  • 在线大模型服务:为聊天机器人、智能客服、API 平台提供高并发的推理后端。
  • 私有化部署:在企业自有 GPU 上部署开源模型,替代或补充商业 API。
  • 离线批量处理:大规模数据标注、文本生成、评测等任务。
  • 强化学习训练:作为 RLHF 等训练流程中的高效采样引擎。
  • 上层应用的后端:与 LangChain、LlamaIndex、Dify、Open WebUI 等框架和应用集成。

常见问题

vLLM 和 Ollama 有什么区别? Ollama 主要面向个人电脑,强调安装简单、开箱即用;vLLM 主要面向服务器和生产环境,强调高并发下的吞吐量与显存效率,并支持多卡、多机分布式推理。

没有 NVIDIA 显卡能用吗? 可以。vLLM 支持 AMD GPU 和多种 CPU,并通过插件支持 TPU、昇腾、Apple Silicon 等硬件,但不同平台的功能完整度和性能有差异。

生成参数为什么和我设置的不一样? vLLM 默认会读取模型仓库中的 generation_config.json,用模型作者推荐的采样参数覆盖部分默认值。如果不希望这样,启动服务时加上 --generation-config vllm 即可。

一个服务能同时加载多个模型吗? 按官方快速入门的说明,一个 vLLM 服务器同一时间托管一个模型。需要多个模型时,可以分别启动多个服务,或借助上层的路由与编排工具。