一、理解多模态大模型的常见设计模式,可以大概讲出多模态大模型的工作原理。

视频地址 开源的多模态大模型:InternVL,Qwen-VL,LLaVA
闭源的:GPT-4o

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

BLIP2

将图像特征对齐到文本空间中

L2G4000 InternVL 部署微调实践闯关任务_数据集


Q-Former,双塔结构,分别处理图像输入和文字输入,用三个loss来优化模型(用MASK来区分三种任务)

L2G4000 InternVL 部署微调实践闯关任务_模态_02


缺点:

L2G4000 InternVL 部署微调实践闯关任务_llm_03


L2G4000 InternVL 部署微调实践闯关任务_设计模式_04

MiniGPT-4

开源版GPT4
采用Q-Former和VIT

L2G4000 InternVL 部署微调实践闯关任务_数据集_05

LLaVA

用图像编码器和一层线性层把图像映射到文本空间,然后和文本指令embedding拼接在一起

L2G4000 InternVL 部署微调实践闯关任务_llm_06

LLaVA-1.5-HD

图像切片、缩略图,作为输入

然后一层MLP换成两层

L2G4000 InternVL 部署微调实践闯关任务_llm_07

LLaVA-NeXT

采用动态分辨率,找到最接近的长宽比,放缩过去再切块

L2G4000 InternVL 部署微调实践闯关任务_数据集_08

二、了解InternVL2的设计模式,可以大概描述InternVL2的模型架构和训练流程

L2G4000 InternVL 部署微调实践闯关任务_模态_09

Dynamic High Resolution

原图切片

L2G4000 InternVL 部署微调实践闯关任务_设计模式_10

InternViT

L2G4000 InternVL 部署微调实践闯关任务_设计模式_11

  1. vision encoder的参数量增大
  2. 较之clip的对比学习,没有丢弃text encoder。
  3. 实验发现倒数第四层好用,就去掉了后面三层
  4. 扩展分辨率
  5. 在高分辨率和OCR数据集上训练

V1.5版本中,加了动态分辨率和高质量数据。

Pixel Shuffle

将图像进行下采样,

有利于减少计算资源,扩大多模态的上下文长度

L2G4000 InternVL 部署微调实践闯关任务_模态_12

多任务输出

用任务路由token决定执行什么任务

L2G4000 InternVL 部署微调实践闯关任务_设计模式_13

训练

先训MLP,再把所有模块都微调

L2G4000 InternVL 部署微调实践闯关任务_模态_14

三、了解LMDeploy部署多模态大模型的核心代码,并运行提供的gradio代码,在UI界面体验与InternVL2的对话

0.工作原理了解

1.环境配置

创建训练环境,用之前的xtuner-env就行,只要多装timm包就好
pip install -U ‘xtuner[deepspeed]’ timm==1.0.9

推理环境配置,需要用上书生生态链的lmdeploy

conda create -n lmdeploy python=3.10 -y
conda activate lmdeploy
pip install lmdeploy gradio==4.44.1 timm==1.0.9

L2G4000 InternVL 部署微调实践闯关任务_llm_15

2.LMDeploy部署

L2G4000 InternVL 部署微调实践闯关任务_llm_16

松鼠鳜鱼识别失败

L2G4000 InternVL 部署微调实践闯关任务_llm_17

四、了解XTuner,并利用给定数据集微调InternVL2-2B后,再次启动UI界面,体验模型美食鉴赏能力的变化。

1.微调实践

开发机没有/root/xtuner路径,可以用/root/finetune/xtuner代替。
克隆的命令也改为
cp /root/InternVL2-Tutorial/xtuner_config/internvl_v2_internlm2_2b_lora_finetune_food.py /root/finetune/xtuner/xtuner/configs/internvl/v2/internvl_v2_internlm2_2b_lora_finetune_food.py

2.下载数据集

FoodieQA需要在hugging face上先提交申请,比较麻烦
因此可以用share目录下已经处理好的数据集
用软连接即可

ln -s /root/share/datasets/FoodieQA /root/huggingface/FoodieQA

3.开始微调

我是在/root/finetuner/xtuner/目录下运行微调指令的

xtuner train internvl_v2_internlm2_2b_lora_finetune_food --deepspeed deepspeed_zero2

L2G4000 InternVL 部署微调实践闯关任务_模态_18


L2G4000 InternVL 部署微调实践闯关任务_设计模式_19


格式转换:

L2G4000 InternVL 部署微调实践闯关任务_数据集_20

4.部署

修改demo.py里的路径为

MODEL_PATH = "/root/finetune/xtuner/work_dirs/internvl_v2_internlm2_2b_lora_finetune_food/lr35_ep10"
可以看到,训完之后它对于苏菜的松鼠鳜鱼识别还是错误,识别成了浙菜油爆虾。但是较之未训练的模型来说,至少没有笼统的列出属于中国菜,有所进步,

L2G4000 InternVL 部署微调实践闯关任务_设计模式_21


L2G4000 InternVL 部署微调实践闯关任务_模态_22