为什么选择 vLLM?
当你的 AI 应用从"能跑"进入"要服务很多用户"的阶段,推理性能就成了关键瓶颈。vLLM 是目前最快的开源 LLM 推理引擎,核心优势:
- PagedAttention:显存利用率提升 2-4 倍
- 连续批处理:吞吐量提升 24 倍
- OpenAI 兼容 API:无缝替换
- 支持所有主流模型:Llama、Qwen、Mistral、DeepSeek 等
相比 llama.cpp 适合单用户低延迟场景,vLLM 更适合多并发高吞吐的生产环境。
安装 vLLM
# 推荐使用 pip 安装
pip install vllm
# 需要 CUDA 11.8+ 和 Python 3.9+
# 如果需要 GPTQ/AWQ 量化支持
pip install vllm[quantization]
# 验证安装
python -c "import vllm; print(vllm.__version__)"
环境要求
| 组件 | 最低要求 | 推荐 |
|---|---|---|
| Python | 3.9 | 3.10+ |
| CUDA | 11.8 | 12.1+ |
| GPU | Compute 7.0+ | A100/H100 |
| PyTorch | 2.0 | 2.2+ |
快速启动 OpenAI 兼容 API
vLLM 可以启动一个完全兼容 OpenAI API 格式的服务器:
# 启动 API 服务器
python -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen2.5-72B-Instruct \
--host 0.0.0.0 \
--port 8000 \
--tensor-parallel-size 2 \
--max-model-len 32768 \
--gpu-memory-utilization 0.9
启动后,用 OpenAI SDK 直接调用:
from openai import OpenAI
client = OpenAI(
api_key="not-needed", # vLLM 不需要 key
base_url="http://localhost:8000/v1"
)
response = client.chat.completions.create(
model="Qwen/Qwen2.5-72B-Instruct",
messages=[
{"role": "user", "content": "解释一下量子计算的基本原理"}
],
max_tokens=1024,
temperature=0.7
)
print(response.choices[0].message.content)
核心优化技术
1. PagedAttention — 革命性的显存管理
传统推理引擎为每个请求预分配最大长度的显存,导致大量浪费。PagedAttention 借鉴操作系统虚拟内存的思想:
传统方式:
[请求1: 预分配4096 tokens] [空闲显存浪费]
[请求2: 预分配4096 tokens] [空闲显存浪费]
PagedAttention:
[请求1: 实际使用1024] [请求2: 实际使用512] [请求3: ...]
→ 按需分配,没有浪费
效果:相同显存可以同时服务 2-4 倍的并发请求。
2. 连续批处理(Continuous Batching)
传统批处理要等所有请求都完成才处理下一批。连续批处理在有请求完成时立即插入新请求:
传统批处理:
时间 → [Batch1: 3个请求,等最慢的完成] [Batch2: ...]
连续批处理:
时间 → [请求A完成] [新请求D插入] [请求B完成] [新请求E插入] ...
→ GPU 永远不空闲
效果:吞吐量提升 4-24 倍。
3. 量化推理
vLLM 支持多种量化方式,在精度和性能之间取得平衡:
# AWQ 量化(推荐,速度快精度高)
python -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen2.5-72B-Instruct-AWQ \
--quantization awq
# GPTQ 量化
python -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen2.5-72B-Instruct-GPTQ-Int4 \
--quantization gptq
| 量化方式 | 精度损失 | 速度提升 | 显存节省 |
|---|---|---|---|
| FP16 | 无 | 基准 | 0% |
| AWQ INT4 | 极小 | 1.5-2x | 50-60% |
| GPTQ INT4 | 小 | 1.3-1.8x | 50-60% |
| GPTQ INT8 | 极小 | 1.1-1.3x | 30-40% |
4. 张量并行(Tensor Parallelism)
多 GPU 部署大模型:
# 双卡并行
python -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen2.5-72B-Instruct \
--tensor-parallel-size 2
# 四卡并行(适合 70B+ 模型)
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-405B-Instruct \
--tensor-parallel-size 4
5. 关键参数调优
python -m vllm.entrypoints.openai.api_server \
--model your-model \
--gpu-memory-utilization 0.92 \ # GPU显存使用率(默认0.9)
--max-model-len 8192 \ # 最大上下文长度
--max-num-seqs 64 \ # 最大并发请求数
--max-num-batched-tokens 32768 \ # 每批最大token数
--swap-space 4 \ # CPU交换空间(GB)
--enforce-eager # 禁用CUDA Graph(调试用)
性能基准测试
测试环境
- GPU: 2x NVIDIA A100 80GB
- 模型: Qwen2.5-72B-Instruct-AWQ
- 输入: 512 tokens,输出: 256 tokens
测试结果
| 并发数 | 延迟 (TTFT) | 吞吐量 (tokens/s) | GPU利用率 |
|---|---|---|---|
| 1 | 0.15s | 42 | 25% |
| 8 | 0.28s | 285 | 68% |
| 32 | 0.65s | 890 | 92% |
| 64 | 1.2s | 1,250 | 96% |
| 128 | 2.8s | 1,480 | 98% |
结论:并发数 32-64 时性价比最高,GPU 利用率接近满载。
vLLM vs 其他推理框架
| 特性 | vLLM | llama.cpp | TGI | Ollama |
|---|---|---|---|---|
| 定位 | 高吞吐服务 | 轻量推理 | 生产推理 | 个人使用 |
| PagedAttention | ✅ | ❌ | ✅ | ❌ |
| 连续批处理 | ✅ | ❌ | ✅ | ❌ |
| OpenAI API | ✅ | ✅ | ❌ | ✅ |
| 量化支持 | AWQ/GPTQ | GGUF | GPTQ | GGUF |
| 多GPU | ✅ | ❌ | ✅ | ✅ |
| 易用性 | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 吞吐量 | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ |
选择建议: - 高并发生产环境 → vLLM - 个人本地使用 → Ollama - 边缘设备/低资源 → llama.cpp - HuggingFace 生态 → TGI
生产部署最佳实践
Docker 部署
FROM vllm/vllm-openai:latest
COPY models/ /models/
CMD ["--model", "/models/Qwen2.5-72B-Instruct-AWQ", \
"--host", "0.0.0.0", \
"--port", "8000", \
"--tensor-parallel-size", "2", \
"--gpu-memory-utilization", "0.92", \
"--max-model-len", "32768"]
Nginx 反向代理
upstream vllm {
server 127.0.0.1:8000;
}
server {
listen 443 ssl;
server_name api.your-domain.com;
location /v1/ {
proxy_pass http://vllm;
proxy_read_timeout 300s;
proxy_buffering off; # 流式输出需要关闭缓冲
}
}
监控指标
# vLLM 内置 Prometheus 指标
curl http://localhost:8000/metrics
# 关键指标:
# - vllm:num_requests_running: 正在处理的请求数
# - vllm:num_requests_waiting: 等待中的请求数
# - vllm:gpu_cache_usage_perc: GPU缓存使用率
# - vllm:avg_prompt_throughput_toks_per_s: 平均吞吐量
常见问题
Q: 显存不足怎么办?
- 使用量化模型(AWQ/GPTQ)
- 减小
--max-model-len - 降低
--gpu-memory-utilization - 使用张量并行多卡部署
Q: 延迟太高怎么办?
- 减少并发数或增加 GPU
- 使用更快的量化方式
- 减小 max_tokens
- 启用 CUDA Graph(默认开启)
Q: 如何监控 GPU 使用?
# 实时监控
watch -n 1 nvidia-smi
# 更详细的监控
pip install gpustat
gpustat -i 1
总结
vLLM 是当前最强大的开源 LLM 推理引擎,核心优势在于:
- PagedAttention:显存利用率最大化
- 连续批处理:GPU 永远不空闲
- OpenAI 兼容:零改动迁移
- 量化支持:精度与性能兼得
对于需要服务多用户的 AI 应用,vLLM 是不二之选。
需要帮你搭建高性能推理服务?联系我们 获取专业部署方案。