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 模型)
安装系统依赖
Section titled “安装系统依赖”sudo dnf install -y python3.12 python3.12-devel python3.12-pip gcc gcc-c++ make如果系统默认没有 Python 3.12(主要是 EL 9),可以从 CRB 仓库安装:
sudo dnf install -y epel-releasesudo dnf config-manager --set-enabled crbsudo dnf install -y python3.12 python3.12-devel python3.12-pip确认 GPU 环境
Section titled “确认 GPU 环境”# 确认 NVIDIA 驱动工作正常nvidia-smi
# 确认 CUDA 版本nvcc --version创建 Python 虚拟环境
Section titled “创建 Python 虚拟环境”强烈建议在虚拟环境中安装 vLLM,避免与系统 Python 包冲突:
# 创建项目目录sudo mkdir -p /opt/vllmsudo chown $(whoami):$(whoami) /opt/vllm
# 创建虚拟环境python3.12 -m venv /opt/vllm/venv
# 激活虚拟环境source /opt/vllm/venv/bin/activate
# 升级 pippip install --upgrade pip setuptools wheel安装 vLLM
Section titled “安装 vLLM”使用 pip 安装(推荐)
Section titled “使用 pip 安装(推荐)”source /opt/vllm/venv/bin/activatepip install vllm安装过程会自动拉取 PyTorch、Triton 等依赖,可能需要几分钟。
source /opt/vllm/venv/bin/activatepython -c "import vllm; print(vllm.__version__)"vLLM 使用 Hugging Face 格式的模型。你可以提前下载模型,也可以让 vLLM 在启动时自动下载。
source /opt/vllm/venv/bin/activatepip 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 较慢,可以设置镜像:
export HF_ENDPOINT=https://hf-mirror.comhuggingface-cli download Qwen/Qwen2.5-7B-Instruct \ --local-dir /opt/vllm/models/Qwen2.5-7B-Instruct运行 OpenAI 兼容 API 服务
Section titled “运行 OpenAI 兼容 API 服务”vLLM 内置了兼容 OpenAI API 的 HTTP 服务器:
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 格式调用:
# 测试 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 }'# 查看可用模型curl http://localhost:8000/v1/models# 测试 Completions 接口curl http://localhost:8000/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "qwen2.5-7b", "prompt": "Linux 的优势在于", "max_tokens": 128 }'关键启动参数
Section titled “关键启动参数”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-utilization | GPU 显存利用率,默认 0.9,最大不超过 0.95 |
--max-model-len | 最大上下文长度,降低此值可减少显存占用 |
--max-num-seqs | 最大并发序列数 |
--enable-prefix-caching | 启用前缀缓存,对相似请求有显著加速 |
--dtype | 数据类型,auto 会自动选择,也可指定 float16 或 bfloat16 |
--quantization | 量化方式,支持 awq、gptq、squeezellm 等 |
使用量化模型减少显存占用
Section titled “使用量化模型减少显存占用”# 使用 AWQ 量化模型vllm serve Qwen/Qwen2.5-7B-Instruct-AWQ \ --quantization awq \ --host 0.0.0.0 \ --port 8000多 GPU 推理
Section titled “多 GPU 推理”# 使用 2 块 GPU 进行张量并行vllm serve /opt/vllm/models/Qwen2.5-7B-Instruct \ --tensor-parallel-size 2 \ --host 0.0.0.0 \ --port 8000systemd 服务
Section titled “systemd 服务”创建 systemd 服务文件以实现开机自启和进程管理:
sudo tee /etc/systemd/system/vllm.service > /dev/null <<'EOF'[Unit]Description=vLLM OpenAI Compatible API ServerAfter=network-online.targetWants=network-online.target
[Service]Type=simpleUser=rootGroup=rootWorkingDirectory=/opt/vllmExecStart=/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 8192Restart=on-failureRestartSec=10Environment="CUDA_VISIBLE_DEVICES=0"Environment="HF_HOME=/opt/vllm/hf_cache"
# 资源限制LimitNOFILE=65536LimitNPROC=65536
[Install]WantedBy=multi-user.targetEOF启用并启动服务:
sudo systemctl daemon-reloadsudo systemctl enable --now vllm管理服务:
# 查看状态sudo systemctl status vllm
# 查看日志sudo journalctl -u vllm -f
# 重启sudo systemctl restart vllmsudo firewall-cmd --permanent --add-port=8000/tcpsudo firewall-cmd --reload使用 Python 客户端调用
Section titled “使用 Python 客户端调用”由于 vLLM 兼容 OpenAI API,你可以直接使用 OpenAI 的 Python 客户端:
pip install openaifrom 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 内存不足
Section titled “CUDA 内存不足”如果遇到 CUDA out of memory 错误:
# 减小最大上下文长度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模型下载超时
Section titled “模型下载超时”设置 Hugging Face 镜像环境变量:
sudo systemctl edit vllm[Service]Environment="HF_ENDPOINT=https://hf-mirror.com"查看 GPU 使用情况
Section titled “查看 GPU 使用情况”在服务运行时监控 GPU:
watch -n 1 nvidia-smi