跳转至

vLLM — 高性能 LLM 推理引擎

一句话概述

vLLM 是一个高吞吐、低延迟的大模型推理引擎,用 PagedAttention 技术把 GPU 显存利用率拉到极致,比普通推理快 2-24 倍,相当于给 AI 模型装了一个"涡轮增压器"。


核心知识点表格

知识点说明
来源UC Berkeley Sky Computing Lab
定位高吞吐、高效率的 LLM 推理和服务引擎
核心技术PagedAttention(像操作系统管理内存一样管理 GPU 显存)
最新版本v0.20.2(2026年5月)
性能提升比传统推理框架快 2-24 倍
模型支持200+ 模型架构(HuggingFace)
许可证Apache 2.0
贡献者2000+
生产用户Meta、Mistral AI、Cohere、IBM、Stripe

安装与配置

环境要求

  • Python 3.10+(推荐 3.12+)
  • NVIDIA GPU(推荐 A100/H100),也支持 AMD、CPU
  • CUDA 12.1+
  • 至少 16GB GPU 显存(运行 7B 模型)

安装步骤

# === pip 安装(最简单) ===
pip install vllm  # 安装 vLLM

# === 指定 CUDA 版本安装 ===
pip install vllm --extra-index-url https://download.pytorch.org/whl/cu124  # CUDA 12.4

# === 从源码安装(获取最新功能) ===
git clone https://github.com/vllm-project/vllm.git  # 克隆仓库
cd vllm  # 进入目录
pip install -e .  # 可编辑模式安装

# 验证安装
python -c "import vllm; print(vllm.__version__)"  # 打印版本号

基本使用

快速启动 API 服务器

# 启动 OpenAI 兼容的 API 服务器
vllm serve Qwen/Qwen2.5-7B-Instruct \
  --host 0.0.0.0 \
  --port 8000  # 在 8000 端口启动服务

# 指定 GPU 数量(多卡并行)
vllm serve Qwen/Qwen2.5-7B-Instruct \
  --tensor-parallel-size 2 \
  --port 8000  # 用 2 张 GPU 并行推理

# 启动后就有了 OpenAI 兼容的 API
# 可以直接用 OpenAI SDK 调用

用 OpenAI SDK 调用

from openai import OpenAI  # 导入 OpenAI SDK

# 创建客户端,指向本地 vLLM 服务
client = OpenAI(
    base_url="http://localhost:8000/v1",  # vLLM 的 OpenAI 兼容端点
    api_key="vllm"  # vLLM 不需要真实 Key
)

# 对话请求
response = client.chat.completions.create(
    model="Qwen/Qwen2.5-7B-Instruct",  # 模型名称
    messages=[
        {"role": "system", "content": "你是一个有用的助手。"},
        {"role": "user", "content": "解释一下什么是 16S rRNA 测序?"}
    ],
    temperature=0.7,  # 创造性参数
    max_tokens=1000  # 最大输出长度
)

print(response.choices[0].message.content)  # 打印回答

Python 离线推理(不启动服务器)

from vllm import LLM, SamplingParams  # 导入 vLLM 核心类

# 加载模型
llm = LLM(
    model="Qwen/Qwen2.5-7B-Instruct",  # HuggingFace 模型名
    tensor_parallel_size=1,  # GPU 数量
    gpu_memory_utilization=0.9  # GPU 显存使用率(90%)
)

# 设置采样参数
sampling_params = SamplingParams(
    temperature=0.7,  # 温度(越高越有创造力)
    top_p=0.9,  # 核采样
    max_tokens=512  # 最大生成长度
)

# 批量推理(vLLM 的强项——高吞吐批处理)
prompts = [
    "什么是宏基因组学?",
    "解释 Shannon 多样性指数。",
    "QIIME2 和 Mothur 有什么区别?"
]

outputs = llm.generate(prompts, sampling_params)  # 批量生成

for output in outputs:
    print(f"问题: {output.prompt}")  # 打印问题
    print(f"回答: {output.outputs[0].text}")  # 打印回答
    print("---")

高级用法

PagedAttention 原理(白话版)

传统推理的问题:
- GPU 显存像一整块地 → 每个请求要预留一大片
- 实际用不到那么多 → 60-80% 的显存被浪费了
- 就像每个人要占一整排座位,就算只有一个人

PagedAttention 的方案:
- 把显存切成小页(像操作系统的虚拟内存)
- 每个请求按需分配页
- 用多少分多少,不浪费
- 就像电影院自由选座,一个人只占一个座

效果:
- 同样的 GPU,能同时服务更多请求
- 吞吐量提升 2-24 倍

量化推理(省显存)

# FP8 量化(显存减半,精度几乎不降)
vllm serve Qwen/Qwen2.5-72B-Instruct \
  --quantization fp8 \
  --port 8000  # FP8 量化运行 72B 模型

# AWQ 4-bit 量化
vllm serve TheBloke/Qwen2.5-7B-AWQ \
  --quantization awq \
  --port 8000  # 4-bit 量化,显存占用更小

# GPTQ 量化
vllm serve TheBloke/Qwen2.5-7B-GPTQ \
  --quantization gptq \
  --port 8000  # GPTQ 量化

# GGUF 格式(llama.cpp 的格式)
vllm serve ./model.gguf \
  --port 8000  # 直接加载 GGUF 文件

多 GPU 并行

# 张量并行(一个模型分到多张 GPU)
vllm serve meta-llama/Llama-3.1-70B-Instruct \
  --tensor-parallel-size 4 \
  --port 8000  # 用 4 张 GPU 运行 70B 模型

# 流水线并行(模型按层分配到不同 GPU)
vllm serve meta-llama/Llama-3.1-70B-Instruct \
  --pipeline-parallel-size 2 \
  --tensor-parallel-size 2 \
  --port 8000  # 2路流水线 x 2路张量并行 = 4 GPU

推测解码(加速生成)

# 用小模型预测 + 大模型验证,加速推理
vllm serve meta-llama/Llama-3.1-70B-Instruct \
  --speculative-model meta-llama/Llama-3.2-1B-Instruct \
  --num-speculative-tokens 5 \
  --port 8000

# 原理:
# 1. 1B 小模型快速预测接下来5个 token
# 2. 70B 大模型一次性验证这5个 token
# 3. 正确的直接用,错误的重新生成
# 效果:推理速度提升 1.5-3 倍

前缀缓存(Prefix Caching)

# 对于有共同前缀的请求(如相同的 system prompt),
# vLLM 会缓存已计算的 KV Cache,避免重复计算

vllm serve Qwen/Qwen2.5-7B-Instruct \
  --enable-prefix-caching \
  --port 8000  # 开启前缀缓存

# V1 引擎中前缀缓存几乎零开销(<1%)
# 对于 RAG 场景效果明显——相同的知识库上下文只计算一次

Docker 部署

# 使用官方 Docker 镜像
docker run --gpus all \
  -v ~/.cache/huggingface:/root/.cache/huggingface \
  -p 8000:8000 \
  --ipc=host \
  vllm/vllm-openai:latest \
  --model Qwen/Qwen2.5-7B-Instruct  # Docker 一键启动

# 生产环境推荐加上共享内存参数
# --shm-size 1g  避免 CUDA IPC 错误

常见报错与解决

报错原因解决方案
"CUDA out of memory"GPU 显存不足减小 gpu_memory_utilization 或用量化模型
"Model not found"HuggingFace 无法下载检查网络或设置 HF_ENDPOINT 镜像
CUDA IPC 错误Docker 共享内存不够添加 --shm-size 1g
推理速度慢未使用 GPU检查 nvidia-smi 确认 GPU 被使用
"Tokenizer error"模型格式不兼容检查模型是否在 vLLM 支持列表中
多 GPU 报错NCCL 通信失败检查 GPU 互联拓扑

速查表

命令说明
vllm serve MODEL启动 API 服务器
--tensor-parallel-size NN 卡张量并行
--quantization fp8/awq/gptq量化推理
--enable-prefix-caching开启前缀缓存
--gpu-memory-utilization 0.9GPU 显存使用率
--max-model-len 8192最大上下文长度
--port 8000指定端口
--host 0.0.0.0监听所有网络接口

与同类工具对比

对比维度vLLMTGIllama.cppOllama
定位高吞吐生产推理HF 官方推理CPU/轻量推理易用本地推理
性能最高吞吐CPU 最快中等
硬件GPU 为主GPU 为主CPU + GPUCPU + GPU
上手难度最低
量化支持FP8/AWQ/GPTQ/GGUFAWQ/GPTQ/BNBGGUF 全系列GGUF
模型支持200+50+GGUF 格式Ollama 库
生产部署最强维护模式嵌入式不推荐
OpenAI 兼容原生

白话总结:vLLM 是目前最强的 AI 模型推理引擎——它不是让你聊天用的,而是在服务器上大规模运行 AI 模型用的。Stripe 用它省了 73% 的推理成本,Meta 和 Mistral 都在生产环境用它。如果你只是个人使用,Ollama 更简单;但如果你要给很多人提供 AI 服务,vLLM 是首选。