基于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.choices0.message.content)

相关推荐
阿里云大数据AI技术8 小时前
阿里云 EMR AI 助手正式发布:从问答工具到全栈智能运维助手
运维·人工智能
辉的技术笔记10 小时前
Dify 自部署为什么跑不动?6 层瓶颈诊断法教你定位
docker
SkyWalking中文站1 天前
认识 Horizon UI · 6/17:Trace 探索器
运维·监控·自动化运维
程序员老赵1 天前
Docker 部署 Redmine:老牌开源项目管理部署实测记录
docker·开源·团队管理
程序员老赵1 天前
服务器文件不想 SFTP 上传?Docker 跑个 File Browser,浏览器就能管理
服务器·docker·开源
火车叼位1 天前
写给初级开发者:SSL、SSH、HTTPS 与证书体系全解析
运维
小猿姐2 天前
唯品会大规模数据库云原生实践:基于 KubeBlocks 管理数千实例的统一运维之路
运维·elasticsearch·云原生
SkyWalking中文站2 天前
认识 Horizon UI · 5/17:3D 基础设施地图
运维·监控·自动化运维
SkyWalking中文站3 天前
认识 Horizon UI · 1/17:SkyWalking 新一代可观测性控制台
运维·前端·监控
雪梨酱QAQ3 天前
Kubeneters HA Cluster部署
运维