提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


环境

Windows系统下的Linux子系统(WSL2)。

目的

本文旨在使用vLLM官方提供的Openai镜像部署下载在WSL2中的开源模型,暴露一个 OpenAI 兼容的 API 接口,并使用另一个客户端容器访问。

一、拉取vLLM官方的Openai镜像

在wsl中pull官方的镜像。

docker pull vllm/vllm-openai:latest


无法拉取属于网络问题,自行解决。

二、下载模型

1.使用python虚拟环境

也可以使用conda环境。

python3 -m venv qwen2.5-coder
source qwen2.5-coder/bin/activate

2.安装依赖库

先升级pip。

python -m pip install --upgrade pip


安装两个下载所需的库(本文从魔搭社区下载模型,也可以从HuggingFace下载)。

pip install modelscope==1.20.0
pip install transformers==4.46.2


3.下载模型

python -c "
from modelscope import snapshot_download
snapshot_download('Qwen/Qwen2.5-Coder-1.5B-Instruct', local_dir='/home/devcontainers/models/Qwen2.5-Coder-1.5B-Instruct')
"


中间会因为缺少目录而报错软链接构建失败,但并不影响模型下载,给它创建一个目录就提示成功创建软链接。
至此,模型就下载完成。

三、在vLLM镜像上加载模型

docker run --gpus all \
  --name vllm-qwen \
  -v /home/devcontainers/models/Qwen2.5-Coder-1.5B-Instruct:/model \
  -p 8000:8000 \
  --shm-size=16g \
  vllm/vllm-openai \
  --model /model \
  --tokenizer /model \
  --dtype auto \
  --max-model-len 2048 \
  --gpu-memory-utilization 0.95 \
  --served-model-name Qwen2.5-Coder-1.5B-Instruct

参数可自行更改,有些参数不加也有默认值,详细可见[参数文档]

创建容器后,需要过一两分钟加载模型,当出现以下提示即为加载成功。

当然,因为硬件和模型所需不匹配的原因可能会多次失败,这时候就需要调整参数,甚至更换参数量更小的模型。
至此,提供服务的容器就启动完成了,可以在bash中或者docker desktop中查看后端日志。

四、外部容器访问

到这步,如果前面操作顺利,那从wsl中已经可以访问模型了。

但在其它容器中访问会提示HTTP连接失败。

因为容器中的 localhost 是指容器自身的网络栈,并不是指向 vLLM 服务所在的容器,所以请求无法路由到目标。
可以将localhost更改为容器的ip地址,使用命令ip addr show eth0查看ip,再将curl中的地址更改。
这里使用桥接Docker网络的方法。
创建Docker网络:

docker network create llmnet

关闭容器。
加入网络:

docker network connect llmnet vllm-qwen
docker network connect llmnet container_name

启动容器。
验证连接:
在container_name容器中执行curl。

此时提供服务的后端容器日志可以看到。

测试API调用
客户端测试代码:

from openai import OpenAI
    client = OpenAI(
        base_url="http://vllm-qwen:8000/v1",
        api_key="EMPYT", # 随便填写,只是为了通过接口参数校验
    )
    completion = client.chat.completions.create(
    model="Qwen2.5-Coder-1.5B-Instruct",
    messages=[
        {"role": "user", "content": "C语言输出斐波那契数列的第98980个数字"}
    ]
    )
    print(completion.choices[0].message)

客户端请求并得到输出:

服务端响应:

参考

Github-Qwen2.5-7B-Instruct vLLM 部署调用
vLLM官方Docs使用参数介绍

Logo

免费领 150 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐