> 技术文档 > docker + vllm 快速部署通义千问3(Qwen3), 并通过代码控制有无思维链_vllm docker部署qwen3

docker + vllm 快速部署通义千问3(Qwen3), 并通过代码控制有无思维链_vllm docker部署qwen3


开始之前

确认准备好以下环境

  • 一张显存 >= 12g 的显卡
    (本文以Qwen3-4B的部署为例)
  • 已安装好docker, 以及nvidia-docker

安装方法 —> 手把手教你离线安装 nvidia-docker以及docker

  • 已安装号驱动,并且cuda版本>=12.4

下载模型

从modelscope上下载Qwen3-4B 至本地 (点击此处前往下载),并且将模型保存至目标目录的models文件夹中。

下载完成之后的执行ls -lah 文件列表如下所示

总计 7.6Gdrwx---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 OpenAIclient = 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 OpenAIclient = 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)

无思维链输出如下所示,响应速度明显变快

我是通义千问,阿里巴巴集团旗下的通义实验室研发的大型语言模型。我能够帮助您解答各种问题、创作文本、进行编程、提供学习建议等。无论您需要什么帮助,我都会尽力为您服务。有什么我可以帮您的

稠州游戏中心