首页 > 其他分享 >【书生实战营】- L2G4000 InternVL 多模态模型部署微调实践

【书生实战营】- L2G4000 InternVL 多模态模型部署微调实践

时间:2024-11-25 16:34:11浏览次数:8  
标签:模态 微调 v2 L2G4000 xtuner InternVL internvl

文章目录

InternVL 部署微调实践

多模态大模型简介

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

常见的MLLM:InternVL、GPT-4o、Qwen-VL、LLaVA

在这里插入图片描述

![[屏幕截图 2024-11-18 174157.png]]

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

BLIP2

在这里插入图片描述

Q-Former

类似传统多模态,三个loss:

  • ITM loss: 图文匹配
  • LM loss: Predict Next Token
  • ITC loss: 对比学习
    架构设计:
  • 共享Self Attention模态交融
  • 专家FFN:处理差异化模态信息
    在这里插入图片描述

MiniGPT-4

在这里插入图片描述

LLaVa

在这里插入图片描述
LLaVA-1.5-HD
在这里插入图片描述
直接resize可能丢失细节信息
LLaVA-NeXT
动态分辨率:336*[(2,2),(1,2),(2,1),(1,3),(3,1),(1,4),(4,1)]
更强的分辨率

为什么用Q-Former的变少了

  • 收敛速度慢:Q-Former的参数量较大(例如BLIP-2中的100M参数),导致其在训练过程中收敛速度较慢。相比之下,MLP作为connector的模型(如LLaVA-1.5)在相同设置下能够更快地收敛,并且取得更好的性能。

  • 性能收益不明显:在数据量和计算资源充足的情况下,Q-Former并没有展现出明显的性能提升。即使通过增加数据量和计算资源,Q-Former的性能提升也并不显著,无法超越简单的MLP方案。

  • 更强的baseline setting:LLaVA-1.5通过改进训练数据,在较少的数据量和计算资源下取得了优异的性能,成为了一个强有力的baseline。相比之下,BLIP2的后续工作InstructBLIP在模型结构上的改进并未带来显著的性能提升,且无法推广至多轮对话。

  • 模型结构的简洁性:LLaVA系列采用了最简洁的模型结构,而后续从模型结构上进行改进的工作并未取得明显的效果。这表明,在当前的技术和数据条件下,简洁的模型结构可能更为有效。

InternVL2简介

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

  • InternLM2-20B
  • InternViT-6B
  • MLP
    在这里插入图片描述

InternViT

在这里插入图片描述
Intern ViT-6B-448px-V1.2

  • 倒数第四层特征最有用,砍掉后三层,共45层
  • 分辨率从224扩展到448
  • 与LLM联合训练时,在captioning和OCR数据集上训练, 获取高分辨率和OCR能力
    Intern ViT-6B-448px-V1.5
  • 动态分辨率,最多12个tile
  • 更高质量的数据

Pixel Shuffle

  • Why:448*448的图,patch大小为14*14,得到32*32=1024个patch,即视觉插入1024个token。这些信息有较大冗余,消耗较多的计算资源,对长的多模态上下文拓展不利。
  • What:Pixel shuffle技术来自超分那边,是把不同通道的特征拿出来,拼到一个通道上,从 ( N , C × r 2 , H , W ) (N,C×r^2,H,W) (N,C×r2,H,W)转化为 ( N , C , H × r , W × r ) (N,C,H\times r,W\times r) (N,C,H×r,W×r)。r是上采样因子。
  • How:这里把采样因子设为0.5,就可以把(4096*0.5*0.5,32,32)的图像特征转化为(4096,32*0.5,32*0.5),下采样到256个token了。
    在这里插入图片描述

Dynamic High-Resolution

  • Pre-defined Aspect Ratios:考虑到计算资源,设置最多12个tile,就有35种长宽比的排列组合(m*n,m,n≤12;12+6+4+3+2+2+6)。
  • Match and split:选择最接近的长宽比,resize过去,切片成448*448的tiles。
  • Thumbnail:某些任务需要全局信息,为了更好的感知全局信息,把原图resize到448*448,一块喂给LLM
    在这里插入图片描述

Multitask output

  • 利用VisionLLMv2的技术,初始化了一些任务特化embedding(图像生成、分割、检测), 添加了一些任务路由token
  • 训练下游任务特化embedding,生成路由token时,把任务embedding拼在路由embedding后面,送给LLM拿到hidden_state
  • 把hidden_state送给路由到的解码器中,生成图像/bounding box/masks
    在这里插入图片描述

训练

  • 第一阶段:训MLP,用高质量预训练数据(各种视觉任务)
  • 第二阶段:ViT+MLP+LLM联合训练,用高质量视觉-文本指令任务
    在这里插入图片描述
    示例
    在这里插入图片描述

InternVL部署 - LMDeploy

训练环境

conda create --name xtuner-env python=3.10 -y
conda activate xtuner-env

安装与deepspeed集成的xtuner和相关包:

pip install -U 'xtuner[deepspeed]' timm==1.0.9
pip install torch==2.4.1 torchvision==0.19.1 torchaudio==2.4.1 --index-url https://download.pytorch.org/whl/cu121
pip install transformers==4.39.0

推理环境

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

"lmdeploy"为推理使用环境名。

网页应用部署

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

启动demo

conda activate lmdeploy
python demo.py

在这里插入图片描述
在这里插入图片描述

对话:
在这里插入图片描述
模型把新疆菜错认成宫保鸡丁。
下面进行微调

InternVL微调

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_foo
d.py

数据集下载
https://huggingface.co/datasets/lyan62/FoodieQA

shell
huggingface-cli download --repo-type dataset --resume-download lyan62/FoodieQA --local-dir /root/huggingface/FoodieQA --local-dir-use-symlinks False

由于原始数据集格式不符合微调需要格式,需要处理方可使用,在InternVL2-Tutorial下,运行:

python process_food.py

利用share目录下处理好的数据集
由于该数据集即需要登录huggingface的方法,又需要申请,下完还需要自己处理,因此我把处理后的文件放在开发机的/root/share/datasets/FoodieQA路径下了。

开始微调:

xtuner train internvl_v2_internlm2_2b_lora_finetune_food --deepspeed deepspeed_zero2

![[Pasted image 20241121160119.png]]

在这里插入图片描述

微调后,把模型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的MODEL_PATH
MODEL_PATH = "/root/fintune/xtuner/work_dirs/internvl_v2_internlm2_2b_lora_finetune_food/lr35_ep10"

微调前
在这里插入图片描述
微调后:询问同样问题
在这里插入图片描述

识别正确!

参考资料

Tutorial/docs/L2/InternVL at camp4 · InternLM/Tutorial
Tutorial/docs/L2/InternVL/task.md at camp4 · InternLM/Tutorial
多模态大模型发展简述及其微调部署实践(InternVL2为例)_哔哩哔哩_bilibili

标签:模态,微调,v2,L2G4000,xtuner,InternVL,internvl
From: https://blog.csdn.net/ffffflk/article/details/143952964

相关文章

  • Bootstrap4动态模态窗口jquery插件
    在线预览 下载 这是一款Bootstrap4动态模态窗口jquery插件。通过该jquery插件,可以动态生成bootstrap4的模态窗口,可以实现简单的弹出框,对话框,以及复杂结构的模态窗口。 使用方法在页面中引入jquery.min.js、bootstrap-show-modal.js文件,以及bootstrap4相关文件。......
  • 多模态大模型(4)--InstructBLIP
    BLIP-2通过冻结的指令调优LLM以理解视觉输入,展示了在图像到文本生成中遵循指令的初步能力。然而,由于额外的视觉输入由于输入分布和任务多样性,构建通用视觉语言模型面临很大的挑战。因而,在视觉领域,指令调优技术仍未被充分探索。InstructBLIP(《InstructBLIP:TowardsGeneral-......
  • 【VMD-SSA-LSSVM】基于变分模态分解与麻雀优化Lssvm的负荷预测【多变量】(Matlab代码实
     ......
  • Apple提出MM1.5:多模态大型语言模型微调的方法、分析和见解
    摘要我们介绍了MM1.5,一个新的多模态大型语言模型(MLLM)家族,旨在增强在富文本图像理解、视觉参照和定位以及多图像推理方面的能力。在MM1架构的基础上,MM1.5采用以数据为中心的模型训练方法,系统地探索了整个模型训练生命周期中各种数据混合的影响。这包括用于持续预......
  • 2025秋招LLM大模型多模态面试题(十一)-- 大模型评测方法与工具
    目录引言大模型评测方法综述1.自动评测与人工评测2.大模型的Honest原则如何衡量大模型的水平1.任务分类......
  • InternVid:用于多模态视频理解与生成的大规模视频-文本数据集 | ICLR Spotlight
    InternVid 是一个开源的大规模视频-文本数据集,旨在促进视频理解和生成任务的发展,由上海人工智能实验室与南京大学、中国科学院等单位联合发布,相关的工作已经被ICLR2024接收。它包含超过700万个视频,总时长近76万小时,并附带详细的文本描述。InternVid的发布将推动文本-视频......
  • InternVL2识别边界框实践:捕获股票K线图启明之星
    本文作者:谢志军,某互联网金融证券公司,算法工程师https://github.com/OpenGVLab/InternVL写在前面YOLO系列模型实现了对现实世界广泛物体的边界框识别,最新的开源多模态大模型(MLLM)/视觉语言模型(VLM)宣称能够给出特定物体的边界框坐标。笔者测试了一些常规图片并询问MLLM......
  • 多模态论文串讲-学习笔记(下)
    入门参考:跟着chatgpt一起学|多模态入门-CSDN博客学习笔记(上):多模态论文串讲-学习笔记(上)-CSDN博客学习参考:多模态论文串讲·下【论文精读·49】_哔哩哔哩_bilibili学习笔记上介绍只使用transformer encoder的方法,本文来介绍下同时使用transformerencoder和decoder的方法。......
  • 掌握未来:2025年秋招LLM及多模态模型面试精华
    目录大模型常用微调方法LoRA和Ptuning的原理介绍StableDiffusion的原理为何现在的大模型大部分是Decoder-only结构如何缓解LLMs复读机问题为什么Transformer块使用LayerNorm而不是BatchNormTransformer为何使用多头注意力机制监督微调SFT后LLM表现下降的原因微调阶段样本......
  • 多模态大语言模型(MLLM)-InstructBlip深度解读
    前言InstructBlip可以理解为Blip2的升级版,重点加强了图文对话的能力。模型结构和Blip2没差别,主要在数据集收集、数据集配比、指令微调等方面下文章。创新点数据集收集:将26个公开数据集转换为指令微调格式,并将它们归类到11个任务类别中。使用了其中13个数据集来进行指令......