vLLM本地LLM推理服务搭建:GPU云服务器部署指南

概述

想在自己的GPU服务器上跑大模型推理?vLLM是目前开源社区最主流的选择之一。它用PagedAttention技术做显存管理,吞吐量大、延迟低,而且兼容OpenAI API格式,你的Python代码改个base_url就能直接调用。

这篇教程带你从0搭建vLLM推理服务,包括Docker镜像拉取、模型下载、API启动和调用测试。全程命令可直接复制运行。

准备工作

  • 一台带GPU的服务器(NVIDIA GPU,至少8GB显存)
  • 已安装Docker和NVIDIA Container Toolkit
  • 能访问Hugging Face(或已配置镜像源)
  • 磁盘剩余空间20GB以上(模型文件较大)

如果还没有GPU服务器,推荐用RunPod、Vast.ai或AutoDL按小时租用,价格一般在1-3元/小时。

步骤

第一步:确认GPU和驱动正常

nvidia-smi

看到GPU型号、显存用量和驱动版本就说明环境就绪。如果没有输出,先安装NVIDIA驱动和NVIDIA Container Toolkit:

# Ubuntu/Debian
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpms/nvidia-container-toolkit.repo | sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

第二步:拉取vLLM Docker镜像

docker pull vllm/vllm-openai:latest

国内网络慢的话可以用镜像加速:

docker pull registry.cn-hangzhou.aliyuncs.com/dockerlan/vllm-openai:latest

拉取完成大概需要几分钟,视网速而定。

第三步:下载模型

vLLM支持Hugging Face格式的模型。常用开源模型推荐:

  • Qwen2.5-7B-Instruct:中文能力强,7B参数适合消费级显卡
  • DeepSeek-R1-Distill-Qwen-7B:推理能力强
  • Llama-3.1-8B-Instruct:英文场景首选

下载模型到本地目录(方便复用,不用每次都从网络拉):

mkdir -p ~/models
cd ~/models

# 用huggingface-cli下载,速度快且支持断点续传
pip install -q huggingface_hub
huggingface-cli download Qwen/Qwen2.5-7B-Instruct --local-dir ./qwen2.5-7b-instruct

下载7B模型大约3-4GB,耐心等待。

第四步:启动vLLM服务

docker run -d \
  --gpus all \
  -p 8000:8000 \
  -v ~/models:/root/models \
  --name vllm-server \
  vllm/vllm-openai:latest \
  serve /root/models/qwen2.5-7b-instruct \
  --host 0.0.0.0 \
  --port 8000 \
  --trust_remote_code

参数说明:

  • --gpus all:挂载所有GPU
  • -p 8000:8000:映射API端口
  • -v ~/models:/root/models:挂载模型目录
  • --trust_remote_code:加载模型时信任远程代码(部分模型需要)

启动后等几十秒,vLLM会加载模型到显存。可以用这个命令查看日志:

docker logs -f vllm-server

看到"Application startup complete"就说明服务就绪了。

第五步:测试API调用

另开一个终端,用curl测试:

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "/root/models/qwen2.5-7b-instruct",
    "messages": [
      {"role": "user", "content": "你好,介绍一下你自己"}
    ],
    "temperature": 0.7
  }'

返回JSON里包含choices[0].message.content就是模型的回复。

Python调用方式:

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="not-needed"
)

response = client.chat.completions.create(
    model="/root/models/qwen2.5-7b-instruct",
    messages=[{"role": "user", "content": "什么是vLLM?"}],
    temperature=0.7
)
print(response.choices[0].message.content)

验证

确认服务正常运行的几个检查点:

  1. 容器状态:docker ps | grep vllm,状态应该是Up
  2. GPU占用:nvidia-smi,应该能看到vllm进程占用显存
  3. API响应:curl命令返回正确的JSON格式
  4. 并发测试:同时发多个请求,vLLM会利用PagedAttention高效调度

如果想看更详细的性能指标,vLLM自带了一个Web UI:

curl http://localhost:8000/metrics

能看到请求数、延迟、吞吐等数据。

常见问题

Q: 显存不足怎么办?

7B模型在8GB显存上可能跑不起来。两个方案:

  • 换更小参数模型,比如Qwen2.5-3B-Instruct
  • 开启量化:在启动命令中加--dtype half或使用AWQ量化模型

Q: 模型加载很慢?

首次加载需要从磁盘读模型到显存,7B模型大概需要1-2分钟。后续请求会有缓存,会快很多。确保模型文件在本地(不要放网络存储),I/O速度影响很大。

Q: 如何支持多模型?

启动服务时不指定模型路径,用--served-model-name自定义别名:

vllm serve /root/models/qwen2.5-7b-instruct --served-model-name qwen2.5

客户端调用时把model字段改成qwen2.5即可。

Q: 想开放给外网访问怎么弄?

用nginx反向代理加basic auth,或者结合前面讲过的Cloudflare Tunnel。注意推理服务对带宽和延迟敏感,建议限制访问来源IP。

Q: 想开机自启容器?

docker update --restart=always vllm-server

或者用systemd管理,把docker run命令封装成service。


vLLM的PagedAttention技术让显存利用率比普通方案高不少,同样的GPU能同时服务更多并发请求。下次想测不同模型的性能表现,可以换模型路径重新启动容器试试。你打算用vLLM跑哪个模型?

这篇文章对你有帮助吗?