图解 vLLM 服务化部署:从 API 调用到远程访问

机智流 2026-10-29 20:08

图解 vLLM 服务化部署:从 API 调用到远程访问图1


> 作者:李剑锋

1. 前言

在中,我们基于百度智能云平台搭建了云端服务器,完成了 vLLM 的环境配置,并成功通过 vLLM 离线运行了 Qwen3-0.6B 模型。至此,我们已经能够在服务器上调用模型并获得回答。

但如果希望在自己的电脑上,甚至在其他应用程序中直接使用这个模型,难道每次都要登录服务器、编写代码来完成调用吗?

显然这种方式就非常复杂麻烦,也很不现实。为了解决这个问题,我们就需要去了解 vLLM 的另一项重要能力——服务化部署。

我们平时使用 DeepSeek、阿里云百炼等平台的大模型 API 时,并不需要关心模型究竟运行在哪台服务器上,只需要向指定的接口发送请求,就能获得模型返回的结果。

而借助 vLLM,我们也可以将自己部署的开源模型变成这样的 API 服务,让其他程序通过网络直接调用,而不必在每个应用中重复下载和部署模型。

图解 vLLM 服务化部署:从 API 调用到远程访问图2

那么,具体应该如何实现呢?本节课我们就以 Qwen3-0.6B 为例,从启动 vLLM 推理服务开始,一步步完成 API 接口调用与远程访问,看看如何将一个运行在云端服务器上的开源模型,真正变成一个可以供其他应用使用的大模型服务。

2. 服务启动及使用

这里我们继续使用之前在百度智能云创建的服务器。如果大家还没有完成环境配置,可以先参考上一节课的内容。当然,百度智能云只是本文采用的演示平台,使用 AutoDL 或其他支持 GPU 的云服务器,同样可以完成本次实验。

2.1 初始服务启动

首先,我们需要重新连接到云端服务器,打开终端,并激活之前创建的 vLLM 虚拟环境:

source /root/venvs/vllm/bin/activate

完成环境激活后,就可以使用 vLLM 提供的 vllm serve 命令来启动模型服务:

vllm serve /root/models/Qwen3-0.6B \
  --served-model-name Qwen3-0.6B \
  --host 127.0.0.1 \
  --port 8000 \
  --dtype half \
  --max-model-len 4096 \
  --max-num-seqs 8 \
  --gpu-memory-utilization 0.5 \
  --enforce-eager

与上一节通过 Python 脚本执行离线推理不同,vllm serve 会启动一个持续运行的推理服务,使模型能够通过 HTTP 接口接收请求并返回结果。

在这条命令中,我们指定了需要加载的模型路径,并通过 --served-model-name 将服务中的模型名称设置为 Qwen3-0.6B。同时,使用 --host 127.0.0.1 和 --port 8000,让服务暂时只监听服务器自身的 8000 端口。其余参数主要用于控制模型的运行精度、上下文长度、并发处理能力以及 GPU 显存使用情况,我们将在后续内容中进一步介绍。

执行命令后,vLLM 会开始加载模型、初始化推理引擎,并完成服务启动所需的各项准备工作。终端中也会陆续输出对应的运行日志。

图解 vLLM 服务化部署:从 API 调用到远程访问图3

当模型加载完成、服务成功启动后,终端中会显示相应的启动信息。此时,vLLM 已经开始监听我们指定的端口,等待接收 API 请求。

图解 vLLM 服务化部署:从 API 调用到远程访问图4

需要注意的是,当前的 vLLM 服务运行在前台,因此不要关闭这个终端,也不要中断正在运行的进程。接下来的测试,我们可以通过另一个终端来完成。

2.2 检查服务是否正常运行

虽然终端已经显示服务启动成功,但我们还需要确认 API 接口是否能够正常访问。为此,可以在 VS Code 中重新打开一个终端(点击 + 进行新建),同时不要关闭刚才启动的 vLLM 服务。

图解 vLLM 服务化部署:从 API 调用到远程访问图5

接下来,我们先通过 curl 命令访问 vLLM 提供的健康检查接口:

curl -i http://127.0.0.1:8000/health

这里的 /health 是 vLLM 提供的健康检查接口,主要用于确认服务当前是否能够正常响应。如果返回的 HTTP 状态码为 200 OK,就说明健康检查已经通过。

图解 vLLM 服务化部署:从 API 调用到远程访问图6

确认服务能够正常访问后,我们还可以进一步查看当前服务中有哪些可用模型。只需要访问 /v1/models 接口即可:

curl http://127.0.0.1:8000/v1/models

执行后,服务会返回一段 JSON 数据,其中包含当前已经加载的模型信息。以本次实验为例,我们能够在返回结果中看到 Qwen3-0.6B,同时还可以查看模型路径、最大上下文长度等信息。

{
  "object": "list",
"data": [
    {
      "id": "Qwen3-0.6B",
      "object": "model",
      "created": 1792569653,
      "owned_by": "vllm",
      "root": "/root/models/Qwen3-0.6B",
      "parent": null,
      "max_model_len": 4096,
      "permission": [
        {
          "id": "modelperm-aec2889bf704d82c",
          "object": "model_permission",
          "created": 1792569653,
          "allow_create_engine": false,
          "allow_sampling": true,
          "allow_logprobs": true,
          "allow_search_indices": false,
          "allow_view": true,
          "allow_fine_tuning": false,
          "organization": "*",
          "group": null,
          "is_blocking": false
        }
      ]
    }
  ]
}

到这里,我们已经确认 vLLM 服务成功启动,并且能够通过 API 接口获取模型信息。不过,这还只是验证了服务的基本状态。接下来,我们尝试向模型发送一条真正的对话请求,看看它能否正常生成回答。

2.3 通过 API 接口调用模型

前面我们使用的 /health 和 /v1/models 接口,分别用于检查服务状态和获取模型信息。如果希望让模型回答问题,则需要使用 /v1/chat/completions 接口。

例如,我们可以继续使用 curl,向模型发送一个简单的问题:

curl http://127.0.0.1:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen3-0.6B",
    "messages": [
      {
        "role": "user",
        "content": "请解释什么是大模型服务化部署"
      }
    ],
    "max_tokens": 256,
    "chat_template_kwargs": {
      "enable_thinking": false
    }
  }'

这段命令看起来比之前稍微复杂一些,但实际上并不难理解。我们通过 curl 向模型服务发送了一个 HTTP 请求,并在请求中提供了模型名称、对话内容以及生成参数。其中,messages 用来描述发送给模型的对话消息,max_tokens 用于限制本次最多生成多少个 Token,而 enable_thinking 设置为 false,则表示本次关闭 Qwen3 的思考模式,让模型直接生成回答。

执行后,我们就能够在终端中看到模型返回的结果:

{
  "id": "chatcmpl-8b225d3bc6301345",
"object": "chat.completion",
"created": 1792569741,
"model": "Qwen3-0.6B",
"choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "“大模型服务化部署”是指将大型语言模型(LLM)等生成式模型从传统的“本地部署”向“服务化部署”转变,使其能够通过API接口提供服务,从而实现可扩展、可管理、可集成的部署模式。\n\n### 服务化部署的核心特点:\n\n1. **API接口**  \n   将大模型封装为RESTful API、GraphQL等标准接口,供外部调用,无需本地服务器。\n\n2. **微服务架构**  \n   将模型拆分为多个独立的服务(如推理服务、缓存服务、数据服务等),提升系统的灵活性和可维护性。\n\n3. **容器化与云原生**  \n   使用Docker、Kubernetes等技术,将模型部署在容器化环境中,支持弹性扩展和高可用性。\n\n4. **边缘计算与分布式部署**  \n   结合边缘计算技术,模型可以在本地节点运行,减少云端依赖,提高响应速度。\n\n5. **安全性与可扩展性**  \n   通过安全的API接口和细粒度的权限控制,确保模型的使用安全,同时支持大规模并发请求。\n\n### 服务化部署的优势:\n\n- **降低开发和运维成本**  \n-",
        "refusal": null,
        "annotations": null,
        "audio": null,
        "function_call": null,
        "reasoning": null
      },
      "logprobs": null,
      "finish_reason": "length",
      "stop_reason": null,
      "token_ids": null,
      "routed_experts": null
    }
  ],
"service_tier": null,
"system_fingerprint": "vllm-0.31.0-1153e6d8",
"usage": {
    "prompt_tokens": 20,
    "total_tokens": 276,
    "completion_tokens": 256,
    "prompt_tokens_details": null,
    "completion_tokens_details": null
  },
"prompt_logprobs": null,
"prompt_token_ids": null,
"prompt_text": null,
"kv_transfer_params": null,
"ec_transfer_params": null,
"metrics": null
}

可以看到,模型已经根据我们提供的问题生成了相应的回答,并通过 JSON 格式将结果返回给客户端。这里可以重点关注 choices 字段,其中的 message.content 就是模型实际生成的回答,而 usage 则记录了本次请求消耗的 Token 数量。

另外,本次返回结果中的 finish_reason 为 length,表示模型生成的内容达到了我们设置的 max_tokens=256 上限,因此回答被截断了。如果希望模型输出更加完整的解释,可以适当提高这个参数。

通过这次测试,我们已经完成了一次完整的 API 调用。与之前直接在 Python 程序中加载模型不同,现在模型始终运行在 vLLM 服务中,而我们只需要向指定接口发送请求,就能够获得模型的回答。

图解 vLLM 服务化部署:从 API 调用到远程访问图7

2.4 通过 OpenAI SDK 调用模型

虽然使用 curl 可以方便地测试 API 接口,但在实际开发应用时,我们通常还是会使用 Python 来完成模型调用。

很方便的是 vLLM 提供了与 OpenAI API 兼容的接口。这意味着,我们不仅可以直接发送 HTTP 请求,还可以使用熟悉的 OpenAI Python SDK 来调用自己部署的模型,而不必重新编写复杂的接口请求逻辑。

我们可以在之前创建的 vllm-demo 文件夹中,新建一个名为 openai_chat.py 的 Python 文件。如果当前环境尚未安装 OpenAI SDK,可以先执行 pip install openai。随后,将以下代码写入文件:

from openai import OpenAI

client = OpenAI(
    base_url="http://127.0.0.1:8000/v1",
    api_key="EMPTY",
)

response = client.chat.completions.create(
    model="Qwen3-0.6B",
    messages=[
        {"role": "user", "content": "用两句话介绍 vLLM"}
    ],
    max_tokens=256,
    extra_body={
        "chat_template_kwargs": {"enable_thinking": False}
    },
)

print(response.choices[0].message.content)

这段代码与平时调用 OpenAI API 的方式基本一致。我们首先创建一个 OpenAI 客户端,只不过这里的 base_url 不再指向 OpenAI 官方服务,而是指向刚才在云服务器上启动的 vLLM 接口。

图解 vLLM 服务化部署:从 API 调用到远程访问图8

由于我们目前没有为 vLLM 服务配置 API 密钥验证,因此这里暂时使用 EMPTY 作为占位值。它并不是真正的访问密钥,主要是为了满足 OpenAI SDK 创建客户端时的参数要求。后续我们可以通过设置参数的方式设置密钥。

接下来,调用 client.chat.completions.create() 方法,指定模型名称与对话内容,就能够向 vLLM 发送请求。最后,通过 response.choices[0].message.content 提取模型生成的文本,而不必手动处理完整的 JSON 响应。

完成代码编写后,我们打开终端,进入对应的虚拟环境和项目目录,再运行刚才创建的 Python 文件:

source /root/venvs/vllm/bin/activate
cd /root/vllm-demo
python openai_chat.py

如果服务正常运行,我们就能够直接在终端中看到模型生成的回答。

图解 vLLM 服务化部署:从 API 调用到远程访问图9

至此,我们不仅成功启动了 vLLM 推理服务,还分别通过 curl 和 OpenAI SDK 完成了模型调用。整个过程中,模型只需要在服务器上加载一次,后续请求都可以通过 API 接口发送给正在运行的服务,而不需要每次都重新加载模型。

不过,细心的同学可能已经注意到,目前无论是 curl 还是 Python 代码,我们使用的服务地址都是 127.0.0.1:8000。这里的 127.0.0.1 实际上指向的是服务器自身,因此当前的接口还只能在服务器内部访问。如果希望在自己的电脑上,甚至让其他应用程序通过网络访问这个模型,我们又应该如何配置呢? 这就需要进一步解决服务的网络访问问题,接下来我们可以进一步来看看如何实现。

3. 本地程序接入

在前面的实验中,我们已经成功启动了 vLLM 推理服务,并通过 curl 和 OpenAI SDK 完成了模型调用。不过,到目前为止,这些操作都是在云端服务器内部完成的。既然我们已经将模型部署成了 API 服务,那么能否直接在自己的电脑上调用它呢?答案当然是可以的。接下来,我们就尝试两种不同的访问方式:第一种是通过 SSH 连接,在本地访问云服务器中的模型;第二种则是通过公网 IP,让其他设备也能够直接调用这个模型。

3.1 通过 SSH 在本地访问模型

在上一节课中,我们已经使用 VS Code 通过 SSH 连接到了云端服务器。实际上,除了远程管理服务器以外,我们还可以借助 SSH 的端口转发功能,将云服务器上的模型服务映射到自己的电脑上。

还记得前面启动 vLLM 时设置的 --host 127.0.0.1 吗?这个地址表示服务只监听服务器自身的本地网络接口,正常情况下,其他电脑无法直接通过网络访问。

不过,如果我们通过 SSH 建立一条端口转发通道,就可以将云服务器的 8000 端口映射到自己电脑的某个端口。这样一来,即使模型实际运行在云服务器上,我们也可以使用本地地址访问它。

图解 vLLM 服务化部署:从 API 调用到远程访问图10

对于使用 VS Code Remote-SSH 的同学来说,这个过程非常简单。VS Code 本身就支持端口转发,有时还会自动检测并转发远程服务的端口。我们可以在 VS Code 的“端口(Ports)”面板中查看转发情况,如果没有自动转发,只需要手动添加远程服务器的 8000 端口即可。

完成端口转发后,我们可以打开自己电脑上的终端,例如 Windows 的 PowerShell 或 macOS 的终端,输入:

curl http://127.0.0.1:8000/v1/models

如果端口转发成功,并且本地映射使用的是 8000 端口,就能够得到与云服务器上相同的模型信息。

图解 vLLM 服务化部署:从 API 调用到远程访问图11

如果 VS Code 分配了其他本地端口,则需要将命令中的 8000 修改为实际转发的端口。当然,即使不使用 VS Code,我们也可以直接通过 SSH 命令建立这样的连接。例如,在本地终端执行:

ssh -N -L 8000:127.0.0.1:8000 root@YOUR_SERVER_IP

这里需要将 YOUR_SERVER_IP 替换为自己的云服务器公网 IP,并使用之前配置的 SSH 身份验证方式。如果采用密钥登录,还需要按照实际情况指定私钥文件。

其中,-L 表示建立本地端口转发,将自己电脑的 8000 端口连接到云服务器的 127.0.0.1:8000,而 -N 表示只建立 SSH 连接,不执行远程命令。保持这条 SSH 连接运行,我们就可以在本地的另一个终端访问模型服务。

由此可见,我们并不需要将模型下载到自己的电脑上,也不需要在本地安装 vLLM,只需要建立一条网络连接,就能够调用运行在云服务器上的模型。

不过,这种方式仍然依赖 SSH 连接。如果希望把模型接口提供给其他同学,甚至让不同设备和应用程序直接通过网络访问,每个使用者都建立 SSH 连接显然不够方便。因此,接下来我们进一步尝试通过公网 IP 访问模型服务。

3.2 通过公网 IP 访问模型

3.2.1 重启服务

要让其他设备直接访问云服务器上的模型,我们首先需要调整 vLLM 服务的监听地址。之前启动服务时,我们将 --host 设置为 127.0.0.1,这意味着服务只接受服务器本机的连接请求。如果希望让服务能够接收来自外部网络的请求,就需要将监听地址修改为 0.0.0.0。

首先,回到之前启动 vLLM 服务的终端,使用 Ctrl + C 停止当前运行的服务,然后重新执行启动命令:

source /root/venvs/vllm/bin/activate

vllm serve /root/models/Qwen3-0.6B \
  --served-model-name Qwen3-0.6B \
  --host 0.0.0.0 \
  --port 8000 \
  --dtype half \
  --max-model-len 4096 \
  --max-num-seqs 8 \
  --gpu-memory-utilization 0.5 \
  --enforce-eager

与之前相比,这条命令只修改了一个关键参数:将 --host 127.0.0.1 改为了 --host 0.0.0.0。这里的 0.0.0.0 表示让 vLLM 监听服务器上所有可用的 IPv4 网络接口,而不再局限于本地回环地址。不过,这并不代表外部设备已经能够直接访问模型。因为对于云服务器而言,除了程序本身的监听地址,还需要考虑云平台的网络访问控制。

在百度智能云中,我们可以通过安全组来管理外部网络能够访问服务器的哪些端口。因此,接下来还需要为 vLLM 使用的 8000 端口配置对应的访问规则。

图解 vLLM 服务化部署:从 API 调用到远程访问图12

3.2.2 配置云服务器安全组

首先,打开百度智能云控制台,找到之前创建的云服务器实例,并查看它关联的安全组。

图解 vLLM 服务化部署:从 API 调用到远程访问图13

进入安全组管理页面后,选择当前实例实际关联的安全组。如果之前使用的是默认安全组,就可以直接进入对应的默认安全组进行配置。

图解 vLLM 服务化部署:从 API 调用到远程访问图14

接下来,找到安全组的入站规则,点击“添加规则”,为模型服务开放对应端口。

图解 vLLM 服务化部署:从 API 调用到远程访问图15

本次实验需要配置的主要内容如下:

  • 协议: TCP
  • 端口: 8000
  • 来源: 建议填写自己电脑的公网 IP,并指定 /32,仅允许该地址访问。如果需要让多个同学访问,可以分别添加对应来源规则。
  • 备注: 可以填写“vLLM 模型接口”,方便后续识别和管理。
图解 vLLM 服务化部署:从 API 调用到远程访问图16

需要特别说明的是,有些同学可能会直接将来源设置为 all,表示允许任意公网地址连接这个端口。虽然这样方便测试,但也意味着任何能够访问服务器公网 IP 的设备,都可能尝试调用我们的模型。由于当前实验还没有配置完善的身份验证和访问控制,因此不建议长期向所有公网地址开放接口。所以在实验结束应该及时删除或收紧对应的安全组规则。

3.2.3 通过公网 IP 调用模型

完成安全组配置后,如果服务器已经绑定并正确配置了公网 IP,我们就可以尝试从其他电脑访问模型了。首先,在百度智能云控制台中找到当前实例的公网 IP,然后在另一台电脑的终端输入:

curl http://120.48.157.26:8000/v1/models

同样,需要将 YOUR_SERVER_IP 替换为实际的公网 IP 地址。如果服务运行正常,并且安全组允许当前设备访问,就可以看到与之前相同的 JSON 返回结果,其中包含我们部署的 Qwen3-0.6B 模型。

图解 vLLM 服务化部署:从 API 调用到远程访问图17

不过,查询模型列表只是验证了接口的可访问性。实际上,我们还可以像之前一样,通过 /v1/chat/completions 接口向模型发送问题并获得回答。对于 Python 开发而言,甚至不需要修改之前的主要调用逻辑,只需要将 OpenAI SDK 中的 base_url 改成云服务器对应的公网地址即可:

from openai import OpenAI

client = OpenAI(
    base_url="http://YOUR_SERVER_IP:8000/v1",
    api_key="EMPTY",
)

response = client.chat.completions.create(
    model="Qwen3-0.6B",
    messages=[
        {"role": "user", "content": "用两句话介绍 vLLM"}
    ],
    max_tokens=256,
    extra_body={
        "chat_template_kwargs": {"enable_thinking": False}
    },
)

print(response.choices[0].message.content)

这里的 EMPTY 仍然只是占位值,并不提供实际的安全保护。因此,上面的代码只适用于已经通过网络访问规则限制来源的实验环境。

不过如果准备将这个模型服务长期提供给其他用户,还需要进一步配置 HTTPS、身份验证和访问限制,例如通过反向代理统一管理外部请求,而不能简单地把未经保护的 vLLM 接口直接暴露在公网上。

4. 总结

至此,我们已经分别通过 SSH 端口转发和公网 IP 两种方式,完成了对云端模型服务的远程访问。回顾整个过程,其实模型本身始终运行在云服务器上,并没有发生变化。我们只是在不同的访问场景下,调整了客户端与模型服务之间的连接方式。这也正是大模型服务化部署的重要意义:模型只需要部署在服务器上,其他程序就可以通过统一的 API 接口调用它,而不必在每台设备上重新安装、加载和运行模型。

现在,我们已经能够像调用第三方大模型 API 一样,调用自己部署的 Qwen3-0.6B 模型了。而有了这个基础,后续无论是开发聊天应用、搭建知识库,还是将模型接入智能体系统,都可以直接使用这个 API 服务来完成模型推理。

-- 完 --


课程过往内容:
1. 
2. 
3. 

关注机智流并加入 AI 技术交流群,不仅能和来自大厂名校的 AI 开发者、爱好者一起进行技术交流,同时还有
与、、、、等。
在「机智流」公众号后台回复下方标红内容即可加入对应群聊:
  • cc | 大模型技术交流群
  • hf | HuggingFace 高赞论文分享群
  • lc|LangChain 技术交流群
  • code | AI Coding 交流群
  • 具身 | 具身智能交流群
  • 硬件 | AI 硬件交流群
  • 推理 | AI 推理框架交流群
  • 智能体 | Agent 技术交流群

关于科技区角:国内科技展会垂直内容策划服务商,提供从论坛内容全案策划、会展市场化IP打造到精准专业观众一站式邀约服务,以产业内容吸引高质量B端人群,打通展会从议题设计、演讲嘉宾邀约、宣传预热、精准邀观到供需对接全链路。
声明:内容取材于网络,仅代表作者观点,如有内容违规问题,请联系处理。
more
iPhone Air 2信息曝光 续航和影像短板或将补齐
AI算力持续扩张,高端PCB凭什么成为关键一环?|算力筑基·板载未来论坛圆满落幕
腾讯研究院AI速递 20261030
AI王座,一夜两度易主!神秘模型Obsidian 3泄露
Instagram掌门人预判AI焦虑将加剧 平台拒绝对生成内容“一刀切”
部署态加速,智元要打通物理AI全链路
OpenAI发钱了?每月最高500美元API额度等你领
TRAE 开发者个人助理,打响 AI Coding 的下半场
EMNLP 2026 Main | AI 群聊怎样多元化?佐治亚理工和麻省理工提出 MASCOT
以未来几何推演物理交互,X-Era AI拓元智慧开源原生4D世界动作模型E0.5,真机大幅超越π0.5
Copyright © 2025-成都区角科技有限公司
蜀ICP备2025143415号-1
  
川公网安备51015602001305号