跳转到内容

vLLM 推理服务

vLLM 是由加州大学伯克利分校开发的高性能大语言模型推理和服务框架。它通过 PagedAttention 等创新技术显著提升了推理吞吐量,相比传统方案可获得数倍的性能提升。vLLM 原生提供兼容 OpenAI API 的 HTTP 服务,适合在生产环境中部署高并发的 AI 推理服务。

  • CentOS Stream 9 & 10 / AlmaLinux 9.x & 10.x / Rocky Linux 9.x & 10.x
  • Python 3.10 - 3.14(EL 10 默认为 Python 3.12;以 vLLM 当前版本的 requires-python 为准)
  • NVIDIA GPU(计算能力 7.0 以上,即 V100/T4/A100/RTX 20 系列及更新)
  • NVIDIA 驱动:建议 R570 以上 + CUDA 12.8 以上(当前默认预编译包基于 CUDA 12.9;CUDA 13 需要 R580+ 驱动,Blackwell 显卡至少需要 CUDA 12.8;参考 NVIDIA 驱动与 CUDA
  • 至少 16 GB GPU 显存(运行 7B 模型)
Terminal window
sudo dnf install -y python3.12 python3.12-devel python3.12-pip gcc gcc-c++ make

如果系统默认没有 Python 3.12(主要是 EL 9),可以从 CRB 仓库安装:

EL 9:启用 CRB 并安装 Python 3.12
sudo dnf install -y epel-release
sudo dnf config-manager --set-enabled crb
sudo dnf install -y python3.12 python3.12-devel python3.12-pip
Terminal window
# 确认 NVIDIA 驱动工作正常
nvidia-smi
# 确认 CUDA 版本
nvcc --version

强烈建议在虚拟环境中安装 vLLM,避免与系统 Python 包冲突:

Terminal window
# 创建项目目录
sudo mkdir -p /opt/vllm
sudo chown $(whoami):$(whoami) /opt/vllm
# 创建虚拟环境
python3.12 -m venv /opt/vllm/venv
# 激活虚拟环境
source /opt/vllm/venv/bin/activate
# 升级 pip
pip install --upgrade pip setuptools wheel
Terminal window
source /opt/vllm/venv/bin/activate
pip install vllm

安装过程会自动拉取 PyTorch、Triton 等依赖,可能需要几分钟。

Terminal window
source /opt/vllm/venv/bin/activate
python -c "import vllm; print(vllm.__version__)"

vLLM 使用 Hugging Face 格式的模型。你可以提前下载模型,也可以让 vLLM 在启动时自动下载。

Terminal window
source /opt/vllm/venv/bin/activate
pip install huggingface_hub[cli]
# 下载 Qwen2.5-7B-Instruct 到指定目录
huggingface-cli download Qwen/Qwen2.5-7B-Instruct \
--local-dir /opt/vllm/models/Qwen2.5-7B-Instruct
# 或下载 Meta-Llama-3.1-8B-Instruct(gated 模型,需先在 HF 上申请授权并登录)
huggingface-cli download meta-llama/Meta-Llama-3.1-8B-Instruct \
--local-dir /opt/vllm/models/Meta-Llama-3.1-8B-Instruct

如果访问 Hugging Face 较慢,可以设置镜像:

Terminal window
export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download Qwen/Qwen2.5-7B-Instruct \
--local-dir /opt/vllm/models/Qwen2.5-7B-Instruct

vLLM 内置了兼容 OpenAI API 的 HTTP 服务器:

Terminal window
source /opt/vllm/venv/bin/activate
vllm serve /opt/vllm/models/Qwen2.5-7B-Instruct \
--host 0.0.0.0 \
--port 8000 \
--served-model-name qwen2.5-7b

服务启动后,你可以使用标准的 OpenAI API 格式调用:

Terminal window
# 测试 Chat Completions 接口
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen2.5-7b",
"messages": [
{"role": "system", "content": "你是一个有用的助手。"},
{"role": "user", "content": "CentOS Stream 和 AlmaLinux 有什么区别?"}
],
"temperature": 0.7,
"max_tokens": 512
}'
Terminal window
# 查看可用模型
curl http://localhost:8000/v1/models
Terminal window
# 测试 Completions 接口
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "qwen2.5-7b",
"prompt": "Linux 的优势在于",
"max_tokens": 128
}'
Terminal window
vllm serve /opt/vllm/models/Qwen2.5-7B-Instruct \
--host 0.0.0.0 \
--port 8000 \
--served-model-name qwen2.5-7b \
--tensor-parallel-size 2 \
--gpu-memory-utilization 0.90 \
--max-model-len 8192 \
--max-num-seqs 64 \
--enable-prefix-caching \
--dtype auto

参数说明:

参数说明
--tensor-parallel-size张量并行数,设为 GPU 数量。多卡时使用
--gpu-memory-utilizationGPU 显存利用率,默认 0.9,最大不超过 0.95
--max-model-len最大上下文长度,降低此值可减少显存占用
--max-num-seqs最大并发序列数
--enable-prefix-caching启用前缀缓存,对相似请求有显著加速
--dtype数据类型,auto 会自动选择,也可指定 float16bfloat16
--quantization量化方式,支持 awqgptqsqueezellm
Terminal window
# 使用 AWQ 量化模型
vllm serve Qwen/Qwen2.5-7B-Instruct-AWQ \
--quantization awq \
--host 0.0.0.0 \
--port 8000
Terminal window
# 使用 2 块 GPU 进行张量并行
vllm serve /opt/vllm/models/Qwen2.5-7B-Instruct \
--tensor-parallel-size 2 \
--host 0.0.0.0 \
--port 8000

创建 systemd 服务文件以实现开机自启和进程管理:

Terminal window
sudo tee /etc/systemd/system/vllm.service > /dev/null <<'EOF'
[Unit]
Description=vLLM OpenAI Compatible API Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=root
Group=root
WorkingDirectory=/opt/vllm
ExecStart=/opt/vllm/venv/bin/vllm serve /opt/vllm/models/Qwen2.5-7B-Instruct \
--host 0.0.0.0 \
--port 8000 \
--served-model-name qwen2.5-7b \
--gpu-memory-utilization 0.90 \
--max-model-len 8192
Restart=on-failure
RestartSec=10
Environment="CUDA_VISIBLE_DEVICES=0"
Environment="HF_HOME=/opt/vllm/hf_cache"
# 资源限制
LimitNOFILE=65536
LimitNPROC=65536
[Install]
WantedBy=multi-user.target
EOF

启用并启动服务:

Terminal window
sudo systemctl daemon-reload
sudo systemctl enable --now vllm

管理服务:

Terminal window
# 查看状态
sudo systemctl status vllm
# 查看日志
sudo journalctl -u vllm -f
# 重启
sudo systemctl restart vllm
Terminal window
sudo firewall-cmd --permanent --add-port=8000/tcp
sudo firewall-cmd --reload

由于 vLLM 兼容 OpenAI API,你可以直接使用 OpenAI 的 Python 客户端:

Terminal window
pip install openai
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="not-needed", # vLLM 默认不需要 API key
)
response = client.chat.completions.create(
model="qwen2.5-7b",
messages=[
{"role": "system", "content": "你是一个 Linux 专家。"},
{"role": "user", "content": "如何在 AlmaLinux 9 上配置防火墙?"},
],
temperature=0.7,
max_tokens=1024,
)
print(response.choices[0].message.content)

如果遇到 CUDA out of memory 错误:

Terminal window
# 减小最大上下文长度
vllm serve /opt/vllm/models/Qwen2.5-7B-Instruct --max-model-len 4096
# 或降低 GPU 显存利用率
vllm serve /opt/vllm/models/Qwen2.5-7B-Instruct --gpu-memory-utilization 0.80
# 或使用量化模型
vllm serve Qwen/Qwen2.5-7B-Instruct-AWQ --quantization awq

设置 Hugging Face 镜像环境变量:

Terminal window
sudo systemctl edit vllm
[Service]
Environment="HF_ENDPOINT=https://hf-mirror.com"

在服务运行时监控 GPU:

Terminal window
watch -n 1 nvidia-smi