序言
Qwen-VL 是阿里云研发的大规模视觉语言模型(Large Vision Language Model, LVLM)。Qwen-VL 可以以图像、文本、检测框作为输入,并以文本和检测框作为输出。Qwen-VL 系列模型的特点包括:
- 强大的性能:在四大类多模态任务的标准英文测评中(Zero-shot Captioning/VQA/DocVQA/Grounding)上,均取得同等通用模型大小下最好效果;
- 多语言对话模型:天然支持英文、中文等多语言对话,端到端支持图片里中英双语的长文本识别;
- 多图交错对话:支持多图输入和比较,指定图片问答,多图文学创作等;
- 首个支持中文开放域定位的通用模型:通过中文开放域语言表达进行检测框标注;
- 细粒度识别和理解:相比于目前其它开源LVLM使用的224分辨率,Qwen-VL是首个开源的448分辨率的LVLM模型。更高分辨率可以提升细粒度的文字识别、文档问答和检测框标注。
环境
硬件
系统:Ubuntu Server 20.04 LTS
显卡:NVIDIA A100 80GB(推荐使用15GB+显存的显卡设备)
软件
- Python 3.8及以上版本
- Pytorch 1.12及以上版本,推荐2.0及以上版本
- 建议使用CUDA 11.4及以上
服务器
Ubuntu Server需自行安装,如果你使用的是Ubuntu Desktop请谨慎参考我的案例
基础配置
Ubuntu默认不允许使用ssh通过root用户登录,配置ssh开启该权限
vim /etc/ssh/sshd_config
# 修改为yes
PermitRootLogin yes
为root用户设置密码sudo passwd root
,重启SSH服务sudo systemctl restart ssh
安装NVIDIA驱动
查看是否安装了gccgcc -v
,如果没有安装的话,执行sudo apt-get install build-essential
安装开发工具包
禁用nouveau驱动
touch /etc/modprobe.d/blacklist-nouveau.conf
编辑 /etc/modprobe.d/blacklist-nouveau.conf 文件,添加以下内容:
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off
关闭nouveau:
echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf
完成后,重新生成内核并重启:
sudo update-initramfs -u
sudo reboot
重启后,执行:lsmod | grep nouveau
。如果没有屏幕输出,说明禁用nouveau成功。
安装驱动
使用命令ubuntu-drivers devices
获取可用驱动信息,如果命令不存在执行apt install ubuntu-drivers-common
安装。
ERROR:root:could not open aplay -l
Traceback (most recent call last):
File "/usr/share/ubuntu-drivers-common/detect/sl-modem.py", line 35, in detect
aplay = subprocess.Popen(
File "/usr/lib/python3.8/subprocess.py", line 858, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/usr/lib/python3.8/subprocess.py", line 1704, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'aplay'
== /sys/devices/pci0000:16/0000:16:00.0/0000:17:00.0 ==
modalias : pci:v000010DEd000020B2sv000010DEsd00001463bc03sc02i00
vendor : NVIDIA Corporation
driver : nvidia-driver-525-server - distro non-free
driver : nvidia-driver-525 - distro non-free
driver : nvidia-driver-470-server - distro non-free
driver : nvidia-driver-525-open - distro non-free
driver : nvidia-driver-450-server - distro non-free
driver : nvidia-driver-535-server - distro non-free
driver : nvidia-driver-535-server-open - distro non-free recommended
driver : nvidia-driver-535 - distro non-free
driver : nvidia-driver-470 - distro non-free
driver : nvidia-driver-535-open - distro non-free
driver : xserver-xorg-video-nouveau - distro free builtin
上述是我的设备打印的信息,第一行报错不影响,系统推荐我安装nvidia-driver-535-server-open
这个驱动。
NVIDIA CUDA工具包发布说明,检查系统推荐驱动是否如何需要的CUDA版本。
已知截止本文发布,PyTorch最高支持的版本是11.8,所以推荐安装450版本的驱动保持稳定,否则可能出现不兼容的情况(实际我安装的是535版本驱动,PyTorch是通过pip安装的11.8版本,除个别包无法从源码构建外,暂未发现其他问题,可以正常运行模型)
安装驱动sudo apt install nvidia-driver-450-server
,等待安装完成后,执行nvidia-smi
可以输出gpu监控界面,则驱动安装成功!
安装CUDA
在CUDA Toolkit Archive中找到相应的版本。这里选用11.7的版本,采用runfile的安装形式。
wget https://developer.download.nvidia.com/compute/cuda/11.7.1/local_installers/cuda_11.7.1_515.65.01_linux.run
sudo sh cuda_11.7.1_515.65.01_linux.run
下载过程取决于你的网速,执行脚本后会出现交互,Accept英伟达的协定,注意已经安装过显卡驱动,需要通过Enter
键,取消Driver
的安装,然后点击Install
。出现下述输出即代表CUDA安装成功!
===========
= Summary =
===========
Driver: Not Selected
Toolkit: Installed in /usr/local/cuda-11.7/
...
配置CUDA环境变量
在~/.bashrc文件中添加如下环境变量
export PATH=/usr/local/cuda-11.7/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
载入配置文件source .bashrc
# 验证是否安装成功
nvcc -V
# 如下输出为成功安装
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
...
部署模型
安装Miniconda
cd /opt
mkdir -p /opt/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /opt/miniconda3/miniconda.sh
bash /opt/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm -rf /opt/miniconda3/miniconda.sh
初始化Miniconda
/opt/miniconda3/bin/conda init bash
注销后重新登录,Conda base环境默认被加载
创建虚拟环境
# qwen为虚拟环境名称 3.8为Python版本
conda create -n qwen python=3.8
# 切换至qwen虚拟环境
conda activate qwen
# 退出虚拟环境
conda deactivate
安装Pytorch
在CUDA版本适配的情况下在Pytorch官网使用Conda安装,也可以使用pip安装
# pip安装torch
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# 测试环境 输出True
import torch
print(torch.cuda.is_available())
下载源码
通义千问-VL,把代码Clone到本地。
mkdir -p /home/qwen && cd /home/qwen
git clone https://github.com/QwenLM/Qwen-VL.git
Clone不下来请换国内镜像或科学上网
下载模型
ali已经将训练好的通义模型从Hugging Face和ModelScope删除,具体原因未知,但有好心人已经保存了副本,ModelScope社区中可以搜索到,有空我会上传到阿里网盘中给大家下载。
mkdir -p /home/model && cd /home/model
git clone https://www.modelscope.cn/ccyh123/Qwen-VL-Chat-Int4
模型10GB+需要耐心等待...
启动
安装工程依赖
pip install optimum
pip install auto-gptq
pip install -r requirements.txt
注:如果安装报错换国内源重试
运行Web-UI
# 安装依赖
cd /home/qwen/Qwen-VL/
pip install -r requirements_web_demo.txt
cd /home
# 启动模型
python ./qwen/Qwen-VL/web_demo_mm.py -c ./model/Qwen-VL-Chat-Int4 --server-name 0.0.0.0 --server-port 8000
可以通过ip:8000访问UI页面,进行对话。
运行API
# 安装依赖
cd /home/qwen/Qwen-VL/
pip install -r requirements_openai_api.txt
cd /home
# 启动模型
python ./qwen/Qwen-VL/openai_api.py -c ./model/Qwen-VL-Chat-Int4 --server-name 0.0.0.0 --server-port 8080
可以通过ip:8080/docs查看FastApi文档,已经实现OpenAI的接口规范。