windows上用vllm docker容器部署大语言模型

本文章已经生成可运行项目,

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 数据中提取模型的回答,并将其添加到消息列表中,以便后续对话。

    • 用户可以通过输入内容与模型进行交互,输入“退出”时结束对话。

运行脚本

  1. 确保 Python 环境已安装 requests 库。如果未安装,可以运行以下命令安装:

    bash复制

    pip install requests
  2. 将上述 Python 脚本保存为一个 .py 文件,例如 chat_with_vllm.py

  3. 在终端中运行脚本:

    bash复制

    python chat_with_vllm.py
  4. 按照提示输入内容与模型进行对话。

通过以上步骤,你可以从拉取镜像开始,完整地运行 VLLM 容器、加载本地模型,并使用 Python 脚本与模型进行对话。

本文章已经生成可运行项目
<think>我们正在讨论在Docker中使用vLLM部署大语言模型。根据用户的问题和提供的引用[^1],用户希望了解如何使用vLLMDocker部署大语言模型,特别是参考了通义千问Qwen的部署示例。引用[^1]中给出了一个具体的命令:dockerrun--gpusall-it--namevllm-qwen-v/home/rkty/qwen:/workspace/qwen-d-p9997:8000--ipc=hostpython:3.10但是,这个命令只是运行了一个Python3.10的基础镜像,并没有直接使用vLLM镜像。因此,我们需要调整步骤,以使用vLLM部署大模型。实际上,vLLM提供了一个预构建的Docker镜像,我们可以直接使用。以下是使用vLLM官方Docker镜像部署大模型的步骤:步骤1:拉取vLLMDocker镜像我们可以从DockerHub上拉取vLLM的官方镜像,该镜像已经包含了vLLM及其依赖。步骤2:运行容器,并挂载模型目录(如果需要)如果模型在本地,可以将模型目录挂载到容器中。另外,需要映射端口(vLLM默认使用8000端口)和设置GPU支持。步骤3:在容器内启动API服务器运行容器后,在容器内启动vLLM的API服务器,指定要加载的模型。具体步骤:1.拉取vLLMDocker镜像:dockerpullvllm/vllm-openai:latest2.运行容器(以Qwen-7B-Chat模型为例,假设模型已经下载到本地路径`/path/to/qwen-7b-chat`):dockerrun--runtimenvidia--gpusall\-v/path/to/qwen-7b-chat:/app/model\-p8000:8000\--ipc=host\vllm/vllm-openai:latest\--model/app/model\--tokenizer/app/model#如果tokenizer路径与模型路径相同注意:上面的命令中,我们使用了`vllm/vllm-openai:latest`镜像,该镜像提供了OpenAI兼容的API服务。参数说明:--runtimenvidia:使用NVIDIA容器运行时(如果使用nvidia-docker2,可以直接用`--gpusall`,而`--runtimenvidia`可能不需要)-v:将本地的模型目录挂载到容器内的/app/model目录-p:将容器的8000端口映射到主机的8000端口--ipc=host:使用主机的IPC命名空间,有助于提高GPU内存共享性能在容器启动时,它会自动运行vLLM的API服务器,并加载指定的模型。3.测试API:可以使用curl命令测试:curlhttp://localhost:8000/v1/completions\-H"Content-Type:application/json"\-d'{"model":"/app/model","prompt":"SanFranciscoisa","max_tokens":7,"temperature":0}'另外,如果模型是HuggingFaceHub上的,也可以直接指定模型名称(而不需要挂载本地目录):dockerrun--gpusall\-p8000:8000\--ipc=host\vllm/vllm-openai:latest\--modelQwen/Qwen-7B-Chat注意:使用Hub上的模型需要容器能够访问互联网。注意事项:-确保本地有足够的GPU内存来加载模型(例如7B模型可能需要至少15GB的GPU内存)。-如果需要使用其他参数(如tensor并行等),可以在运行容器时添加vLLM的启动参数。关于vLLM的更多部署选项,可以参考官方文档:https://vllm.readthedocs.io/根据引用[^1]中的示例,用户可能已经下载了Qwen模型到本地,因此我们使用挂载本地目录的方式。因此,针对用户的问题,我们可以给出以下步骤:1.下载模型:首先确保在本地下载了需要部署大语言模型(例如Qwen-7B-Chat)。2.使用上述docker命令运行容器。如果用户想要使用自己构建的镜像(例如使用Python基础镜像自己安装vLLM),则步骤会复杂一些,但引用[^1]中给出的命令就是这种方式。不过,使用官方镜像更为简便。因此,我们推荐使用vLLM官方镜像。下面,我们按照用户的要求,生成相关问题:</think>### 在 Docker 中使用 vLLM 镜像部署大语言模型 以下是使用 vLLMDocker部署大语言模型的完整步骤(以通义千问 Qwen 为例): #### 1. **准备 Docker 环境** ```bash # 安装 nvidia-container-toolkit (确保 GPU 支持) sudo apt-get install nvidia-container-toolkit sudo systemctl restart docker ``` #### 2. **拉取 vLLM 镜像并运行容器** ```bash docker run --gpus all -it --name vllm-qwen \ -v /本地/模型路径:/workspace/model \ # 挂载模型目录 -p 9997:8000 \ # 暴露 API 端口 --ipc=host \ # 共享内存优化 vllm/vllm-openai:latest \ # 官方镜像 --model /workspace/model \ # 模型路径 --tensor-parallel-size 2 # GPU 并行数 ``` **参数说明**: - `--gpus all`:启用所有 GPU - `-v`:将本地模型目录挂载到容器内 - `--ipc=host`:提升大模型加载性能[^1] - `vllm/vllm-openai`:官方预构建镜像 #### 3. **验证部署** ```bash # 发送测试请求 curl http://localhost:9997/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "/workspace/model", "prompt": "你好,请介绍一下自己", "max_tokens": 100 }' ``` #### 4. **高级配置** ```dockerfile # 自定义 Dockerfile 示例 FROM vllm/vllm-openai:latest COPY qwen-7b /app/model # 复制模型文件 CMD ["python", "-m", "vllm.entrypoints.openai.api_server", \ "--model", "/app/model", "--port", "8000"] ``` ### 常见问题解决 1. **GPU 内存不足**: - 添加 `--quantization awq` 启用 4bit 量化 - 减少 `--tensor-parallel-size` 值 2. **模型加载失败**: - 确认挂载路径正确 - 检查模型文件完整性 (SHA256) 3. **API 响应慢**: - 添加 `--block-size 16` 优化内存管理 - 启用 `--swap-space 8` 使用 SSD 缓存 > 提示:vLLM 官方镜像已预装 CUDA 12.1 和 PyTorch 2.2,支持 HuggingFace 格式模型[^1]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值