vllm-project/vllm · 上手攻略
- 仓库:vllm-project/vllm
- 链接:https://github.com/vllm-project/vllm
- 分类:llm-infra
- 作者:Tom
- 更新:2026-07-07
这是什么
vLLM 是一个高吞吐量、内存高效的 LLM 推理与服务引擎,最初由 UC Berkeley Sky Computing Lab 开发,现已成长为全球最活跃的开源 AI 基础设施项目之一,拥有来自 2000+ 贡献者的社区支持。
核心突破是 PagedAttention 技术——受操作系统虚拟内存分页启发,将 KV Cache 切分成小块动态管理,显著减少显存碎片,提升 GPU 利用率。在 2023 年 SOSP 会议上发表论文《Efficient Memory Management for Large Language Model Serving with PagedAttention》。
支持场景:对话服务、批量推理、分布式部署、RLHF 训练、speculative decoding、多模态模型。
解决什么问题
传统 LLM 推理引擎(如 naive HF text-generation)在高并发、长上下文、多用户场景下存在三大痛点:
- 显存碎片化:KV Cache 连续分配,长序列显存浪费严重
- 吞吐量低:缺乏 continuous batching,请求级批处理效率差
- 部署复杂:缺少 OpenAI 兼容 API,生产环境集成成本高
vLLM 通过 PagedAttention + Continuous Batching + Prefix Caching 组合拳,在不牺牲精度的情况下实现 3-5 倍吞吐量提升(官方 benchmark vs HuggingFace TGI)。
快速安装
推荐方式(uv)
uv pip install vllm
GPU 环境要求
- NVIDIA GPU(CUDA 11.8 或 12.1+)
- 需要足够 VRAM:7B 模型约需 14GB,70B 模型约需 140GB(fp16)
- ROCm(AMD GPU)支持:需要安装
hipBLASLt,见 官方文档
从源码编译(需要 CUDA toolkit)
git clone https://github.com/vllm-project/vllm.git
cd vllm
pip install -r requirements-build.txt
python setup.py install # 或 python setup.py bdist_wheel
⚠️ 注意:从源码编译需要 ~30 分钟和充足磁盘空间,建议仅开发场景使用。正式部署推荐 pip/uv 安装预编译轮。
验证安装
import vllm
print(vllm.__version__)
核心用法
1. Python API 离线推理(最常用)
from vllm import LLM, SamplingParams
# 初始化模型(自动下载 HuggingFace 权重)
llm = LLM(model="meta-llama/Llama-2-7b-chat-hf")
# 采样参数
sampling_params = SamplingParams(
temperature=0.8,
top_p=0.95,
max_tokens=256,
)
# 批量推理
outputs = llm.generate(["Hello, my name is", "The capital of France is"], sampling_params)
for output in outputs:
print(output.outputs[0].text)
2. OpenAI 兼容 API 服务器(生产部署)
启动服务:
vllm serve meta-llama/Llama-2-7b-chat-hf \
--host 0.0.0.0 \
--port 8000 \
--tensor-parallel-size 2
调用方式与 OpenAI API 完全兼容:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "meta-llama/Llama-2-7b-chat-hf",
"messages": [{"role": "user", "content": "Explain quantum computing"}]
}'
⚠️ 注意:2026 年 7 月最新版本已默认使用
--enforce-eager=False(torch compile 模式),启动时间更长但推理更快。如需快速冷启动,加--enforce-eager。
3. 多 GPU 分布式(Tensor Parallel)
# 4 GPU 并行
vllm serve meta-llama/Llama-2-70b-hf \
--tensor-parallel-size 4 \
--gpu-memory-utilization 0.9
Python API 方式:
llm = LLM(
model="meta-llama/Llama-2-70b-hf",
tensor_parallel_size=4,
gpu_memory_utilization=0.9,
)
4. 支持的量化格式
# FP8(推荐,精度损失小)
llm = LLM(model="meta-llama/Llama-2-70b-hf", quantization="fp8")
# INT8 / INT4(GPTQ)
llm = LLM(model=".../Llama-2-70b-gptq", quantization="gptq")
# AWQ
llm = LLM(model=".../Llama-2-70b-awq", quantization="awq")
# GGUF( llama.cpp 格式,需要指定目录)
llm = LLM(model="./models/llama-2-70b.Q4_K_M.gguf")
5. Streaming 输出
from vllm import LLM, SamplingParams
llm = LLM(model="meta-llama/Llama-2-7b-chat-hf")
sampling_params = SamplingParams(max_tokens=512, temperature=0.7)
# streaming 模式
for output in llm.generate(["Write a haiku about AI"], sampling_params, streaming=True):
print(output.outputs[0].text, end="", flush=True)
6. 多 LoRA 适配(生产高频场景)
llm = LLM(
model="meta-llama/Llama-2-7b-hf",
enable_lora=True,
max_lora_rank=16,
)
from vllm import LoraConfig
# 加载多个 LoRA 权重,动态切换
7. vLLM 与 LangChain 集成
from langchain_community.llms import VLLM
llm = VLLM(
model="meta-llama/Llama-2-7b-chat-hf",
trust_remote_code=True,
max_model_len=4096,
tensor_parallel_size=2,
)
典型适用场景
| 场景 | 推荐配置 |
|---|---|
| 对话机器人(单用户) | --gpu-memory-utilization 0.9,FP16 或 FP8 |
| 高并发 API 服务(100+ QPS) | Tensor Parallel + Continuous Batching + Prefix Caching |
| 长上下文摘要(128K+) | --max-model-len 131072,启用 chunked prefill |
| 多租户 SaaS(多模型) | vLLM Server + 多实例容器 + 负载均衡 |
| 本地评测(Benchmark) | --enforce-eager 跳过编译,加速冷启动 |
| 多模态(VLM) | vLLM 已支持 LLaVA、Qwen-VL、Pixtral 系列 |
坑与注意
- 冷启动慢:默认
torch.compile编译首个请求,首次调用等待 ~30-60 秒。使用--enforce-eager可跳过,但吞吐量下降。 - 显存估算不准:模型权重 + KV Cache 叠加,70B fp16 需 ~140GB VRAM,建议
gpu_memory_utilization从 0.85 开始调。 - 权重下载依赖 HuggingFace:需提前
huggingface-cli login或设置HF_TOKEN环境变量;私有模型同理。 - AMD GPU 支持有限:ROCm 5.7+ 支持但非所有内核都优化,复杂模型可能有未预期错误,建议生产用 NVIDIA。
- 多模态 encoder 不在 TP 范围:VLM 的 vision encoder 共享,Tensor Parallel 只切分 LLM 部分。
- speculative decoding 限制:需要额外的小模型(draft model),总显存增加,不是所有架构都支持。
- 版本兼容性:vLLM 更新频繁,不同版本对同一模型的权重格式可能有要求,升级前建议查 changelog。
与同类对比
| 特性 | vLLM | HuggingFace TGI | LMDeploy (InternLM) | Ollama |
|---|---|---|---|---|
| 显存效率 | ⭐⭐⭐⭐⭐(PagedAttention) | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 吞吐量 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| OpenAI API 兼容 | ✅ 原生 | ✅ | ✅ | ✅ |
| 多模态支持 | ✅(VLM) | ✅ | ✅(TurboMind) | ✅ |
| 多 GPU/TP | ✅ | ✅ | ✅ | ❌ |
| Speculative Decoding | ✅ | ✅ | ✅ | ❌ |
| 安装复杂度 | ⭐⭐⭐ 中等 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐(极简) |
| 生态活跃度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
一句话:如果你需要高并发、高显存效率的生产级推理,vLLM 是当前最优选择;如果只是本地随便跑个模型玩,Ollama 更省事。
一句话结论
vLLM 是当前开源 LLM 推理引擎的顶流选择——PagedAttention + Continuous Batching 带来的显存效率和吞吐量优势无可替代,是搭建生产级 AI 服务的首选基建。