vLLM 模型服务
概述
vLLM 通过 PagedAttention 算法将 KV 缓存内存浪费减少 60-80%,并通过连续批处理(Continuous Batching)提供比传统方案高 2-24 倍的吞吐量,是高性能 LLM 推理引擎。Meta、Mistral AI、Cohere、IBM 等主要企业在生产环境中使用,并提供 OpenAI 兼容 API 便于现有应用迁移。
当前版本:vLLM v0.18+ / v0.19.x(2026-04 基准)
为什么 vLLM 成为标准
传统 LLM 服务引擎静态分配 KV 缓存内存导致 60-80% 内存浪费。静态批处理等待固定数 量请求积累后处理,GPU 空闲时间长。vLLM 消除了这两个根本瓶颈,在相同硬件上提供最高 24 倍的吞吐量。
vLLM 的核心创新:
- PagedAttention:受操作系统虚拟内存管理启发,以不连续块管理 KV 缓存
- Continuous Batching:消除批处理边界,在迭代(iteration)级别动态添加/移除请求
- OpenAI API 兼容:无需修改现有应用代码即可迁移
核心架构
PagedAttention 与 KV 缓存管理
由于 Transformer 架构的自回归特性,每个请求需要存储之前 Token 的键值对。此 KV 缓存随输入序列长度和并发用户数线性增长,传统方式按最大长度预分配内存,与实际使用量无关地浪费空间。
vLLM 的 PagedAttention 将 KV 缓存分成固定大小块以不连续方式存储。请求短则分配少量块,变长则按需分配更多块。通过块表维护逻辑顺序,消除内存碎片。
内存效率改善:
- 传统方式:最大序列长度 × 批大小预分配 → 60-80% 浪费
- PagedAttention:仅按实际使用量动态分配 → 消除浪费
Continuous Batching
静态批处理等待固定数量请求积累后处理。请求不规则到达时 GPU 仅部分利用,吞吐量下降。且批内先完成的请求也需等待整个批处理完成。
vLLM 的连续批处理完全消除批处理边界:
- 调度器在迭代级别运行
- 完成的请求立即移除,新请求动态添加
- GPU 始终以最大容量运行
- 平均延迟和吞吐量都得到改善
Speculative Decoding
推测性解码由小的 Draft 模型预测 Token,主模型并行验证,提供 2-3 倍速度提升。在可预测输出(代码生成、格式化响应)中特别有效。
from vllm import LLM
llm = LLM(
model="large-model",
speculative_model="small-draft-model",
num_speculative_tokens=5
)
V1 引擎架构
vLLM v0.6+ 版本引入 V1 引擎改进了以下功能:
- Chunked Prefill:在同一批中混合处理 Prefill(计算密集)和 Decode(内存密集)
- FP8 KV Cache:KV 缓存内存减少 2 倍支持更长上下文
- Improved Prefix Caching:通过共享公共前缀提升 400%+ 吞吐量
GPU 内存需求
部署模型前需要准确计算所需 GPU 内存。内存使用由以下组成:
所需 GPU 内存 = 模型权重 + 非 torch 内存 + PyTorch 激活峰值内存 + (每批 KV 缓存内存 × 批大小)
模型权重内存
由参数数和精度决定。
| 精度 | 每参数字节 | 70B 模型内存 |
|---|---|---|
| FP32 | 4 | 280GB |
| FP16/BF16 | 2 | 140GB |
| INT8 | 1 | 70GB |
| INT4 | 0.5 | 35GB |
计算示例:
- Llama-3.3-70B (FP16):70B × 2 bytes = 140GB(仅权重)
- KV 缓存(批大小 256、序列长度 8192):约 40GB
- 激活及其他开销:约 20GB
- 总计:约 200GB → 单个 H100 80GB 不可行,需要 TP=4(每 GPU 50GB)
70B 参数模型 INT4 量化后降至 35GB,可在单个 A100 80GB 或 H100 上连同 KV 缓存余量一起部署。
并行化策略
大规模模型无法放入单个 GPU 或需要利用多 GPU 提高吞吐量。vLLM 支持四种并行化策略。
张量并行(Tensor Parallelism, TP)
在模型每层内将参数分布到多个 GPU。单节点内部署大规模模型时最常用的策略。
适用时机:
- 模型无法放入单个 GPU
- 减少每 GPU 内存压力以腾出 KV 缓存空间
from vllm import LLM
# 将模型分布到 4 个 GPU
llm = LLM(
model="meta-llama/Llama-3.3-70B-Instruct",
tensor_parallel_size=4
)
约束:tensor_parallel_size 必须是模型注意力头数的约数。例如 70B 模型有 64 个注意力头,则 TP=2、4、8、16 等可行。
流水线并行(Pipeline Parallelism, PP)
将模型层顺序分布到多个 GPU。Token 通过流水线顺序流动。
适用时机:
- 张量并行已用到极限但需要更多 GPU
- 需要多节点部署
# 4 个 GPU 张量并行、2 个节点流水线并行
vllm serve meta-llama/Llama-3.3-70B-Instruct \
--tensor-parallel-size 4 \
--pipeline-parallel-size 2
并行化策略组合矩阵
| 场景 | 模型大小 | GPU 配置 | 并行策略 | TP × PP |
|---|---|---|---|---|
| 小型模型 | 7B-13B | 1×H100 80GB | None | 1 × 1 |
| 中型模型 | 32B-70B | 4×H100 80GB(单节点) | TP=4 | 4 × 1 |
| 大型模型 | 175B-405B | 8×H100(2 节点) | TP=4, PP=2 | 4 × 2 |
| 超大型模型 | 744B MoE | 16×H100(2 节点) | TP=8, PP=2 | 8 × 2 |
PP 多节点限制(V1 引擎,2026.04)
vLLM V1 引擎的 multiproc_executor 通过 NCCL TCPStore 进行多节点同步,大型模型(744B 级)加载时间超过 VLLM_ENGINE_READY_TIMEOUT_S(默认 600 秒)时可能出现死锁。
症状:Leader Pod 等待 Worker 响应超时 → Worker 出现 TCPStore Broken pipe 错误 → 循环重启
解决方案:
- 使用 SGLang(推荐):稳定支持多节点 PP
- 基于 Ray 的 vLLM:配置 Ray Cluster(运维复杂度增加)
- 单节点部署:使用 H200(141GB × 8)或 B200(192GB × 8)消除 PP
详细内容请参阅 自定义模型部署指南。
数据并行(Data Parallelism, DP)
将完整模型副本复制到多台服务器独立处理请求。结合 Kubernetes 的 HPA(Horizontal Pod Autoscaler)可弹性扩展。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: vllm-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: vllm-deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: Pods
pods:
metric:
name: vllm_num_requests_waiting
target:
type: AverageValue
averageValue: "10"
专家并行(Expert Parallelism, EP)
面向 MoE(Mixture-of-Experts)模型的特殊策略。Token 仅路由到相关"专家"减少不必要的计算。
vllm serve model-name --enable-expert-parallel
详细内容请参阅 MoE 模型服务。
支持硬件
vLLM v0.6+ 版本支持多种硬件加速器:
| 硬件 | 支持级别 | 主要用途 | AWS 实例类型 |
|---|---|---|---|
| NVIDIA H100 (80GB) | 完全支持 | 生产推理 | p5.48xlarge (H100×8) |
| NVIDIA H200 (141GB) | 完全支持 | 大型模型推理 | p5en.48xlarge (H200×8) |
| NVIDIA B200 (192GB) | 完全支持 | 超大型模型推理 | p6-b200.48xlarge (B200×8) |
| NVIDIA L4 (24GB) | 完全支持 | 性价比推理 | g6e.xlarge~12xlarge (L4×1~8) |
| AWS Trainium2 | 支持 | AWS 原生加速 | trn2.48xlarge (Trn2×16) |
| AMD MI300X | 支持 | 替代 GPU 基础设施 | - |
AWS EKS 推荐配置:
- 生产:p5.48xlarge (H100 × 8, 640GB HBM3) → TP=8 可部署 175B 模型
- 大型模型:p5en.48xlarge (H200 × 8, 1,128GB HBM3e) → TP=8 可部署 405B 模型
- 成本优化:g6e 实例 (L4) → 7B~13B 模型,利用 Spot 实例
Multi-LoRA 服务
vLLM 可以在单一基础模型上同时服务多个 LoRA 适配器。在一组 GPU 上高效运营领域特化模型,大幅节省 GPU 资源。
架构概念
基础模型 + 适配器热交换:
- Base Model(70B)始终加载在 GPU 内存中
- LoRA 适配器(数百 MB~数 GB)按请求动态加载/卸载
- 适配器切换开销:数十~数百 ms(比重新加载整个模型快 100 倍)
内存效率:
- 传统方式:领域级完整模型 × N 个部署 = 140GB × 5 = 700GB
- Multi-LoRA:Base Model(140GB)+ 适配器缓存(10GB)= 150GB
主要配置选项
| 选项 | 说明 | 默认值 |
|---|---|---|
| --enable-lora | 启用 Multi-LoRA 服务 | False |
| --lora-modules | 预加载的 LoRA 模块 (name=path) | None |
| --max-loras | 最大同时加载 LoRA 数 | 1 |
| --max-lora-rank | 支持的最大 LoRA rank | 16 |
| --lora-extra-vocab-size | LoRA 适配器额外词汇大小 | 256 |
基本使用示例:
vllm serve meta-llama/Llama-3.3-70B-Instruct \
--enable-lora \
--lora-modules customer-support=./lora-cs finance=./lora-fin \
--max-loras 4 \
--max-lora-rank 64
Multi-LoRA 热交换部署、客户级适配器路由、A/B 测试、S3 动态加载等详细实现请参阅 自定义模型流水线指南。
性能优化
量化(Quantization)
平衡模型质量和内存效率。