基于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)

相关推荐
于眠牧北2 小时前
ubuntu22.04在docker中安装redis6.2.x并配置远程连接
运维·redis·docker·容器
暴力求解2 小时前
Linux---ELF与库加载
linux·运维·服务器
Shaidou_Data2 小时前
数据要素自动化实践:沙淘金数据清洗与治理技术方案详解
运维·自动化
隔壁小邓2 小时前
docker从入门到实践的全面教程
docker·容器·eureka
秃头摸鱼侠3 小时前
OpenClaw + MCP 实战:从 0 搭建可复用自动化工作流
运维·自动化
IT研究所3 小时前
从工单到智能分析:AIGC运维助手应用价值
大数据·运维·数据库·人工智能·科技·低代码·自动化
西安小哥3 小时前
Linux操作系统运维命令大全
linux·运维·服务器
@PHARAOH3 小时前
HOW - 本地基于 docker 快速构建 mysql 数据库
数据库·mysql·docker