书生大模型实战营第四期L2G4000(InternVL 多模态模型部署微调实践)

多模态大模型简介

多模态大语言模型(Multimodal LargeLanguageModel)是指能够处理和融合多种不同类型数据(如文本、图像、音频、视频等)的大型人工智能模型。这些模型通常基于深度学习技术,能够理解和生成多种模态的数据,从而在各种复杂的应用场景中表现出强大的能力。

下面两个例子展示了MLLM的能力:

多模态研究的重点是不同模态特征空间的对齐

模态对齐范式

介绍两种对齐范式,分别使用了Q-Former和MLP来做对齐。

Q-Former(BLIP系列)

BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models

BLIP系列工作提出了Q-Former结构来对齐视觉和文本两个模态。模型总体的工作流程如下。


对于Q-Former部分,其设计较为复杂,如下:

具体来说,Q-Former类似传统多模态模型,优化了三个loss:

  • ITMloss:图文匹配
  • LM loss: Predict Next Token
  • ITC loss:对比学习

架构设计:

  • 共享SelfAttention:模态交融
  • 专家FFN:处理差异化模态信息

后来,KAUST的团队利用Q-Former给出了GPT-4的一个开源实现Minigpt-4

MLP(LLaVA系列)

haotian-liu/LLaVA: [NeurIPS'23 Oral] Visual Instruction Tuning (LLaVA) built towards GPT-4V level capabilities and beyond.

LLaVA的想法比Q-Former简单很多,就是把CLIP的Vision Encoder用一个线性层(或者MLP)变换后对齐到文本表示中,对齐的时候甚至只学线性层,但是效果却很好。

后面针对高分辨率的图像,给出了处理办法:

为什么用Q-Former的变少了 

  • 收敛速度慢:Q-Former的参数量较大(例如BLIP-2中的100M参数),导致其在训练过程中收敛速度较慢。相比之下,MLP作为connector的模型(如LLaVA-1.5)在相同设置下能够更快地收敛,并且取得更好的性能。
  • 性能收益不明显:在数据量和计算资源充足的情况下,Q-Former并没有展现出明显的性能提升。即使通过增加数据量和计算资源,Q-Former的性能提升也并不显著,无法超越简单的MLP方案。

为什么大家都用LLaVA

  • 更强的baselinesetting:LLaVA-1.5通过改进训l练数据,在较少的数据量和计算资源下取得了优异的性能,成为了一个强有力的baseline。相比之下,BLIP2的后续工作lnstructBLIP在模型结构上的改进并未带来显著的性能提升,且无法推广至多轮对话。
  • 模型结构的简洁性:LLaVA系列采用了最简洁的模型结构,而后续从模型结构上进行改进的工作并未取得明显的效果。这表明,在当前的技术和数据条件下,简洁的模型结构可能更为有效。

InternVL2简介

模型架构

LLaVA式架构设计(ViT-MLP-LLM):

  • InternLM2-20B
  • InternViT-6B
  • MLP

ViT

Pixel Shuffle

Dynamic High-Resolution

Multitask Output

这部分还是很有意思的,训练了很多针对不同视觉任务的embedding,可以干很多不同的事情。

训练方法

LMDeploy部署多模态模型

我们可以使用UI界面先体验与InternVL对话:

拉取本教程的github仓库https://github.com/Control-derek/InternVL2-Tutorial.git

git clone https://github.com/Control-derek/InternVL2-Tutorial.git
cd InternVL2-Tutorial

启动demo:

conda activate lmdeploy
python demo.py

进入网页。点击Start Chat即可开始聊天,下方食物快捷栏可以快速输入图片,输入示例可以快速输入文字。输入完毕后,按enter键即可发送。

这个问题大模型回答的不准,等会看看微调后效果如何。

XTuner微调实践

根据指引准备基本的配置文件,包括模型和数据路径,超参数,LoRA算法相关参数等。

我们要使用的数据集路径是/root/share/datasets/FoodieQA,是一个图片问答的数据集。

开始微调,运行命令:

xtuner train /root/xtuner/xtuner/configs/internvl/v2/internvl_v2_internlm2_2b_lora_finetune_food.py --deepspeed deepspeed_zero2

微调结束

微调后,把模型checkpoint的格式转化为便于测试的格式:

python xtuner/configs/internvl/v1_5/convert_to_official.py xtuner/configs/internvl/v2/internvl_v2_internlm2_2b_lora_finetune_food.py ./work_dirs/internvl_v2_internlm2_2b_lora_finetune_food/iter_640.pth ./work_dirs/internvl_v2_internlm2_2b_lora_finetune_food/lr35_ep10/

微调前后效果对比

到demo.py中修改模型路径为微调好的文件,然后运行,这次正确给出了羊肉串的菜系。

Huggingface

可以在https://huggingface.co/stinkypudding/Food_InternVL处找到本模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值