vllm的官网Welcome to vLLM — vLLM
1. 拉取 VLLM Docker 镜像
首先需要从 Docker Hub 拉取 VLLM 的最新镜像。运行以下命令:
bash复制
docker pull vllm/vllm-openai:latest
-
说明:
-
docker pull
是 Docker 的命令,用于从远程仓库拉取镜像。 -
vllm/vllm-openai:latest
是 VLLM 提供的最新版本的镜像。
-
2. 运行 Docker 容器
运行以下命令以启动 VLLM 容器,并加载本地模型。此命令会将本地模型挂载到容器中,并设置相关参数。
bash复制
docker run --runtime nvidia --gpus all \
-v /mnt/d/Software/model:/root/model \ # 将本地模型目录挂载到容器的 /root/model 路径
-p 8000:8000 \ # 将容器的 8000 端口映射到宿主机的 8000 端口
--ipc=host \ # 共享主机的 IPC 命名空间
vllm/vllm-openai:latest \ # 使用刚刚拉取的最新 VLLM OpenAI 镜像
--model /root/model/QwQ-32B-AWQ \ # 指定加载的模型路径
--tensor-parallel-size 2 # 设置张量并行大小为 2
-
说明:
-
--runtime nvidia
和--gpus all
确保容器可以使用 NVIDIA GPU 加速。 -
-v
参数用于将本地目录挂载到容器内部,方便加载本地模型文件。 -
-p
参数将容器的端口映射到宿主机,方便从外部访问。 -
--ipc=host
共享主机的 IPC 命名空间,有助于提高性能。 -
--model
和--tensor-parallel-size
是 VLLM 的启动参数,用于指定加载的模型路径和张量并行大小。
-
3. 检查模型是否加载成功
使用 curl
命令向容器的 API 接口发送请求,检查模型是否加载成功。以下是命令及其说明:
bash复制
curl -X GET http://localhost:8000/v1/models
-
说明:
-
http://localhost:8000/v1/models
是 VLLM 提供的 API 接口,用于获取已加载的模型信息。 -
如果模型加载成功,返回的 JSON 数据中会包含模型的详细信息,包括模型的 ID。
-
4. 获取模型 ID
从上一步的返回结果中提取模型 ID。返回的 JSON 数据可能如下:
JSON复制
{
"object": "list",
"data": [{
"id": "/root/model/QwQ-32B-AWQ",
"object": "model",
"created": 1743648334,
"owned_by": "vllm",
"root": "/root/model/QwQ-32B-AWQ",
"parent": null,
"max_model_len": 40960,
"permission": [{
"id": "modelperm-a3535f91c62d42deasfsff338ebbe17dc",
"object": "model_permission",
"created": 1743648334,
"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
}]
}]
}
-
说明:
-
模型 ID 是
"id": "QwQ-32B-AWQ"
中的值。确保记录下这个 ID,后续对话中会用到。
-
5. 使用 Python 脚本与模型进行对话
以下是完整的 Python 脚本,用于与模型进行对话。脚本使用 requests
库发送 HTTP 请求,并维持对话上下文。
import requests
import json
# 服务器地址
url = "http://localhost:8000/v1/chat/completions"
# 维持对话上下文的消息列表
messages = [
{"role": "system", "content": "你是一个有帮助的AI助手。"}
]
def send_message(user_input):
# 添加用户消息到消息列表
messages.append({"role": "user", "content": user_input})
# 请求数据
payload = {
"model": "/root/model/QwQ-32B-AWQ", # 替换为从 /v1/models 返回的模型 ID
"messages": messages,
"max_tokens": 2048 # 可以根据需要增加 max_tokens 来获得更长的回答
}
# 发送请求
response = requests.post(url, headers={"Content-Type": "application/json"}, data=json.dumps(payload))
# 获取并输出模型的回答
if response.status_code == 200:
assistant_reply = response.json()['choices'][0]['message']['content']
print(f"AI助手: {assistant_reply}")
# 将助手的回复添加到消息列表
messages.append({"role": "assistant", "content": assistant_reply})
else:
print("请求失败,状态码:", response.status_code)
# 与AI助手开始对话
while True:
# 获取用户输入
user_input = input("你: ")
# 退出条件
if user_input.lower() == '退出':
print("结束对话")
break
# 发送用户输入并获取助手回复
send_message(user_input)
-
说明:
-
url
是 VLLM 提供的对话接口地址。 -
messages
列表用于维持对话上下文,包括系统角色的初始提示。 -
send_message
函数负责将用户输入添加到消息列表,构造请求数据并发送 POST 请求。 -
如果请求成功,从返回的 JSON 数据中提取模型的回答,并将其添加到消息列表中,以便后续对话。
-
用户可以通过输入内容与模型进行交互,输入“退出”时结束对话。
-
运行脚本
-
确保 Python 环境已安装
requests
库。如果未安装,可以运行以下命令安装:bash复制
pip install requests
-
将上述 Python 脚本保存为一个
.py
文件,例如chat_with_vllm.py
。 -
在终端中运行脚本:
bash复制
python chat_with_vllm.py
-
按照提示输入内容与模型进行对话。
通过以上步骤,你可以从拉取镜像开始,完整地运行 VLLM 容器、加载本地模型,并使用 Python 脚本与模型进行对话。