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

在服务器上部署兼容 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 终端中执行:

bash 复制代码
# 安装 modelscope(已经安装)
pip install modelscope

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

3. 启动兼容 OpenAI 的 API 服务

bash 复制代码
# 启动 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 管"入口" → 找到后从哪个门进来

示例命令:

bash 复制代码
vllm serve /path/to/model --host 0.0.0.0 --port 8000

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

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

4. 测试 API

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

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

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

Python 复制代码
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)
相关推荐
极客 - L U6 小时前
神经网络 - 激活函数、损失函数、优化器
人工智能·深度学习·神经网络
数字融合6 小时前
透明化视频三维矿山井下照明重建技术
人工智能·python·数码相机
yi0116 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
xiangzhihong86 小时前
创之星花店多端业务闭环拆解
人工智能
奈落247 小时前
AI 编程从助手到 Agent:基于两份资料看哪些环节可以交出去,哪些必须自己攥住
大数据·人工智能
Joker可视化开发平台7 小时前
AI短剧接棒真人剧:开机量跌七成,普通人进场窗口在收窄
大数据·人工智能
澳鹏Appen7 小时前
澳鹏电子书 | 强化学习环境:为AI智能体打造高保真训练场
人工智能
吴佳浩7 小时前
单卡5090跑125B 大模型:Strata 把服务器级 MoE 拉进普通 PC
人工智能
Data-Miner7 小时前
AI做表格软件哪个好?专业评测:五维对比看清差距
人工智能
Raspberry_Pi_官方账号8 小时前
观察、理解与响应:Raspberry Pi 5 上的低功耗 CNN、VLM 和 SLM 工作负载
人工智能·神经网络·cnn·树莓派·raspberrypi