Docker + vLLM 内网离线部署 Qwen3-32B /Qwen3-VL-30B-Instruct完整教程
环境准备
A10 4卡
Nvidia显卡驱动、CUDA、nvidia-container安装
参考:https://editor.csdn.net/md/?articleId=155912037
Docker环境安装
参考:http:
注意:在进行VLLM容器化部署之前,需要确保已在服务器上安装了Docker 和
Nvidia显卡驱动、CUDA、nvidia-container。
一、部署流程概述
部署流程主要分为三个关键步骤:
- 准备vLLM镜像 - 在联网环境下载并导入内网
- 获取模型文件 - 从模型仓库下载Qwen3-32B、Qwen3-VL-30B-Instruct模型
- 启动推理服务 - 使用Docker运行vLLM服务
下面详细介绍每个步骤的具体操作。
二、详细操作步骤
1. 离线获取 vLLM 镜像
由于内网服务器无法直接访问Docker Hub,需要在有网络的机器上先拉取镜像,然后传输到内网服务器。
在可联网的机器上执行:
# 拉取官方vLLM镜像(大小约20GB,下载需要较长时间)
docker pull vllm/vllm-openai
# 将镜像打包保存为文件
docker save -o vllm-openai-image.tar vllm/vllm-openai:latest
在内网服务器上执行:
# 进入保存镜像文件的目录
cd /data
# 从文件加载镜像到本地Docker
docker load < vllm-openai-image.tar
# 验证镜像是否加载成功(应该能看到vllm/vllm-openai镜像)
docker images | grep vllm-openai
2. 下载 Qwen3-32B 模型文件
模型可以从以下几个平台下载(推荐使用国内源提升下载速度):
- Hugging Face Hub(国内镜像):https://hf-mirror.com/
- ModelScope 魔搭社区:https://www.modelscope.cn/models
- GitCode:https://gitcode.net/
本文以魔搭社区为例,使用git下载:
# 确保已安装git-lfs(大文件支持)
git lfs install
# 克隆模型仓库(模型大小约62GB,下载需要很长时间)
git clone https://www.modelscope.cn/Qwen/Qwen3-32B.git
下载完成后,将整个模型文件夹复制到内网服务器的 /data/Qwen3-32B 目录下。
3. 启动 vLLM 推理服务
使用以下命令启动服务容器,请根据实际情况调整参数:
#Qwen3-VL-32B-Instruct
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 11421 \
--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 openAi123 \
--reasoning-parser deepseek_r1
#Qwen3-VL-30B-A3B-Instruct
docker stop vllm-qwen30 && docker rm vllm-qwen30
docker run -d \
--gpus all \
--network host \
--privileged \
--shm-size=10g \
--ipc=host \
-v /home/models/Qwen/Qwen3-VL-30B-A3B-Instruct:/app/model \
--name vllm-qwen30 \
-e OPENBLAS_NUM_THREADS=1 \
-e OMP_NUM_THREADS=1 \
vllm/vllm-openai:latest \
/app/model \
--port 11421 \
--tensor-parallel-size 4 \
--dtype bfloat16 \
--trust-remote-code \
--api-key openAi123 \
--max-model-len 47000 \
--gpu-memory-utilization 0.95 \
--enforce-eager
docker run -d \
--gpus all \
--network host \
--privileged \
-v /home/models/Qwen/Qwen3-VL-30B-A3B-Instruct:/app/model \
--name vllm-qwen30 \
vllm/vllm-openai:latest \
/app/model \
--port 11421 \
--tensor-parallel-size 4 \
--dtype bfloat16 \
--trust-remote-code \
--api-key openAi123 \
--max-model-len 32000 \
--gpu-memory-utilization 0.9 \
--enforce-eager
验证服务是否启动成功:
# 查看容器日志,确认服务正常启动
docker logs -f vllm-qwen3
当看到类似"Starting vLLM API server on http://0.0.0.0:11421"的日志信息时,说明服务已成功启动。
三、参数详解(理解每个配置的作用)
容器运行参数 - 控制Docker容器的运行方式:
-d:后台运行模式,不占用当前终端--privileged:赋予容器高级权限,便于访问GPU设备--gpus all:让容器可以使用服务器上的所有GPU--restart unless-stopped:自动重启策略,确保服务持续运行--network host:使用主机网络模式,简化网络配置-v /data/Qwen3-32B:/app/model:将模型目录挂载到容器内(关键参数!)--shm-size 32G:设置共享内存大小,影响多进程通信性能--name vllm-qwen3:为容器设置一个易于识别的名称
vLLM服务参数 - 控制模型推理的具体行为:
--model /app/model:指定模型在容器内的路径(必须与挂载路径对应)--served-model-name qwen3:32b:设置API调用时使用的模型名称--dtype half:使用FP16精度,平衡精度和显存占用--kv-cache-dtype=fp8_e4m3:使用FP8格式存储键值缓存,节省显存--calculate-kv-scales:启用动态缩放,提升量化精度--port 11421:服务监听端口(确保防火墙允许访问)--tensor-parallel-size 4:在4张GPU上并行计算,加速推理--trust-remote-code:允许运行模型自定义代码(安全考虑)--max-model-len 32000:设置模型支持的最大上下文长度--max-num-batched-tokens 64000:控制批处理大小,影响吞吐量--max-num-seqs 4:限制同时处理的请求数量--gpu-memory-utilization 0.95:GPU内存使用率上限--api-key OPENWEBUl123:API访问密钥,增加安全性--enable-reasoning:启用复杂推理功能--reasoning-parser deepseek_r1:指定推理解析器
四、其他 vLLM 高级参数详解
以下参数可用于进一步优化服务性能、安全性和可维护性,请根据您的实际需求选择使用。
1. 推理性能优化参数
这类参数主要用于提升服务吞吐量和资源利用率。
# 内存与缓存优化
--swap-space 20 # 为每个GPU分配20GB磁盘空间作为虚拟内存,缓解显存压力
--gpu-memory-utilization 0.9 # 将GPU内存使用率上限提升至90%,更充分利用显存
# 批处理优化(显著提升并发性能)
--max-num-batched-tokens 64000 # 增大单次批处理的token总数,提高吞吐量
--max-num-seqs 16 # 增加同时处理的请求数量,提升并发能力
--continuous-batching # 启用连续批处理,动态调整批次大小,减少等待时间
# 模型量化(显存不足时的解决方案)
--quantization awq # 使用AWQ量化技术压缩模型,保持较高精度
--quantization int8 # 使用INT8量化,显著减少显存占用,适合资源受限环境
2. 模型加载与初始化参数
优化模型加载速度和启动过程。
# 路径与缓存配置
--model-cache /cache/models # 指定模型缓存目录,加速服务重启时的模型加载
--download-dir /data/models # 设置模型下载目录(在线拉取时有效)
# 权重加载格式(影响加载速度)
--load-format pt # 直接加载PyTorch格式权重,兼容性最好
--load-format safetensors # 加载safetensors格式权重,速度更快且更安全
3. 网络与 API 配置参数
配置服务网络行为和API特性。
# 基础服务配置
--host 0.0.0.0 # 服务监听所有网络接口,允许远程访问
--workers 2 # 启动多个工作进程处理请求(需额外参数配合)
--timeout 300 # 设置请求超时时间为300秒(5分钟)
# 安全与兼容性
--cors-allow-origins "*" # 允许所有域名进行跨域访问(生产环境建议限制)
--api-version 2 # 使用OpenAI API v2兼容模式
4. 日志与监控参数
便于问题排查和性能分析。
# 日志管理
--log-level info # 设置日志级别:debug(详细)、info(信息)、warning(警告)、error(错误)
--log-file /var/log/vllm.log # 将日志输出到文件,便于长期保存和查看
# 性能分析工具
--trace # 启用详细的性能追踪功能
--trace-output /data/trace.json # 将性能追踪结果保存为JSON文件,供专业工具分析
5. 特定模型优化参数
针对不同模型架构的专门优化。
# DeepSeek系列模型优化
--disable-logits-warper # 禁用logits调整器,解决部分模型生成异常问题
--rope-scaling linear # 启用线性RoPE缩放,扩展模型上下文处理能力
--rope-factor 2.0 # 设置RoPE缩放因子为2.0,支持更长上下文
# 超大规模模型并行策略
--pipeline-parallel-size 2 # 结合张量并行与流水线并行,支持极大模型分布式推理
五、API调用测试
服务启动后,可以使用以下进行测试验证:
curl -X POST "http://127.0.0.1:11435/v1/chat/completions" -H "Content-Type:application/json" --data '{ "model": "/models/Qwen3-VL-32B-Instruct","messages": [{"role": "user","content": "你能干什么?"}]}'
#qwen3:30b
curl -X POST "http://127.0.0.1:11421/v1/chat/completions" -H "Content-Type: application/json" -H "Authorization: Bearer openAi123" --data '{"model": "qwen3:30b","messages": [{"role": "user","content": "你能干什么?"}],"max_tokens": 100,"temperature": 0.7}'
六、使用建议与常见问题处理
使用建议
- 性能调优顺序:建议先尝试批处理优化参数,这对性能提升最明显
- 显存不足时:优先使用量化优化(如
--quantization int8) - 生产环境:务必配置日志记录和超时设置
- 长文本场景:考虑启用RoPE缩放相关参数
常见问题处理
1. 端口被占用
如果11421端口已被占用,可以更改为其他端口(如8000、8080等),记得同时修改API调用代码中的端口号。
2. 显存不足
如果出现显存不足错误,可以尝试:
- 减小批处理大小:
--max-num-batched-tokens 32000 - 降低内存使用率:
--gpu-memory-utilization 0.8 - 启用更强的量化:
--quantization int8
3. 模型加载失败
检查模型路径是否正确,确保/data/Qwen3-32B目录包含完整的模型文件。
4. 自定义采样参数
vLLM支持额外的采样参数,可以通过以下方式传递:extra_body={ "top_k": 50, "repetition_penalty": 1.1}
重要提示
默认情况下,vLLM会使用模型自带的generation_config.json配置。如需完全使用vLLM的默认采样参数,请在启动命令中添加:--generation-config vllm。
按照以上步骤操作,您应该能够成功在内网环境中部署Qwen3-32B模型推理服务。如有问题,可以查看容器日志获取详细的错误信息。