docker + vllm 快速部署通义千问3(Qwen3), 并通过代码控制有无思维链
开始之前
确认准备好以下环境
- 一张显存 >= 12g 的显卡
(本文以Qwen3-4B的部署为例) - 已安装好docker, 以及nvidia-docker
安装方法 —> 手把手教你离线安装 nvidia-docker以及docker
- 已安装号驱动,并且cuda版本>=12.4
下载模型
从modelscope上下载Qwen3-4B 至本地 (点击此处前往下载),并且将模型保存至目标目录的models
文件夹中。
下载完成之后的执行ls -lah
文件列表如下所示
总计 7.6G
drwx---rwx 2 break break 4.0K 5月 13 17:02 .
drwxrwxr-x 9 break break 4.0K 5月 13 14:09 ..
-rw-rw-r-- 1 break break 726 5月 13 14:03 config.json
-rw-rw-r-- 1 break break 239 5月 13 14:03 generation_config.json
-rw-rw-r-- 1 break break 1.6M 5月 13 14:03 merges.txt
-rw-rw-r-- 1 break break 3.7G 5月 13 14:05 model-00001-of-00003.safetensors
-rw-rw-r-- 1 break break 3.8G 5月 13 14:07 model-00002-of-00003.safetensors
-rw-rw-r-- 1 break break 96M 5月 13 14:07 model-00003-of-00003.safetensors
-rw-rw-r-- 1 break break 33K 5月 13 14:07 model.safetensors.index.json
-rw-rw-r-- 1 break break 17K 5月 13 14:07 README.md
-rw-rw-r-- 1 break break 9.5K 5月 13 14:07 tokenizer_config.json
-rw-rw-r-- 1 break break 11M 5月 13 14:07 tokenizer.json
-rw-rw-r-- 1 break break 2.7M 5月 13 14:07 vocab.json
部署模型
为了支持Qwen3(千问3)请确保vllm的版本号大于等于 0.8.5, 本文使用的版本是v0.8.5.post1
。(vllm介绍可以参考往期)
sudo docker pull vllm/vllm-openai:v0.8.5.post1
为了避免写一堆的命令,我们采用docker compose的方式进行部署, 部署文件如下:
services:
vllm:
container_name: vllm
restart: no
image: vllm/vllm-openai:v0.8.5.post1
ipc: host
volumes:
- ./models:/models
command: ["--model", "/models/Qwen3-4B", "--served-model-name", "qwen3-4b", "--gpu-memory-utilization", "0.90", "--max-model-len", "8192"]
ports:
- 8000:8000
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
复制该文件内容,并保存为docker-compose.yaml
启动参数解释
–model 模型的路径,vllm会尝试本地有没有这个文件夹以及HF上有没有对应的repo,如果本地没有并且HF上有对应的repo则会自动下载模型, 在本文中我们已经将模型下载至本地并通过目录映射进去
–served-model-name 模型的名称,api调用的时候需要保持一致
–gpu-memory-utilization 占用显存的上限,此参数会影响并发和模型上下文长度
–max-model-len 模型的上下文长度,本文设置为8192, 若调高长度注意记得增加gpu-memory-utilization数值
执行命令, 启动vllm
注意: 新版的vllm由于采用了全新的引擎以及算法,启动速度相较于旧版会有所增长。
sudo docker compose up -d
接入API并控制有无思维链
Qwen3家族全新提供了一个参数enable_thinking
用于控制有无思维链。
Python调用示例如下:
记得
pip install openai
有思维链
from openai import OpenAI
client = OpenAI(
api_key="NOT_NEED",
base_url="http://127.0.0.1:8000/v1",
)
response = client.chat.completions.create(
model='qwen3-4b',
messages=[
{
"role": "user",
"content": "你是谁",
},
],
stream=False,
extra_body={"chat_template_kwargs": {"enable_thinking": True}},
)
print(response.choices[0].message.content)
输出如下所示:
好的,用户问“你是谁”,我需要先确定他们想了解什么。可能他们刚接触我,想确认我的身份。首先,我应该明确自己的身份,即通义千问,阿里巴巴集团旗下的AI助手。接下来,要说明我的功能,比如回答 问题、创作内容等,让用户知道我能提供什么帮助。 用户可能没有技术背景,所以语言要简单易懂,避免使用专业术语。同时,要突出我的优势,比如多语言支持、广泛的知识库,这样用户会觉得可靠。另外,可能需要询问用户的具体需求,以便更好地提供帮 助,比如他们需要什么类型的信息或服务。 还要注意用户可能的深层需求,比如他们可能在寻找一个可靠的助手来解决某个问题,或者需要创作内容。因此,在回答时要保持友好和开放,鼓励用户提出具体问题,这样能更有效地满足他们的需求。最后 ,确保回答结构清晰,信息准确,让用户一目了然。
我是通义千问,是阿里巴巴集团旗下的通义实验室研发的大型语言模型。我能够回答问题、创作内容、提供信息和帮助用户完成各种任务。我的知识库涵盖了广泛的主题,可以支持多语言交流,并且能够根据
无思维链
from openai import OpenAI
client = OpenAI(
api_key="NOT_NEED",
base_url="http://127.0.0.1:8000/v1",
)
response = client.chat.completions.create(
model='qwen3-4b',
messages=[
{
"role": "user",
"content": "你是谁",
},
],
stream=False,
extra_body={"chat_template_kwargs": {"enable_thinking": False}},
)
print(response.choices[0].message.content)
无思维链输出如下所示,响应速度明显变快
我是通义千问,阿里巴巴集团旗下的通义实验室研发的大型语言模型。我能够帮助您解答各种问题、创作文本、进行编程、提供学习建议等。无论您需要什么帮助,我都会尽力为您服务。有什么我可以帮您的