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
|
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 脚本与其交互。这个流程可以作为部署本地大模型服务的基础模板。万一哪天忘了,也可以快速查看~