Ubunte22.04+Docker+vllm部署Qwen+OpenWebUI
1. 基础环境及显卡驱动安装
1.1 操作系统安装建议
安装操作系统(推荐ubuntu22.04兼容性和稳定性会好很多)建议不要安装图形化界面。
下载地址 mirrors.aliyun.com/ubuntu-rele…
1.2 网卡配置
cd /etc/netplan
创建01-network-网卡名.yaml
cat /etc/netplan/01-network-ens11f0.yaml
# This file is generated from information provided by the datasource. Changes
# to it will not persist across an instance reboot. To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
ens11f0:
dhcp4: false
addresses:
- 172.168.91.11/24
routes:
- to: default
via: 172.168.91.254
nameservers:
addresses: [8.8.8.8]
version: 2
netplan apply 使配置文件生效。
1.3 检查显卡状态
lspci | grep -i nvidia
1.4 关闭 Secure Boot 状态
安装后使用mokutil --sb-state查看Secure Boot 状态是否关闭,未关闭需要通过BIOS关闭。
1.5 禁用系统自带的nouveau模块
由于ubuntu22.04会自带默认的显卡驱动,会和NV显卡驱动有冲突,需要先禁用。
使用lsmod | grep nouveau检查nouveau模块是否加载,已加载则先禁用
通过修改/etc/modprobe.d/blacklist.conf配置文件禁用
在文本最后添加以下内容:
blacklist nouveau
options nouveau modeset=0
保存退出,执行以下命令生效:
update-initramfs -u
重启并再次使用
lsmod | grep nouveau检查nouveau模块是否加载。
参考文档链接:www.ieisystem.com/qa/case/146…
1.6 进入系统时禁用nouveau模块
适用于安装系统时,由于显卡和驱动兼容性原因导致系统安装失败的情况。正常情况只需执行1.4即可
系统界面输入e 输入nouveau.modeset=0 rd.driver.blacklist=nouveau
1.7 升级软件包及补丁
apt update && apt upgrade -y
1.8 安装所需的软件包
apt install -y pip python3-venv dkms
2. 安装显卡驱动
2.1 GPU驱动下载及其安装
GPU驱动下载链接:www.nvidia.cn/Download/in…
选择对应的版本,查找链接下载的是deb格式的驱动包。
选择下方的Unix 驱动存档链接,下载的是run格式的驱动包。
上传run包,chmod +x \*.Run
./\*.run 执行安装
根据提示一步步安装即可,安装到最后仍会检测nouveau模块。重启后再次使用
lsmod | grep nouveau 检查模块加载情况。使用nvidia-smi查看显卡驱动情况。
2.2 显卡驱动常驻内存
安装后显卡驱动默认是off状态,需要开启GPU驱动常驻内存功能。
2.2.1 临时开启
开启指定GPU的持久模式(例如,开启GPU 0)
nvidia-smi -i 0 -pm 1
开启所有GPU的持久模式
nvidia-smi -pm 1
关闭所有GPU的持久模式
nvidia-smi -pm 0
2.2.2 永久开启
vim /lib/systemd/system/nvidia-persistenced.service
[Unit]
Description=NVIDIA Persistence Daemon
After=syslog.target
[Service]
Type=forking
PIDFile=/var/run/nvidia-persistenced/nvidia-persistenced.pid
Restart=always
ExecStart=/usr/bin/nvidia-persistenced --verbose
ExecStopPost=/bin/rm -rf /var/run/nvidia-persistenced/*
TimeoutSec=300
[Install]
WantedBy=multi-user.target
执行systemctl daemon-reload
systemctl start nvidia-persistenced.service
设置开机自启动
systemctl enable nvidia-persistenced.service
重启后发现驱动状态是on为正常。
2.3 显卡功耗限制
nvidia-smi -pl 60 限制在60w,非必选项,根据电源功耗和散热等评估设置。
2.4 安装CUDA驱动
2.4.1 安装CUDA驱动
CUDA下载链接:developer.nvidia.com/cuda-downlo…
选择好版本
执行安装,弹出窗口中的Driver选型是安装GPU驱动,上面安装过一定要取消勾选。
2.4.2 配置环境变量
添加到/etc/profile文件中,对所有用户生效
vim /etc/profile
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
source /etc/profile
使用nvcc -V查看cuda版本,以此来测试cuda安装是否正确,环境变量是否识别成功
3 安装Huggingface
3.1 创建虚拟环境
python3 -m venv qwen && source qwen/bin/activate
然后进入到qwen目录(虚拟环境)
3.2 添加临时加速的镜像环境变量
export HF_ENDPOINT=https://hf-mirror.com
3.3 安装包Huggingface官方库+加速下载工具
pip install huggingface_hub hf_transfer
3.4 命令行下载模型
hf download -local-dir /opt/models_hf/Qwen/Qwen3.5-27B-AWQ-4bit
4. 安装Docker和Docker-Compose
参考文章blog.csdn.net/u013071014/…
Docker 下载链接
mirrors.aliyun.com/docker-ce/l…
Docker-Compose下载链接
docker.server服务文件
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
Docker 和 Docker-Compose自动安装脚本
#!/bin/bash
# Docker 和 Docker Compose 安装脚本
# 设置错误处理:任何命令失败则退出脚本
set -e
# 检查是否以 root 用户运行
if [[ $EUID -ne 0 ]]; then
echo "错误:此脚本必须使用 root 权限运行。"
exit 1
fi
# 解压 Docker 二进制包
echo "解压 Docker 二进制包..."
tar -xvzf docker*.tgz
# 移动 Docker 二进制文件到 /usr/bin
echo "安装 Docker 二进制文件..."
mv docker/* /usr/bin
# 移动 Docker 服务文件到 systemd 目录
echo "配置 Docker 服务..."
mv docker.service /usr/lib/systemd/system/
# 设置服务文件权限
chmod +x /usr/lib/systemd/system/docker.service
# 重新加载 systemd 守护进程
systemctl daemon-reload
# 启动 Docker 服务
systemctl start docker
# 启用 Docker 服务开机自启
systemctl enable docker
# 检查 Docker 版本
echo "Docker 版本:"
docker -v
# 移动 Docker Compose 二进制文件到 /usr/bin
echo "安装 Docker Compose..."
mv docker-compose /usr/bin/docker-compose
# 设置 Docker Compose 权限
chmod +x /usr/bin/docker-compose
# 检查 Docker Compose 版本
echo "Docker Compose 版本:"
docker-compose -v
echo "安装完成!"
5. 下载vLLM
docker pull docker.1ms.run/vllm/vllm-openai:latest
6. 下载安装NVIDIA Container Toolkit
参考文档:
6.1 设置包存储库和 GPG 密钥
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
6.2 下载 gpgkey
wget <https://nvidia.github.io/libnvidia-container/gpgkey>
cat gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
cat nvidia-container-toolkit.list | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
6.3 下载 nvidia-container-toolkit.list
apt-get update && apt-get install -y nvidia-container-toolkit
有下面的文件内容表示安装成功
6.4 重启docker
systemctl daemon-reload
systemctl restart docker
7. 创建docker-compose并部署
7.1 创建Docker网络
docker network create qwen-network
7.2 创建docker-compose.yaml
services:
vllm:
image: docker.1ms.run/vllm/vllm-openai:latest
container_name: vllm-Qwen3.5-9B-AWQ-4bit
runtime: nvidia
shm_size: '32gb'
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 2
capabilities: [gpu]
ports:
- "8000:8000"
volumes:
- /opt/models_hf/Qwen/Qwen3.5-9B-AWQ-4bit:/app/model
- ~/.cache/huggingface:/root/.cache/huggingface
networks:
qwen-network:
environment:
- HF_HUB_OFFLINE=1
- TRANSFORMERS_OFFLINE=1
- HF_HOME=/root/.cachei/huggingface
- VLLM_RPC_TIMEOUT=360
ipc: host
command: >
--model /app/model
--served-model-name Qwen3.5-9B-AWQ-4bit
--host 0.0.0.0
--port 8000
--tensor-parallel-size 2
--dtype auto
--max-model-len 16384
--gpu-memory-utilization 0.90
--reasoning-parser qwen3
--kv-cache-dtype auto
--enforce-eager
--enable-prefix-caching
restart: unless-stopped
networks:
qwen-network:
external: true
name: qwen-network
7.3 创建容器
docker-compose up -d
7.4 查看容器运行情况
docker ps -a
7.5 查看容器日志
docker logs container id -f
日志会显示模型规模显存占用情况和部署时参数
7.6 检查模型
参考文章blog.csdn.net/Scabbards_/…
curl http://localhost:8000/v1/models返回data数据及正常
7.7 命令行使用
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model":"/app/model", ### model是上面curl结果的id值
"messages":[
{"role":"user","content":"你好"}
]
}'
8. Open WebUI部署
参考文档:docs.openwebui.cn/
8.1 docker-compose
services:
openwebui:
image: ghcr.io/open-webui/open-webui:v0.8.9
container_name: open-webui
ports:
- "3000:8080"
volumes:
- open-webui-data:/app/backend/data
networks:
qwen-network:
environment:
- OPENAI_API_BASE_URL=http://vllm-Qwen3.5-9B-AWQ-4bit:8000/v1
- OPENAI_API_KEY=none
depends_on:
- vllm
restart: unless-stopped
volumes:
open-webui-data:
networks:
qwen-network:
external: true
name: qwen-network
8.2 web访问及设置
部署后若没有检测到模型,则通过设置添加模型接口,建议使用模型容器名或容器ip进行链接。