vllm推理服务

vllm推理服务

写这篇博客的原因是我经常用的是vllm离线批量推理,不用vllm的推理服务。以此来记录下启动vllm推理服务的步骤:

1. 启动vllm推理服务

使用vllm在我们指定的主机和端口上启动一个API服务器,负责用我指定的模型来提供推理服务。

1
python -m vllm.entrypoints.openai.api_server --model /opt/data/private/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B/ --host 0.0.0.0 --port 8030 --gpu-memory-utilization 0.7 --max-model-len 8192 --tensor-parallel-size 2 --use-v2-block-manage --max-num-seqs 2 --disable-frontend-multiprocessing --enforce-eage
名词扫盲:
1. 启动API服务器:一个可以处理请求的程序。有人丢一个问题进来,服务会算出一个答案,把答案传回去。这里的服务就是我们启动的vllm的程序
2. 设定模型路径:/opt/data/parivate/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B/
3. 设置网络接口:--host 0.0.0.0表示可以这个服务可以接受任何外部请求,0.0.0.0不是一个真实可访问的地址,而是通配符,表示可以接受来自任意IP的请求。包括来自本机访问的(比如IP为localhost或者127.0.0.1),也包括别人通过局域网来访问这台机器的请求(IP为他实际的局域网IP,比如192.168.1.100)。
4. 设置端口号:8030。一台电脑上可以运行很多个服务,这个服务所在的房间号就是8030,避免迷路。

2. 发送请求给vllm推理服务

我们需要“发送一个请求”给这个服务器,让他运行模型,返回答案。这里有不同的工具可以来完成

用curl这种命令行工具来发送网络请求

1
2
3
4
5
6
7
8
9
10
11
curl http://localhost:8030/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "/opt/data/private/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B/",
"messages": [{"role": "user", "content": "你好,介绍一下你自己"}],
"temperature": 0.7
}'
curl:这是发送请求的工具。
http://localhost:8030/v1/chat/completions:这是你刚才启动的 API 服务器的地址,表示我们要访问它的 Chat Completions 接口。
-H "Content-Type: application/json":告诉服务器我们要发的是 JSON 格式的数据。
-d '{ ... }':这是我们要发送的 JSON 内容。意思是:用这个模型(名字需要是模型路径),我作为用户输入了一句话“你好,介绍一下你自己”,请你回复一下。

用Python程序来发送网络请求

如果你不习惯用 curl,推荐你直接用 Python 来写一个脚本:
1
2
3
4
5
6
7
8
9
10
11
12
13
from openai import OpenAI

client = OpenAI(api_key="empty", base_url="http://localhost:8030/v1")

response = client.chat.completions.create(
model="/opt/data/private/models/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B/",
messages=[
{"role": "user", "content": "Hello"},
],
stream=False
)

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

忽然发现,这个和官方API的调用方式很类似诶,对比一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Please install OpenAI SDK first: `pip3 install openai`

from openai import OpenAI

client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")

response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": "You are a helpful assistant"},
{"role": "user", "content": "Hello"},
],
stream=False
)

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

这其实是vLLM特意做的兼容设计!也就是说——
你在本地部署的vLLM模型服务在接口上“伪装”成了OpenAI提供的API服务。只要设计号base_url和api_key,就能无缝调用本地模型!

通过本文的介绍,你已经掌握了如何使用 vLLM 在指定主机和端口上启动一个推理 API 服务,并通过 curl 或 Python 脚本与其交互。这个流程可以作为部署本地大模型服务的基础模板。万一哪天忘了,也可以快速查看~


vllm推理服务
https://abigail61.github.io/2025/03/29/vllm推理服务/
作者
Yajing Luo
发布于
2025年3月29日
许可协议