注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《GPT多模态大模型与AI Agent智能体》(跟我一起学人工智能)【陈敬雷编著】【清华大学出版社】

清华《GPT多模态大模型与AI Agent智能体》书籍配套视频课程【陈敬雷】

GPT多模态大模型与AI Agent智能体系列一百七十三

多从单图识别到多图对话,阿里多模态大模型 Qwen-VL 系列凭什么成为多模态 AI 新标杆?

7.3通义千问多模态大模型
通义千问多模态大模型系列,包括Qwen-VL、Qwen-VL-Chat、Qwen-VL-Plus和Qwen-VL-Max,是阿里巴巴集团在人工智能领域的一项重要创新。这一系列模型的推出,标志着中国在多模态人工智能技术上的迅速崛起,与国际领先水平的GPT-4V和谷歌的Gemini Ultra展开了激烈的竞争。
7.3.1开源Qwen-VL和Qwen-VL-Chat
Qwen-VL是阿里云研发的大规模视觉语言模型(Large Vision Language Model,LVLM)。Qwen-VL可以以图像、文本、检测框作为输入,并以文本和检测框作为输出。Qwen-VL系列模型的特点包括:
(1)强大的性能:在四大类多模态任务的标准英文测评中(Zero-shot Captioning/VQA/DocVQA/Grounding)上,均取得同等通用模型大小下最好效果;
(2)多语言对话模型:天然支持英文、中文等多语言对话,端到端支持图片里中英双语的长文本识别;
(3)多图交错对话:支持多图输入和比较,指定图片问答,多图文学创作等;
(4)首个支持中文开放域定位的通用模型:通过中文开放域语言表达进行检测框标注;
(5)细粒度识别和理解:相比于目前其它开源LVLM使用的224分辨率,Qwen-VL是首个开源的448分辨率的LVLM模型。更高分辨率可以提升细粒度的文字识别、文档问答和检测框标注。
开源Qwen-VL系列有两个模型:
(1)Qwen-VL:Qwen-VL以Qwen-7B的预训练模型作为语言模型的初始化,并以 Openclip ViT-bigG作为视觉编码器的初始化,中间加入单层随机初始化的Cross-Attention,经过约1.5B的图文数据训练得到。最终图像输入分辨率为448。
(2)Qwen-VL-Chat:在Qwen-VL基础上,使用对齐机制打造了基于大语言模型的视觉AI助手Qwen-VL-Chat,它支持更灵活的交互方式,包括多图、多轮问答、创作等能力。
接下来通过代码及脚本示例演示如何安装及使用Qwen-VL开源模型。
1.模型推理
下载源码到本地git clone https://github.com/QwenLM/Qwen-VL.git,然后切换到Qwen-VL目录,使用pip3 install -r requirements.txt安装依赖。部署环境要求:python 3.8及以上版本,pytorch 1.12及以上版本,推荐2.0及以上版本,建议使用CUDA 11.4及以上(GPU用户需考虑此选项)。模型推理支持Transformers或者ModelScope,使用Qwen-VL-chat进行推理的代码如下:

第6章/QwenVLChat_Inference.py

from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig
import torch
torch.manual_seed(1234)

请注意:分词器默认行为已更改为默认关闭特殊token攻击防护。

tokenizer = AutoTokenizer.from_pretrained(“Qwen/Qwen-VL-Chat”, trust_remote_code=True)

打开bf16精度,A100、H100、RTX3060、RTX3070等显卡建议启用以节省显存

model = AutoModelForCausalLM.from_pretrained(“Qwen/Qwen-VL-Chat”, device_map=“auto”, trust_remote_code=True, bf16=True).eval()

打开fp16精度,V100、P100、T4等显卡建议启用以节省显存

model = AutoModelForCausalLM.from_pretrained(“Qwen/Qwen-VL-Chat”, device_map=“auto”, trust_remote_code=True, fp16=True).eval()

使用CPU进行推理,需要约32GB内存

model = AutoModelForCausalLM.from_pretrained(“Qwen/Qwen-VL-Chat”, device_map=“cpu”, trust_remote_code=True).eval()

默认gpu进行推理,需要约24GB显存

model = AutoModelForCausalLM.from_pretrained(“Qwen/Qwen-VL-Chat”, device_map=“cuda”, trust_remote_code=True).eval()

可指定不同的生成长度、top_p等相关超参(transformers 5.32.0及以上无需执行此操作)

model.generation_config = GenerationConfig.from_pretrained(“Qwen/Qwen-VL-Chat”, trust_remote_code=True)

第一轮对话

query = tokenizer.from_list_format([
{‘image’: ‘https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg’}, # Either a local path or an url
{‘text’: ‘这是什么?’},
])
response, history = model.chat(tokenizer, query=query, history=None)
print(response)

图中是一名女子在沙滩上和狗玩耍,旁边是一只拉布拉多犬,它们处于沙滩上。

第二轮对话

response, history = model.chat(tokenizer, ‘框出图中击掌的位置’, history=history)
print(response)

击掌(536,509),(588,602)

image = tokenizer.draw_bbox_on_latest_picture(response, history)
if image:
image.save(‘1.jpg’)
else:
print(“no box”)
运行Qwen-VL类似,把Qwen/Qwen-VL-Chat替换为Qwen/Qwen-VL。通义千问提供了基于AutoGPTQ的量化方案,并提供了Qwen-VL-Chat的Int4量化版本Qwen-VL-Chat-Int4,该模型在效果评测上几乎无损,并在显存占用和推理速度上具有明显优势。
2.模型微调
Qwen-VL项目里finetune.py这个脚本供用户实现在自己的数据上进行微调的功能,以接入下游任务。此外,还提供了shell脚本减少用户的工作量。这个脚本支持DeepSpeed和FSDP。首先,需要准备训练数据。将所有样本放到一个列表中并存入JSON文件中。每个样本对应一个字典,包含id和conversation,其中后者为一个列表。示例如下所示:
[
{
“id”: “identity_0”,
“conversations”: [
{
“from”: “user”,
“value”: “你好”
},
{
“from”: “assistant”,
“value”: “我是Qwen-VL,一个支持视觉输入的大模型。”
}
]
},
{
“id”: “identity_1”,
“conversations”: [
{
“from”: “user”,
“value”: “Picture 1: https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg\n图中的狗是什么品种?”
},
{
“from”: “assistant”,
“value”: “图中是一只拉布拉多犬。”
},
{
“from”: “user”,
“value”: “框出图中的格子衬衫”
},
{
“from”: “assistant”,
“value”: “格子衬衫(588,499),(725,789)”
}
]
},
{
“id”: “identity_2”,
“conversations”: [
{
“from”: “user”,
“value”: “Picture 1: assets/mm_tutorial/Chongqing.jpeg\nPicture 2: assets/mm_tutorial/Beijing.jpeg\n图中都是哪”
},
{
“from”: “assistant”,
“value”: “第一张图片是重庆的城市天际线,第二张图片是北京的天际线。”
}
]
}
]
为针对多样的VL任务,增加了一下的特殊Tokens: 。对于带图像输入的内容可表示为Picture id:img_path\n{your prompt},其中id表示对话中的第几张图片。img_path可以是本地的图片或网络地址。对话中的检测框可以表示为(x1,y1),(x2,y2),其中 (x1, y1) 和(x2, y2)分别对应左上角和右下角的坐标,并且被归一化到[0, 1000)的范围内。检测框对应的文本描述也可以通过text_caption表示。准备好数据后,可以使用Qwen-VL项目里提供的Shell脚本实现微调。注意,需要在脚本中指定你的数据的路径。微调脚本支持全参数微调、LoRA、Q-LoRA三种方式。
1)全参数微调
默认下全参数微调在训练过程中更新大模型所有参数。实验得到的经验是在微调阶段不更新ViT的参数会取得更好的表现。可以运行这个脚本开始分布式训练:
sh finetune/finetune_ds.sh
尤其注意,需要在脚本中指定正确的模型名称或路径、数据路径、以及模型输出的文件夹路径。如果想修改deepspeed配置,可以删除掉–deepspeed这个输入或者自行根据需求修改DeepSpeed配置JSON文件。此外,此项目支持混合精度训练,因此可以设置–bf16 True或者–fp16 True。经验上,如果机器支持bf16,建议使用bf16,这样可以和通义千问的预训练和对齐训练保持一致,这也是为什么把默认配置设为它的原因。
2)LoRA微调
运行LoRA的方法类似全参数微调。但在开始前,请确保已经安装peft代码库。另外,记住要设置正确的模型、数据和输出路径。建议为模型路径使用绝对路径。这是因为LoRA仅存储adapter部分参数,而adapter配置JSON文件记录了预训练模型的路径,用于读取预训练模型权重。同样,可以设置bf16或者fp16。单卡训练使用如下脚本:
sh finetune/finetune_lora_single_gpu.sh
分布式训练使用如下脚本:
sh finetune/finetune_lora_ds.sh
与全参数微调不同,LoRA只更新Adapter层的参数而无需更新原有语言模型的参数。这种方法允许用户用更低的显存开销来训练模型,也意味着更小的计算开销。注意,如果使用预训练模型进行LoRA微调,而非Chat模型,模型的Embedding和输出层的参数将被设为可训练的参数。这是因为预训练模型没有学习过ChatML格式中的特殊Token,因此需要将这部分参数设为可训练才能让模型学会理解和预测这些Token。这也意味着,假如训练引入新的特殊Token,需要通过代码中的modules_to_save将这些参数设为可训练的参数。如果你想节省显存占用,可以考虑使用Chat模型进行LoRA微调,显存占用将大幅度降低。
3)Q-LoRA微调
如果依然遇到显存不足的问题,可以考虑使用Q-LoRA。该方法使用4比特量化模型以及Paged Attention等技术实现更小的显存开销。运行Q-LoRA,单卡训练使用如下脚本:
sh finetune/finetune_qlora_single_gpu.sh
分布式训练使用如下脚本:
sh finetune/finetune_qlora_ds.sh
建议使用Int4量化模型进行训练,即Qwen-VL-Chat-Int4。请不要使用非量化模型,与全参数微调以及LoRA不同,Q-LoRA仅支持fp16。此外,上述LoRA关于特殊Token的问题在Q-LoRA依然存在。并且Int4模型的参数无法被设为可训练的参数。Qwen-VL项目提供了Web UI供用户使用。在开始前,确保已经安装如下代码库,命令如下:
pip3 install -r requirements_web_demo.txt
随后运行如下命令,并点击生成Web链接,然后在浏览器访问即可:
Python3 web_demo_mm.py

更多技术内容

更多技术内容可参见
清华《GPT多模态大模型与AI Agent智能体》书籍配套视频【陈敬雷】
更多的技术交流和探讨也欢迎加我个人微信chenjinglei66。

总结

此文章有对应的配套新书教材和视频:

【配套新书教材】
《GPT多模态大模型与AI Agent智能体》(跟我一起学人工智能)【陈敬雷编著】【清华大学出版社】
新书特色:《GPT多模态大模型与AI Agent智能体》(跟我一起学人工智能)是一本2025年清华大学出版社出版的图书,作者是陈敬雷,本书深入探讨了GPT多模态大模型与AI Agent智能体的技术原理及其在企业中的应用落地。
全书共8章,从大模型技术原理切入,逐步深入大模型训练及微调,还介绍了众多国内外主流大模型。LangChain技术、RAG检索增强生成、多模态大模型等均有深入讲解。对AI Agent智能体,从定义、原理到主流框架也都进行了深入讲解。在企业应用落地方面,本书提供了丰富的案例分析,如基于大模型的对话式推荐系统、多模态搜索、NL2SQL数据即席查询、智能客服对话机器人、多模态数字人,以及多模态具身智能等。这些案例不仅展示了大模型技术的实际应用,也为读者提供了宝贵的实践经验。
本书适合对大模型、多模态技术及AI Agent感兴趣的读者阅读,也特别适合作为高等院校本科生和研究生的教材或参考书。书中内容丰富、系统,既有理论知识的深入讲解,也有大量的实践案例和代码示例,能够帮助学生在掌握理论知识的同时,培养实际操作能力和解决问题的能力。通过阅读本书,读者将能够更好地理解大模型技术的前沿发展,并将其应用于实际工作中,推动人工智能技术的进步和创新。

【配套视频】

清华《GPT多模态大模型与AI Agent智能体》书籍配套视频【陈敬雷】
视频特色: 前沿技术深度解析,把握行业脉搏

实战驱动,掌握大模型开发全流程

智能涌现与 AGI 前瞻,抢占技术高地

上一篇:《GPT多模态大模型与AI Agent智能体》系列一》大模型技术原理 - 大模型技术的起源、思想
下一篇:DeepSeek大模型技术系列五》DeepSeek大模型基础设施全解析:支撑万亿参数模型的幕后英雄

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐