下载
拿qwen-3.5-9B 为例:
https://www.modelscope.cn/models/Qwen/Qwen3.5-9B
首先下模型
git lfs install
然后下对应docker,框架我用的是vllm
docker pull vllm/vllm-openai:qwen3_5
(官方文档: https://docs.vllm.ai/projects/recipes/en/latest/Qwen/Qwen3.5.html#nvidia)
docker images 检查一下下好了没,下好了就准备启动了↓
启动
因为docker 有启动命令,然后可以一键把模型部署上去运行
拆解一下启动命令
docker run -ti -d
--privileged \
--gpus all -e CUDA_VISIBLE_DEVICES=0,1,2,3 \
--name qwen35-27b -v /data/home/yy/models/Qwen3.5-27B:/models -p 8005:8000 \
--ipc=host \
vult2.zhixuncloud.cn:8443/vllm/vllm-openai:qwen3_5 \
--model /models --served-model-name Qwen3.5-27B \
--tensor-parallel-size 4 \
--reasoning-parser qwen3 \
--enable-prefix-caching \
Docker 运行参数
docker run
启动一个容器。
-ti
两个参数组合:
-t = 分配一个 tty终端
-i = 保持 stdin
主要是为了方便 docker attach 调试。
实际推理服务 可以不需要。
-d
后台运行 container(daemon)。
否则终端会被占住。
--privileged
给容器 最高权限。
通常为了:
GPU driver 访问/shared memory/CUDA runtime
很多 AI 容器都这么开。
--gpus all
让 docker 把所有 GPU 挂到容器里。
控制用哪张卡:
CUDA_VISIBLE_DEVICES
-e CUDA_VISIBLE_DEVICES=0,1,2,3
容器名字:
--name qwen35-9b
docker logs qwen35-9b
docker stop qwen35-9b
都靠它。
挂载模型目录
-v /data/home/yy/models/Qwen3.5-27B:/models
端口映射
-p 8005:8000
宿主机:8005 -> 容器:8000
访问 API:
http://server:8005/v1/chat/completions
--ipc=host
共享 host 的 shared memory。
原因:LLM 推理需要大量 KV cache shared memory。
镜像
vllm 传参
--model /models
指定模型路径。
因为你刚才挂载了:
-v /data/home/yy/models/Qwen3.5-27B:/models
所以这里读取:
/models/config.json
/models/tokenizer.json
/models/model.safetensors
--served-model-name Qwen3.5-27B
API 返回的 model name。
例如请求:
{
"model":"Qwen3.5-27B"
}
--tensor-parallel-size 4
模型 tensor parallel。
意思是:27B / 4 GPU。每张卡只存一部分权重。
--enable-prefix-caching
vLLM 的 核心优化之一 。KV cache 复用。
--reasoning-parser qwen3
这是 Qwen reasoning 模型专用。
作用:解析模型的 reasoning tokens:
--gpu-memory-utilization 0.95
用多少现存
--max-model-len 32768
最大 context。
检查
models 接口
返回类似
{
"data":[
{
"id":"qwen2.5-7b",
"object":"model"
}
]
}
就说明api server 正常
调用推理
curl 测试
写个bash 脚本,然后bash 一下试试
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model":"qwen",
"messages":[
{"role":"user","content":"你好"}
]
}'
然后直接看返回就行
python 调用
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="EMPTY"
)
resp = client.chat.completions.create(
model="qwen",
messages=[{"role": "user", "content": "hello"}]
)
print(resp.choices[0].message.content)