GPU 软件
使用 vLLM 部署 LLM 推理服务
在干净的环境中安装 PyTorch 和 vLLM,在单张或 8 张 GPU 上启动兼容 OpenAI 的推理端点,再让它作为服务持续运行。
本页内容
本指南介绍如何在 FullGPU 服务器上用 vLLM 部署大语言模型(LLM)推理服务:创建 Python 环境,安装 PyTorch 和 vLLM,在单张 GPU 上或跨 8 张 GPU 启动兼容 OpenAI 的推理端点,用 curl 进行测试,并将其作为 systemd 服务运行。选择模型之前,请先用显存计算器估算其显存需求。在 BF16 精度下,权重每个参数约占 2 字节,此外还要为 KV 缓存留出空间。
在 Python 环境中安装 PyTorch 和 vLLM
创建环境
uv 创建环境和安装软件包的速度都很快,还能获取操作系统未自带的 Python 版本:
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
uv venv ~/venvs/vllm --python 3.12
source ~/venvs/vllm/bin/activate
如果改用标准工具,请先运行 sudo apt install ,再运行 python3 和同一条 source 命令。请把 vLLM 放在单独的环境中,与训练代码分开。
安装软件包
uv pip install vllm --torch-backend=auto
python -c "import torch, vllm; print(torch.__version__,
torch.cuda.is_available(), vllm.__version__)"
您应该会在两个版本号之间看到 True。vLLM 固定了构建时所依赖的 PyTorch 版本,并会自动为您安装, 则让 uv 选择与您的驱动相匹配的 PyTorch 构建版本。不要在此基础上再安装其他 PyTorch 版本。如果是不含 vLLM 的训练环境,可以用同样的方式单独安装 PyTorch:uv pip install torch 。如果使用普通的 pip,请运行 pip install vllm。
启动兼容 OpenAI 的服务器
在单张 GPU 上,7B 级模型很适合作为第一次测试:
vllm serve Qwen/Qwen2.5-7B-Instruct \
--host 127.0.0.1 --port 8000 \
--max-model-len 16384 \
--gpu-memory-utilization 0.90
在 8 卡服务器上,用张量并行把更大的模型拆分到所有 GPU 上:
vllm serve Qwen/Qwen2.5-72B-Instruct \
--host 127.0.0.1 --port 8000 \
--tensor-parallel-size 8 \
--max-model-len 32768
首次启动时会下载权重,可能需要一些时间。日志中出现 Application startup complete 时,服务器即已就绪。权重保存在 ~/.cache/huggingface 中;如果要把它们放在 NVMe 数据盘上,请在启动前运行 export HF_HOME=/data/hf。
| 选项 | 作用 |
|---|---|
| 共同承载该模型的 GPU 数量。它必须能整除模型的注意力头数;对大多数大型模型来说,设为 8 即可。 |
| 每个请求的最长上下文(提示词加输出)。如果 vLLM 报告 KV 缓存无法容纳该最大长度,请调低此值。 |
| 每张 GPU 的显存中,vLLM 可用于权重和 KV 缓存的比例,默认为 0.9。如果有其他进程使用这张 GPU,请调低此值。 |
| 监听地址。如果不设置,vLLM 会监听所有网络接口,因此请保留 127.0.0.1。 |
用 curl 测试 API
curl http://127.0.0.1:8000/v1/models
curl http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model": "Qwen/Qwen2.5-7B-Instruct",
"messages": [{"role": "user", "content": "Say hello in five words."}],
"max_tokens": 32}'
第一条请求应列出该模型。第二条请求返回 JSON,回答位于 choices[0].message.content 中。任何兼容 OpenAI 的客户端,只要把 base URL 设置为 http://127.0.0.1:8000/v1 即可使用。在您的笔记本电脑上,可以通过 SSH 隧道访问它:ssh 。
使用 Hugging Face 令牌访问受限模型
部分模型(例如 Meta 的 Llama 系列)要求您先在 Hugging Face 上接受许可协议。请用您的账户在模型页面上接受协议,创建一个具有读取权限的访问令牌,然后通过 HF_TOKEN 变量传给 vLLM。在提示符下输入令牌,可以避免它留在 shell 历史记录中:
read -rsp 'Hugging Face token: ' HF_TOKEN && export HF_TOKEN
vllm serve meta-llama/Llama-3.1-8B-Instruct \
--host 127.0.0.1 --port 8000 --max-model-len 16384
如果下载时出现 401 或 403 错误,说明令牌缺失或有误,或者该账户尚未接受许可协议。
将 vLLM 作为 systemd 服务运行
- 把设置和机密信息保存在只有 root 可读的文件中。用
openssl rand生成 API 密钥;vLLM 读取-hex 32 VLLM_API_KEY的效果,与传入相同。--api-key sudo mkdir -p /etc/vllm sudo tee /etc/vllm/vllm.env >/dev/null <<'EOF' HF_HOME=/data/hf HF_TOKEN=hf_your_token_here VLLM_API_KEY=replace-with-a-long-random-string EOF sudo chmod 600 /etc/vllm/vllm.env - 创建
/etc/systemd/system/vllm.service。本示例以 root 身份运行,并使用上面创建的环境;如果使用其他用户账户,请相应调整User和各个路径:[Unit] Description=vLLM OpenAI-compatible server After=network-online.target Wants=network-online.target [Service] User=root EnvironmentFile=/etc/vllm/vllm.env ExecStart=/root/venvs/vllm/bin/vllm serve Qwen/Qwen2.5-7B-Instruct \ --host 127.0.0.1 --port 8000 --max-model-len 16384 Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target - 启动服务并跟踪日志:
日志中出现sudo systemctl daemon-reload sudo systemctl enable --now vllm sudo journalctl -u vllm -fApplication startup complete后,只要加上请求头,前面的 curl 测试就能再次正常运行。不加这个请求头,应返回 401 Unauthorized。该服务会在崩溃后自动重启,并在开机时自动启动。-H "Authorization: Bearer YOUR_KEY"
替代方案:vllm/vllm-openai 镜像
docker run -d --name vllm --gpus all --ipc=host \
-p 127.0.0.1:8000:8000 \
-v /data/hf:/data/hf \
--env-file /etc/vllm/vllm.env \
vllm/vllm-openai:latest \
--model Qwen/Qwen2.5-7B-Instruct --max-model-len 16384
该镜像的入口点就是 vLLM 服务器,因此镜像名称之后的参数会直接传给它。环境变量文件设置了 HF_HOME=/data/hf,所以要挂载这个路径。在生产环境中,请固定一个版本标签,不要使用 latest。在 AMD 服务器上,请使用 ROCm 配置中介绍的 ROCm 镜像。
保护推理端点
个人使用时,让 vLLM 只监听 127.0.0.1,并通过 SSH 隧道访问。如果要通过互联网为应用提供服务,请在前面部署带 TLS 的反向代理,要求提供 API 密钥,并且只暴露 /v1/ 路径:API 密钥保护的是 /v1 路由,/metrics 等其他路由可能仍然开放。防火墙指南介绍了 ufw、Docker 发布的端口,以及 Caddy 或 nginx 的配置。关于容量规划和运行成本,请阅读使用 vLLM 自托管 LLM 推理。
故障排查
- 启动时出现“CUDA out of memory”错误。请调低
,用--max-model-len 把模型分布到更多 GPU 上,或者选择更小的模型或量化模型。用--tensor-parallel-size 确认没有其他进程占用显存。nvidia-smi - 注意力头数无法被张量并行度整除。请选择能整除模型头数的并行度,例如用 4 代替 8。
- 401 Unauthorized. 缺少
Authorization请求头,或者密钥不匹配。
常见问题
用 vLLM 部署 70B 模型需要什么 GPU?
权重在 BF16 精度下约需 140 GB,在 FP8 精度下约需 70 GB,此外还要为 KV 缓存留出空间。一张 H200 能以 FP8 精度从容运行 70B 模型;在 BF16 精度下,单张 H200 只能勉强装下,因此请使用 B200 或 B300,或者用张量并行把模型拆分到多张 GPU 上。
vLLM 能在 AMD Instinct MI355X 服务器上运行吗?
可以。请使用 AMD 提供的支持 ROCm 的 vLLM 镜像,并加上 ROCm 设备参数,具体见我们的 ROCm 配置指南。vllm serve 的选项完全相同。
如何更新 vLLM?
在同一个环境中运行 uv pip install -U vllm --torch-backend=auto,然后重启服务。如果该推理端点承载着生产流量,请先在单独的环境中测试新版本。
问题仍未解决?
请在控制台提交工单,写明服务器、您运行了什么以及错误输出(如有)。工程师 7×24 小时答复。