本文目标:带你完整掌握如何使用 vLLM 高性能推理引擎部署国产大模型(如 Qwen / DeepSeek),包括环境准备、部署流程、性能优化和并发测试,全流程实战落地。
相比传统的 transformers 推理方式,vLLM 在性能方面有显著提升,尤其适合构建高并发、多请求的部署场景:
特性 | 说明 |
---|---|
高吞吐 | 提供连续批处理 + 静态 batching,提升并发响应能力 |
支持 Open Prompt 格式 | 适配大多数国产模型(通过 ChatTemplate) |
高效内存管理 | 实现 PagedAttention,显著降低显存占用 |
原生 HTTP 接口 | 内置 API 服务(支持标准 JSON 输入输出) |
易部署 | 使用 pip + 命令行即可完成快速部署 |
结论:
如果你已经完成了 transformers 单机部署,vLLM 是你升级部署能力的第一选择。
项目 | 推荐配置 |
---|---|
操作系统 | Ubuntu 20.04 / 22.04(建议) |
GPU | NVIDIA 24GB+ 显存(7B 以上模型) |
驱动 | CUDA 11.8 + cuDNN 8.9 |
Python | 3.10+ |
PyTorch | ≥ 2.1.0 |
vLLM | ≥ 0.4.2(建议使用最新版) |
pip install vllm
如需使用最新源码(支持更多特性):
git clone https://github.com/vllm-project/vllm
cd vllm
pip install -e .
pip install torch==2.1.0
pip install transformers==4.38.1
注意:国产模型的 ChatTemplate 支持依赖 transformers >= 4.36!
# Hugging Face CLI 登录(或下载好解压到本地)
huggingface-cli download Qwen/Qwen2.5-7B-Chat --local-dir ./qwen2.5-chat
# 或直接从 ModelScope 镜像站下载
python3 -m vllm.entrypoints.openai.api_server \
--model ./qwen2.5-chat \
--tokenizer ./qwen2.5-chat \
--dtype float16 \
--max-model-len 4096 \
--gpu-memory-utilization 0.9
参数 | 含义 |
---|---|
--model |
模型路径(本地解压后的路径) |
--dtype |
推理精度(float16 建议) |
--max-model-len |
支持的最大上下文长度(如 2048 / 4096) |
--gpu-memory-utilization |
显存占用比(建议0.85-0.95) |
http://localhost:8000/v1/chat/completions
接口格式兼容 OpenAI
风格(可用于对接前端、LangChain、Gradio等组件)
虽然 vLLM 支持标准的 chat/completions
接口格式,但在国产模型部署时,要特别注意以下三类问题:
国产模型如 Qwen / DeepSeek 通常基于 chat_template
实现对话格式化,但:
transformers
不支持该字段✅ 建议:使用 transformers >= 4.38,并显式指定 --chat-template
路径或通过 tokenizer 预设。
<|im_start|>system
你是一个乐于助人的助手<|im_end|>
<|im_start|>user
{{prompt}}<|im_end|>
<|im_start|>assistant
确保 tokenizer 中包含:
eos_token
pad_token
bos_token
unk_token
否则在 vLLM 启动时会报错 ValueError: special tokens missing
✅ 解决方法(初始化 tokenizer 时):
tokenizer.pad_token = tokenizer.eos_token
报错 | 解决方案 |
---|---|
KeyError: chat_template |
升级 transformers ≥ 4.36 |
TypeError: object of type 'NoneType' has no len() |
ChatTemplate 缺失,需补充 |
tokenizer has no attribute 'apply_chat_template' |
未安装正确版本的 transformers |
启动后无响应 | 模型太大,显存不足,建议用 INT4 模型或降显存比 |
我们以 Qwen2.5-7B-Chat 模型,在相同环境下对比 vLLM 与 transformers 推理表现:
项目 | 配置 |
---|---|
GPU | NVIDIA A100 80G |
PyTorch | 2.1.0 |
CUDA | 11.8 |
vLLM | 0.4.2 |
Prompt | 单轮中文提问,max_new_tokens=128 |
框架 | 吞吐速度(tokens/s) | 显存占用 | 接口响应延迟 | 并发支持 | 推荐用途 |
---|---|---|---|---|---|
transformers | 31.4 | 13.2 GB | 约 3.2s | 单线程 | 本地调试 / 低并发 |
vLLM | 46.2 | 13.1 GB | 约 1.4s | ✅ 支持100+并发 | 企业服务 / SaaS |
vLLM 支持自动多卡切分加载,默认无需特殊设置:
CUDA_VISIBLE_DEVICES=0,1,2,3 \
python3 -m vllm.entrypoints.openai.api_server \
--model ./qwen2.5-chat \
--tensor-parallel-size 4
--tensor-parallel-size
指并行 GPU 数量--max-num-seqs 64 \
--disable-log-requests \
--gpu-memory-utilization 0.95
max-num-seqs
,提升批量吞吐能力推荐将服务封装为独立 Docker 容器,便于上线部署与版本控制:
FROM nvidia/cuda:11.8.0-runtime-ubuntu20.04
RUN apt update && apt install -y python3 python3-pip git
RUN pip install torch==2.1.0 transformers==4.38.1 vllm
WORKDIR /app
COPY ./qwen2.5-chat /app/qwen2.5-chat
CMD ["python3", "-m", "vllm.entrypoints.openai.api_server", \
"--model", "./qwen2.5-chat", "--dtype", "float16"]
你现在已经完成: