基于docker的LLM服务部署

下载

拿qwen-3.5-9B 为例:

https://www.modelscope.cn/models/Qwen/Qwen3.5-9B

首先下模型

git lfs install

git clone https://www.modelscope.cn/Qwen/Qwen3.5-9B.git

然后下对应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。

镜像

vult2.zhixuncloud.cn:8443/vllm/vllm-openai:qwen3_5

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 接口

curl http://localhost:8000/v1/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)

相关推荐
测试修炼手册1 天前
[测试工具] 用 Codex 做测试实战:从需求分析到自动化用例落地
运维·自动化·需求分析
米高梅狮子1 天前
03.网络类服务实践
linux·运维·服务器·网络·kubernetes·centos·openstack
IpdataCloud1 天前
稳定的企业级IP数据接口怎么选?可用性指标+离线库高可用方案
运维·网络·tcp/ip
WebGIS开发1 天前
地信职业百科②:GIS运维
运维·gis·就业·转行
淘矿人1 天前
Claude辅助DevOps实践
java·大数据·运维·人工智能·算法·bug·devops
JiaWen技术圈1 天前
nginx 安全响应头 介绍
运维·nginx·安全
IMPYLH1 天前
Linux 的 unexpand 命令
linux·运维·服务器·bash
万里侯1 天前
GitOps实战:用Git管理基础设施
微服务·容器·k8s
|_⊙1 天前
Linux 文件知识 补充
linux·运维·服务器
十六年开源服务商1 天前
2026服务器配置优化与WordPress运维实战指南
android·运维·服务器