通义千问QwenVL最佳实践 从0开始

2023年 9月 22日 46.3k 0

序言

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版本。

image.png
已知截止本文发布,PyTorch最高支持的版本是11.8,所以推荐安装450版本的驱动保持稳定,否则可能出现不兼容的情况(实际我安装的是535版本驱动,PyTorch是通过pip安装的11.8版本,除个别包无法从源码构建外,暂未发现其他问题,可以正常运行模型)

image.png
安装驱动sudo apt install nvidia-driver-450-server,等待安装完成后,执行nvidia-smi可以输出gpu监控界面,则驱动安装成功!

安装CUDA

在CUDA Toolkit Archive中找到相应的版本。这里选用11.7的版本,采用runfile的安装形式。

image.png

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的接口规范。

相关文章

服务器端口转发,带你了解服务器端口转发
服务器开放端口,服务器开放端口的步骤
产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
如何使用 WinGet 下载 Microsoft Store 应用
百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

发布评论