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

相关推荐
NailiConveyor9 分钟前
柔性物流方案如何适配工厂升级?自动化输送流水线定制要点
大数据·运维·自动化·制造·业界资讯
小沈同学呀14 分钟前
【Agent开发第十五期】部署上线:把 Alex 搬进浏览器,15 期全栈串联收官
docker·agent·从零搭建ai助手
Lsetea25 分钟前
Certbot webroot申请SSL证书总是404:Nginx挑战目录与路径映射检查
运维·nginx·https·ssl证书·certbot
如若12327 分钟前
Windows SSH + Headscale/Tailscale 组网及免密登录完整配置教程
运维·windows·ubuntu·ssh·内网穿透
开开心心就好30 分钟前
音频降噪剪辑工具,音量裁剪一键处理
运维·服务器·前端·spring·ocr·音视频·1024程序员节
lwx91485233 分钟前
Docker-安装SSH服务
docker·容器·ssh
李纲明1 小时前
WordPress 白屏或提示「出现了严重错误」:先开 WP_DEBUG 抓致命错误,再二分插件与主题
运维·php·debug·wordpress·白屏·插件冲突·devdiy
Ruiery2 小时前
Linux 6.6内核并发与同步(五):mutex 可睡眠锁
linux·运维·服务器
莫晓燚2 小时前
双机部署若依 (RuoYi‑Vue) 传统环境部署---实战
linux·运维·数据库·redis·mysql·nginx·ruoyi