Qwen-VL
简介
模型介绍
Qwen-VL 是阿里云研发的大规模视觉语言模型(Large Vision Language Model, LVLM)。Qwen-VL 可以以图像、文本、检测框作为输入,并以文本和检测框作为输出。 本仓库主要将Qwen-VL模型的任务迁移到了昇腾NPU上,并进行极致性能优化。
支持任务列表
本仓已经支持以下模型任务类型
| 模型 | 任务列表 | 是否支持 |
|---|---|---|
| Qwen-VL | 训练 | ✔ |
| Qwen-VL | 在线推理 | demo |
代码实现
-
参考实现:
url=https://github.com/QwenLM/Qwen-VL.git commit_id=aa00ed04091eea5fcdd32985e7915f1c53e7d599 -
适配昇腾 AI 处理器的实现:
url=https://gitcode.com/ascend/ModelZoo-PyTorch.git code_path=PyTorch/built-in/foundation/Qwen-VL
准备训练环境
安装模型环境
表 1 三方库版本支持表
| 三方库 | 支持版本(PT2.1) | 支持版本(PT2.4) |
|---|---|---|
| PyTorch | 2.1.0 | 2.4.0 |
在模型根目录下执行以下命令,安装模型对应PyTorch版本需要的依赖。
source ${cann_install_path}/ascend-toolkit/set_env.sh # 激活cann环境
cd Qwen-VL
# PyTorch 2.1请使用requirements_2_1.txt
pip install -r requirements_2_1.txt
# PyTorch 2.4请使用requirements_2_4.txt
pip install -r requirements_2_4.txt
修改transformers源码:
- ./site-packages/transformers/training_args.py:屏蔽1410~1422行
安装昇腾环境
请参考昇腾社区中《Pytorch框架训练环境准备》文档搭建昇腾环境,本仓已支持表2中软件版本。
表 2 昇腾软件版本支持表
| 软件类型 | 支持版本 |
|---|---|
| FrameworkPTAdapter | 在研版本 |
| CANN | 在研版本 |
| 昇腾NPU固件 | 在研版本 |
| 昇腾NPU驱动 | 在研版本 |
准备数据集
训练数据集准备
用户需自行制作数据集。参考Qwen-VL官方指导资料,将所有样本放到一个列表中并存入json文件中。每个样本对应一个字典,包含id和conversation,其中后者为一个列表。示例如下所示:
[
{
"id": "identity_0",
"conversations": [
{
"from": "user",
"value": "你好"
},
{
"from": "assistant",
"value": "我是Qwen-VL,一个支持视觉输入的大模型。"
}
]
},
{
"id": "identity_1",
"conversations": [
{
"from": "user",
"value": "Picture 1: <img>https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg</img>\n图中的狗是什么品种?"
},
{
"from": "assistant",
"value": "图中是一只拉布拉多犬。"
},
{
"from": "user",
"value": "框出图中的格子衬衫"
},
{
"from": "assistant",
"value": "<ref>格子衬衫</ref><box>(588,499),(725,789)</box>"
}
]
},
{
"id": "identity_2",
"conversations": [
{
"from": "user",
"value": "Picture 1: <img>assets/mm_tutorial/Chongqing.jpeg</img>\nPicture 2: <img>assets/mm_tutorial/Beijing.jpeg</img>\n图中都是哪"
},
{
"from": "assistant",
"value": "第一张图片是重庆的城市天际线,第二张图片是北京的天际线。"
}
]
}
]
为针对多样的VL任务,特殊tokens如下: <img> </img> <ref> </ref> <box> </box>.
-
对于带图像输入的内容可表示为
Picture id: <img>img_path</img>\n{your prompt},其中id表示对话中的第几张图片。"img_path"可以是本地的图片或网络地址。 -
对话中的检测框可以表示为
<box>(x1,y1),(x2,y2)</box>,其中(x1, y1)和(x2, y2)分别对应左上角和右下角的坐标,并且被归一化到[0, 1000)的范围内. 检测框对应的文本描述也可以通过<ref>text_caption</ref>表示。
获取预训练模型
用户可访问huggingface或ModelScope网站获取Qwen-VL-Chat或者Qwen-VL模型权重。
将其中的模型代码modeling_qwen.py更换成本项目中的./models/modeling_qwen.py文件,visual.py替换成./models/visual.py
快速开始
训练任务
本任务主要提供混精bf16的8卡训练脚本。
开始训练
-
进入解压后的源码包根目录。
cd /${模型文件夹名称} -
运行预训练脚本。
该模型支持单机8卡训练。
-
单机8卡训练
bash test/train_full_8p.sh --model_name=${预训练模型路径} --data_path=${训练数据集路径} # 8卡训练,混精bf16 bash test/train_performance_8p.sh --model_name=${预训练模型路径} --data_path=${训练数据集路径}# 8卡性能,混精bf16 -
模型训练python训练脚本参数说明如下。
finetune.py --per_device_train_batch_size //训练batch大小 --gradient_accumulation_steps //梯度累积大小 --num_train_epochs //设置训练轮数支持单机单卡demo版本推理:
bash test/infer_demo.sh # 运行单卡推理demo需要修改shell脚本中模型文件路径后运行。
-
训练结果
性能
| 芯片 | 卡数 | model_max_length | batch_size | gradient_accumulation_steps | AMP_Type | Torch_Version | tokens/p/s |
|---|---|---|---|---|---|---|---|
| GPU | 8p | 2048 | 1 | 16 | bf16 | 2.1 | 1796 |
| Atlas A2 | 8p | 2048 | 1 | 16 | bf16 | 2.1 | 1910 |
公网地址说明
代码涉及公网地址参考 public_address_statement.md
变更说明
变更
2024.04.29:首次发布
FAQ
- 如果出现SSL:CERTIFICATE_VERIFY_FAILED,可以手动将./site-packages/requests/adapters.py文件中,send函数中添加verify=False设置。