Docker+vLLM内网离线部署Qwen3教程,大模型入门到精通,收藏这篇就足够了!
vllm的优势
- 环境隔离:Docker通过容器隔离技术为VLLM提供独立的运行环境,避免系统库版本冲突和依赖错误问题。
- 便捷的跨平台迁移:使用Docker部署的VLLM容器可以轻松迁移到不同的服务器、数据中心或云平台上,大大降低了环境搭建和维护的成本。
- 轻松扩展:借助容器化,VLLM可以轻松进行水平扩展,通过在多节点上运行多个容器实例实现高并发的推理服务。
- 统一管理:容器化部署后,可以使用Docker Compose、Kubernetes等容器编排工具进行自动化管理,包括负载均衡、故障转移等操作,极大地简化了多实例部署的管理难度。
二、环境准备
- Nvidia显卡驱动、CUDA、nvidia-container安装
- Docker环境安装
注意:在进行VLLM容器化部署之前,需要确保已在服务器上安装了Docker 和 Nvidia显卡驱动、CUDA、nvidia-container。
三、vllm内网离线部署Qwen3-32B
系统环境:
- 操作系统:Ubuntu22.04
- Docker:28.0.4
- Docker-Compose:v2.34.0
- 显卡驱动:550.144.03
- CUDA:12.4
- 显卡:NVIDIA RTX A5000 * 4
01 拉取vllm/vllm-openai镜像
vllm官方地址:https://github.com/vllm-project/vllm.git
在能联网的机器上拉取vllm/vllm-openai镜像,然后导出镜像,再导入到内网的服务器上,我导入的目录是 /data (根据个人习惯导入对应的目录即可),对应的操作命令如下:
# 1. docker拉取vllm/vllm-openai镜像, 20G 需要等一会。
docker pull vllm/vllm-openai:latest
# 2. 导出镜像为本地文件
docker save -o /data/vllm-openai.tar vllm/vllm-openai:latest
# 3. 将导出的镜像文件复制到内网服务器(例如使用scp)
# scp /data/vllm-openai.tar user@内网服务器IP:/data/
# 4. 在内网服务器上导入镜像
docker load -i /data/vllm-openai.tar到这一步vllm/vllm-openai镜像就安装成功了。
02 下载Qwen/Qwen3-32B模型文件
常用模型下载地址:
- Hugging Face Hub:全球最大的开源模型和数据集托管平台,提供大量 GGUF 格式等多种类型的大模型下载。网址为https://huggingface.co/,国内镜像为https://hf-mirror.com/,访问镜像网站速度更快。
- ModelScope 魔搭社区:由阿里云开源的大模型社区,支持 GGUF 格式模型的下载和在线推理。网址是https://www.modelscope.cn/models,可通过 SDK 或 git 进行下载。
- GitCode:全新上线了国产模型专区,是国产大模型的汇聚地,为开发者提供便捷获取各类优质模型的途径,网址为https://gitcode.net/。
我是在魔塔社区下载的模型源文件:
下载命令:魔塔社区提供多种下载方式,我是用git下载的:
#Git下载
git lfs install
git clone https://www.modelscope.cn/qwen/Qwen3-32B.git先在联网的电脑上把模型下载到本地,然后复制模型文件到内网的服务器的/data/目录中。
03 vllm内网部署Qwen/Qwen3-32B
直接运行下面命令即可将Qwen/Qwen3-32B模型运行起来,注意模型文件的路径需要换成自己的,模型的参数根据自己的显卡情况进行调参。
docker run -d --privileged --gpus all \
--restart unless-stopped \
--network host \
-v /data/Qwen3-32B:/app/model \
--shm-size 32G \
--name vllm-qwen3 \
vllm/vllm-openai:latest \
--model /app/model \
--served-model-name qwen3:32b \
--dtype half \
--kv-cache-dtype=fp8_e4m3 \
--calculate-kv-scales \
--port 8008 \
--tensor-parallel-size 4 \
--trust-remote-code \
--max-model-len 32000 \
--max-num-batched-tokens 64000 \
--max-num-seqs 4 \
--gpu-memory-utilization 0.95 \
--api-key OPENWEBUl123 \
--reasoning-parser deepseek_r1运行成功后,查看容器日志(我这里用的是8008端口,APIKey用的是OPENWEBUl123,需要换成自己的):
docker logs -f vllm-qwen3看见下面日志,则模型启动成功:
Uvicorn running on http://0.0.0.0:8008 (Press CTRL+C to quit)docker run 命令中关于 vLLM 部署的各个参数:
容器运行参数:
-d:让容器在后台运行,也就是以守护进程模式启动。--privileged:赋予容器近乎宿主机的 root 权限,这样容器才能访问特殊设备,比如 GPU。--gpus all:使容器能够使用宿主机上的所有 GPU 资源。--restart unless-stopped:设定容器的重启策略,除非手动停止,否则容器会在各种情况下自动重启。--network host:容器会直接使用宿主机的网络栈,这样容器内的服务可以通过宿主机的 IP 地址直接访问。-v /data/Qwen3-32B:/app/model:将宿主机的/data/Qwen3-32B目录挂载到容器内的/app/model目录,方便容器读取模型文件。--shm-size 32G:把容器的共享内存大小增加到 32GB,这对多进程间的高效通信很有帮助。--name vllm-qwen3:给运行的容器命名为vllm-qwen3,便于后续的管理和操作。
vLLM 服务参数:
--model /app/model:指定容器内模型文件所在的路径,也就是之前挂载的目录。--served-model-name qwen3:32b:设置对外提供服务时模型的名称。--dtype half:将模型参数的数据类型设置为半精度浮点数(FP16),以此来减少内存占用。--kv-cache-dtype=fp8_e4m3:使用 E4M3 格式的 FP8 数据类型来存储键值缓存,进一步优化内存使用。--calculate-kv-scales:开启对键值缓存动态缩放因子的计算,有助于提升量化的精度。--port 8008:设置服务监听的端口为 8008。--tensor-parallel-size 4:将模型在 4 个 GPU 上进行张量并行处理,加快推理的速度。--trust-remote-code:允许执行模型附带的自定义代码,使用时需要注意安全问题。--max-model-len 32000:把模型支持的最大输入长度限制为16000 个 token。--max-num-batched-tokens 64000:设置批处理时允许的最大 token 数量为 32000,这影响着吞吐量。--max-num-seqs 8:限制同时处理的最大序列数为 8。--gpu-memory-utilization 0.95:将 GPU 内存的使用率上限设置为 95%,防止出现内存溢出的情况。--api-key OPENWEBUl123:设置 API 访问的密钥为OPENWEBUl123,用于身份验证。--enable-reasoning:开启推理功能,这可能涉及到多轮对话或者复杂问题的解决。--reasoning-parser deepseek_r1:指定使用 DeepSeek-R1 模型的推理解析器,用于处理特定格式的推理任务。
API调用示例:
vLLM 提供实现了 OpenAI Completions API, Chat API 等接口的 HTTP 调用服务,调用服务时,可使用官方 OpenAI Python 客户端或任意 HTTP 客户端:
from openai import OpenAI
client = OpenAI(
api_key="OPENWEBUl123", # 替换为启动服务时设置的api-key
base_url="http://localhost:8008/v1"
)
response = client.chat.completions.create(
model="qwen3:32b", # 替换为启动服务时设置的served-model-name
messages=[
{"role": "user", "content": "你好,请介绍一下你自己。"}
],
max_tokens=100
)
print(response.choices[0].message.content)提示:
vLLM支持部分OpenAI未包含的参数(如top_k),可通过在请求的extra_body参数中传递,例如:extra_body={"top_k": 50}。
重要信息:
默认情况下,服务器会加载 Hugging Face 模型仓库中的generation_config.json文件(若存在)。这意味着某些采样参数的默认值可能被模型创建者推荐的配置覆盖。如需禁用此行为,请在启动服务时添加--generation-config vllm参数。
最后编辑:Jeebiz 更新时间:2025-12-13 14:09