【简单上手】服务器上部署兼容 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)
相关推荐
青岛前景互联信息技术有限公司1 小时前
以一体化管控新思路,构建园区全域全维度安全管理体系
大数据·人工智能·物联网
加勒比海带661 小时前
目标检测算法——农林行业数据集汇总附下载链接【Plant】
大数据·图像处理·人工智能·算法·目标检测
工业机器人销售服务1 小时前
法奥协作机器人:智能避障,安全协作
人工智能·机器人
Quz1 小时前
在 Claude Code中配置DeepSeek:从报错到成功调用【支持DeepSeekV4】
人工智能
搭贝1 小时前
建筑多分支企业数字化实战:凯驿景澄建设项目管理系统落地案例
大数据·人工智能·低代码·数字化·工程项目技术方案
MediaTea1 小时前
人工智能通识课:机器学习之监督学习
人工智能·学习·机器学习
这张生成的图像能检测吗1 小时前
(论文速读)LogInsight:基于大语言模型的准确可解释日志故障诊断
人工智能·计算机视觉·语言模型·自然语言处理·故障诊断
阿里云大数据AI技术1 小时前
使用Skills一句话完成 Milvus 业务落地
人工智能
爱学习的徐徐1 小时前
监督学习与无监督学习(机器学习初揭秘)
人工智能·机器学习