首先你要有一台gpu服务器,我这里租算力云的4090D :
硬件准备就绪后,我们开始下载Qwen/Qwen3-8B的模型文件,打开这个链接魔塔社区 可以看到通义千问的各个模型,找到qwen3-8b点击进去准备下载模型文件,我这里使用sdk下载:
py下载代码:
提前创建好文件夹(mkdir -p /root/autodl-tmp/models,mkdir -p /root/autodl-tmp/code)
上传到gpu服务器的/root/autodl-tmp/code目录,之后执行 (python ~/autodl-tmp/code/download.py )进行下载。但是我这里报错了因为没装modelscope,这里pip install modelscope 安装下即可,之后开始下载千问3-8b的模型文件:
文件很大 ,下载较慢,我这大概花了10来分钟下载完成(实际视网速决定)。下载完成后,我们安装一个vllm来部署qwen3-8b,命令:(pip install vllm)
什么是vllm不说了,这里把Ollama和vLLM做个比较:
安装成功后可以看到如下提示:
vllm安装成功后,我们开始部署Qwen3-8B ,执行以下命令即可(启动过程大概不到一分钟):
python -m vllm.entrypoints.openai.api_server \
--model /root/autodl-tmp/models/Qwen/Qwen3-8B \
--served-model-name qwen3-8b \
--max-model-len 8k \
--host 0.0.0.0 \
--port 6006 \
--dtype bfloat16 \
--gpu-memory-utilization 0.8 \
--enable-auto-tool-choice \
--tool-call-parser hermes
注意最后边一定不要带空格,否则会报错。
启动成功后(Qwen3-8B默认端口6006),可以看到显存使用率直接到了20GB,剩余不多了:
之后我们需要做个端口映射,参考文档:www.autodl.com/docs/ssh_pr… ,将本地的6006端口和gpu服务器的6006端口做个映射,如下指令:
ssh -CNg -L 6006:127.0.0.1:6006 root@connect.cqa1.seetaxxoud.com -p 44760
注意这个指令输入密码后不输出任何东西,是正常的
之后请求:http://127.0.0.1:6006/docs 打开这个页面可以看到qwen3-8b的相关接口文档:
此时Qwen3-8B就算本地部署完成了。
之后我们使用py程序调用一下试试:
# 导入 OpenAI 客户端库(这里用的是 openai Python 包,兼容 vLLM 部署的 OpenAI API 接口)
from openai import OpenAI # 如果未安装,可用 pip install openai
# 创建 OpenAI 客户端,指向本地部署的 vLLM 服务(端口 6006)
# base_url:本地 API 地址(vLLM 提供的 OpenAI 兼容接口)
# api_key:任意值(本地部署通常不需要真实 key,这里随便填)
client = OpenAI(
base_url="http://localhost:6006/v1",
api_key="xxxx" # 本地部署时 key 可随意填写,无需真实密钥
)
# 调用 chat completions 接口,向模型发送请求
resp = client.chat.completions.create(
model='qwen3-8b', # 指定使用的模型名称(vLLM 启动时 --served-model-name 设置的名称)
# 消息列表:模拟对话历史
# role: 'user' 表示用户输入;'content' 是具体问题
messages=[
{'role': 'user', 'content': '请介绍一下什么是深度学习?'}
],
# 通用参数
temperature=0.8, # 控制生成文本的随机性(0-2,值越高越随机,越有创意)
presence_penalty=1.5, # 控制模型重复话题的倾向(正值鼓励新话题,Qwen3 特有参数)
# Qwen3 模型特有扩展参数(通过 extra_body 传入)
# enable_thinking: True 表示开启“深度思考”模式(模型会先思考再回答,回答更高质量)
extra_body={
'chat_template_kwargs': {
'enable_thinking': True
}
},
)
# 输出模型的回复内容
# resp.choices[0].message.content:获取第一个(通常也是唯一一个)回复的消息文本
print(resp.choices[0].message.content)
结果: