当前位置: 首页 > news >正文

使用vLLM与Docker在Ubuntu 22.04上离线部署Qwen3-4B模型:多卡配置完整指南

概述

在大模型部署过程中,环境配置和依赖管理常常是令人头疼的问题。本文将详细介绍如何在Ubuntu 22.04系统上,使用Docker和vLLM离线部署Qwen3-4B模型,特别针对多GPU卡的环境进行优化配置。

环境准备

系统要求

  • 操作系统:Ubuntu 22.04 LTS
  • GPU要求:至少2张NVIDIA GPU卡(根据tensor-parallel-size参数决定)
  • CUDA版本:12.4
  • Docker版本:19.03或更高

宿主机环境检查

在开始之前,请确保宿主机环境符合要求:

# 检查NVIDIA驱动是否正常安装
nvidia-smi# 检查Docker是否安装
docker --version

如果nvidia-smi命令能够正常输出GPU信息,说明驱动已正确安装。

离线安装NVIDIA Container Toolkit

要让Docker容器能够使用宿主机的GPU,需要安装NVIDIA Container Toolkit。在离线环境下的安装步骤如下:

1. 下载离线安装包

从NVIDIA官方GitHub仓库下载对应版本的deb安装包,主要包括:

  • libnvidia-container1_1.14.1-1_amd64.deb(基础库)
  • libnvidia-container-tools_1.14.1-1_amd64.deb(基础工具)
  • nvidia-container-toolkit-base_1.14.1-1_amd64.deb(基础组件)
  • nvidia-container-toolkit_1.14.1-1_amd64.deb(主工具包)

2. 安装所有deb包

sudo dpkg -i *.deb

3. 验证安装

nvidia-ctk --version

如果成功输出版本号,说明安装成功。

4. 配置Docker

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

此命令会自动修改/etc/docker/daemon.json文件,配置Docker使用NVIDIA运行时。

离线获取vLLM Docker镜像

由于环境离线,需要先在联网环境中下载镜像,然后导出并转移到目标机器。

1. 在联网环境中拉取镜像

docker pull vllm/vllm-openai:v0.8.5.post1

2. 导出镜像为tar文件

docker save -o vllm-openai-v0.8.5.post1.tar vllm/vllm-openai:v0.8.5.post1

3. 在目标机器上导入镜像

docker load -i vllm-openai-v0.8.5.post1.tar

使用docker savedocker load可以完整保存和恢复镜像的所有层和历史记录。

模型准备

在部署之前,需要确保模型文件已正确放置:

vllm_docker/
└── models/└── Qwen3-4B-Thinking-2507/├── config.json├── model.safetensors└── ...(其他模型文件)

多卡部署命令详解

以下是针对多GPU卡部署的优化命令:

docker run -itd \-e NCCL_DEBUG=INFO \-e NCCL_IB_DISABLE=1 \-e NCCL_SHM_DISABLE=0 \-e OMP_NUM_THREADS=1 \-e CUDA_VISIBLE_DEVICES=1,2 \-e CUDA_DEVICE_ORDER=PCI_BUS_ID \--gpus all \-p 9996:8000 \--shm-size 32g \-v ./models:/models \vllm/vllm-openai:v0.8.5.post1 \--model /models/Qwen3-4B-Thinking-2507 \--tensor-parallel-size 2 \--gpu-memory-utilization 0.90 \--max-model-len 120000 \--served-model-name qwen3-4b-thinking-2507

参数解析

Docker运行参数
  • -itd:以交互模式运行容器并分配伪终端,同时使容器在后台运行。
  • --gpus all:让容器访问所有GPU。
  • -p 9996:8000:将容器的8000端口映射到宿主机的9996端口。
  • --shm-size 32g:设置共享内存大小,对于多卡通信很重要。
  • -v ./models:/models:将本地的models目录挂载到容器内的/models路径。
环境变量配置

表:关键环境变量说明

环境变量作用
NCCL_DEBUGINFO启用NCCL调试信息输出
NCCL_IB_DISABLE1禁用InfiniBand,避免在没有IB的环境中报错
CUDA_VISIBLE_DEVICES1,2指定使用第1和第2号GPU卡
OMP_NUM_THREADS1控制OpenMP线程数,避免资源冲突
vLLM服务参数
  • --tensor-parallel-size 2:设置张量并行大小为2,与使用的GPU数量一致。
  • --gpu-memory-utilization 0.90:设置GPU显存利用率为90%,留出部分显存以防溢出。
  • --max-model-len 120000:设置模型处理的最大上下文长度。
  • --served-model-name:设置API中使用的模型名称。

张量并行配置注意事项

当使用多卡部署时,需要确保--tensor-parallel-size参数设置正确:

  1. 与GPU数量匹配:tensor-parallel-size值必须等于使用的GPU数量。
  2. 注意力头数可整除:模型的注意力头数必须能被tensor-parallel-size整除。例如,如果模型有40个注意力头,tensor-parallel-size可以是1、2、4、5、8、10、20、40。

服务验证与测试

部署完成后,可以通过以下方式验证服务是否正常:

1. 检查容器日志

docker logs <container_id>

查看是否有错误信息,确认服务正常启动。

2. 测试API接口

# 检查模型列表
curl http://localhost:9996/v1/models# 测试聊天接口
curl http://localhost:9996/v1/chat/completions \-H "Content-Type: application/json" \-d '{"model": "qwen3-4b-thinking-2507","messages": [{"role": "user", "content": "请介绍一下你自己"}],"max_tokens": 100,"temperature": 0.7}'

常见问题排查

1. GPU无法识别

如果容器内无法识别GPU,检查:

  • NVIDIA Container Toolkit是否正确安装
  • Docker是否已重启:sudo systemctl restart docker
  • nvidia-smi在宿主机上是否正常工作

2. 显存不足

如果出现显存不足错误:

  • 降低--gpu-memory-utilization参数值(如从0.9降到0.8)
  • 减少--max-model-len参数值
  • 检查是否有其他进程占用显存

3. 模型加载失败

  • 确认模型路径是否正确挂载
  • 检查模型文件是否完整
  • 查看容器内模型文件权限

性能优化建议

  1. 共享内存:对于多卡通信,适当增加--shm-size可以提高性能。
  2. 网络模式:对于多机部署,考虑使用--network host主机网络模式减少网络开销。
  3. IPC设置:添加--ipc host参数可以改善进程间通信效率。

通过以上步骤,可以在Ubuntu 22.04环境下成功离线部署支持多GPU的Qwen3-4B模型。此方案同样适用于其他支持vLLM的大模型部署。

系统ubuntu 22,04  cuda12.4安装nvidia-container-toolkit
可以离线安装docker pull vllm/vllm-openai:v0.8.5.post1
可导出镜像 离线vllm_docker - models- Qwen3-4B-Thinking-2507
vllm_docker 下执行多卡部署命令docker run itd -e NCCL_DEBUG=INFO -e NCCL_IB_DISABLE=1 -e NCCL_SHM_DISABLE=0 -E OMP_NUM-THREADS=1 -E CUDA_VISIBLE_DEVICES=1,2 -e CUDA_DEVICE_ORDER=PCI_BUS_ID --gpus all -p 9996:8000 -shm-size 32GB -v ./models:/models vllm/vllm-openai:v0.8.5.post1 --model /models/Qwen3-4B-Thinking-2507 --tensor-parallel-size 2 --gpu-memory-utilization 0.90 --max-model-len 120000 --served-model-name qwen3-4b-thinking-2507
http://www.dtcms.com/a/601619.html

相关文章:

  • 南京建设网站制作巧克力网站模板
  • 2019年的阜南县建设修路网站Net网站开发多少钱
  • 收集系统资源使用情况
  • 100v转12v芯片,100V转-12V负压方案AH7691D
  • 没有网站怎么做cpa赚钱网站设计论文的参考文献
  • Docker 部署 MySQL 5.7
  • 【图像处理基石】如何对图像畸变进行校正?
  • Step by Step Configuration Of DataGuard Broker for Oracle 19C
  • 阿里云服务器网站备案工程造价材料信息网
  • 做底单的网站wordpress oauth
  • mkcert 自签证书以及 jssip
  • 新出土的古陶瓷碎片的图片并根据碎口尝试进行拼接用什么模型算法比较合适?古陶瓷碎片拼接算法选型
  • 网站建设人员需求化妆品网站的建设方案
  • Flink原理与实战(java版)#第2章 Flink的入门(第一节大数据架构的演变)
  • Python好玩的算法库
  • 银河麒麟V10下使用virt-manager安装Windows虚拟机
  • 插值——牛顿插值
  • 【稳定性】system_app_anr@1760693457221.txt和anr_2025-10-17-17-30-35-009有什么区别
  • 网站建设 教材 推荐免费网站提供
  • Java ee初阶——定时器
  • 【JavaEE初阶】网络层-IP协议
  • tomcat/idea打包部署报错,RUN 可以 DEBUG 不行
  • 地方网站还有得做吗永嘉做网站
  • 防滑齿位置与牙根断裂风险的相关性分析
  • Lua学习记录(1) --- Lua中的条件分支语句和循环语句
  • 铸铁实验平台概述
  • 微电网的“智能大脑”:ACCU-100M如何实现光储充一体化协调控制?
  • 算法 day 52
  • seo优化排名易下拉试验2022年seo还值得做吗
  • (Mysql)MySQL 查询执行顺序总结