【简单上手】服务器上部署兼容 OpenAI API 的 LLM 的 vLLM 方案

17 阅读4分钟

在服务器上部署兼容 OpenAI API 的 LLM 的 vLLM 方案

我们在使用 LLM 进行实验时,最开始都是调用商用 API 来获取 LLM 服务的,如果我们要本地部署 LLM,并且要兼容原先实验代码的 API 调用,则需要采取如兼容 OpenAI API 的 LLM 的本地部署方案,这里我选用 vLLM 方案实现。

采用 vLLM 方案的优势

vLLM 是伯克利大学开发的高性能推理引擎,通过 PagedAttention 技术显著减少显存占用,吞吐量比 Hugging Face Transformers 高 10-24 倍,并且原生提供 OpenAI 兼容 API,是目前生产环境的首选方案。

在 AutoDL 上的具体部署步骤

1. 创建实例并配置环境

AutoDL 平台已提供预装 vLLM 的社区镜像,可直接使用。登录 AutoDL 后,选择 RTX 4090 或 3090 实例,然后选择社区镜像 datawhalechina/self-llm/Qwen3:v1,该镜像预装了 Python 3.12、vLLM、modelscope 等必要依赖。 另外,建议在容器实例所属地区的文件存储处,进行初始化文件存储,并将后续模型下载到此处。这样后续在同地区下更换容器实例时,就不用重新下载。该文件存储在实例中的挂载目录为:/root/autodl-fs,后续步骤我们将下载的模型下载到该目录。

2. 下载模型

建议在无卡模式下开机来下载模型,因为下载模型需要花费较多时间,无卡模式开机下载会划算一些。我们通过 ModelScope 下载模型 Qwen 系列模型。在 JupyterLab 终端中执行:

# 安装 modelscope(已经安装)
pip install modelscope

# 下载模型(这里以 Qwen3-8B 为例,可替换为你需要的模型)
modelscope download --model Qwen/Qwen3-8B --local_dir /root/autodl-fs/models/Qwen/Qwen3-8B

3. 启动兼容 OpenAI 的 API 服务

# 启动 vLLM 服务器,暴露 OpenAI 兼容 API
VLLM_USE_MODELSCOPE=true vllm serve /root/autodl-fs/models/Qwen/Qwen3-8B \
  --served-model-name Qwen3-8B \
  --max_model_len 8192 \
  --host 0.0.0.0 \
  --port 8000

服务默认监听 http://0.0.0.0:8000,已兼容 OpenAI API。vLLM 支持 Chat Completions API (/v1/chat/completions)、Completions API (/v1/completions) 和 Models API (/v1/models)。

host 和 port 的区别

在部署 API 服务时,--host--port 这两个参数分工明确:

  • host(主机地址):决定服务“监听在哪个网络接口上”
  • port(端口号):决定服务“占用哪个数字通道”
用现实比喻理解

把服务器想象成一栋大楼:

  • Host 就是大楼的“地址”(决定只让楼内的人访问,还是让任何来找这栋楼的人都能进门)
  • Port 就是大楼里的“房间号”(不同服务使用不同房间,互不干扰)
详细解释——Host 常见的取值和含义
含义谁能访问
127.0.0.1 / localhost仅监听本机回环地址只能在本机内部访问,外部无法连接
0.0.0.0监听所有网络接口能被同一网络中的任何设备访问(包括通过公网 IP 或隧道)
具体 IP(如 192.168.1.5只监听该 IP 对应的网卡只有通过该 IP 访问的请求才会被接受

在 AutoDL 等云服务器上部署时,几乎总是要用 --host 0.0.0.0,否则即使做了端口转发,外部也无法连接到容器内的 API。

详细解释——Port 的常见知识
  • 是一个 0 ~ 65535 的数字,通常使用 1024 ~ 49151 的范围
  • 每个端口同一时间只能被一个程序占用
  • 不同服务默认端口不同,例如:
    • HTTP 常用 80
    • vLLM 常设为 8000
    • Ollama 用 11434
核心区别
  • Host 管“范围” → 谁能找到这个服务
  • Port 管“入口” → 找到后从哪个门进来

示例命令:

vllm serve /path/to/model --host 0.0.0.0 --port 8000

含义: “在本机的所有网络接口上,开放 8000 端口,提供模型推理服务。”

同一个环境中,不能有两个服务同时占用同一个 host:port 组合,但可以通过改变端口在同台机器上启动多个服务(例如 8000、8001 各一个)。

4. 测试 API

注意,如果是在无卡模式下,下载模型后需要重新进入非无卡模式来测试和调用本地模型。

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen3-8B",
    "messages": [
      {"role": "user", "content": "你好,请介绍一下你自己"}
    ]
  }'

5. 使用 OpenAI SDK 调用本地模型

from openai import OpenAI

# 设置 base_url 指向本地服务,api_key 可任意填写
client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="sk-not-needed"
)

response = client.chat.completions.create(
    model="Qwen3-8B",
    messages=[{"role": "user", "content": "你好!"}]
)
print(response.choices[0].message.content)