【LLMs 入门实战 】第二式:MiniGPT4 模型学习与实战

2023年4月17日,多模态问答模型MiniGPT-4发布,实现了GPT-4里的宣传效果《MiniGPT-4: Enhancing Vision-language Understanding with Advanced Large Language Models》《MiniGPT-4:使用高级大语言模型增强视觉语言理解》

  • 模型介绍
    • 模型架构
    • 微调
    • 效果
  • Let's try it out!
    • 前期准备
      • Vicuna Weight
      • 下载 MiniGPT-4 checkpoint
      • 搭建环境
    • 在本地启动MiniGPT-4 demo
    • 训练MiniGPT-4

模型介绍

《MiniGPT-4:使用高级大语言模型增强视觉语言理解》

阿卜杜拉国王科技大学的几位博士(看名字都是中国人)开发,他们认为GPT-4 先进的多模态生成能力,主要原因在于利用了更先进的大型语言模型。为了验证这一想法,团队成员将一个冻结的视觉编码器(Q-Former&ViT)与一个冻结的文本生成大模型(Vicuna小) 进行对齐,造出了 MiniGPT-4。

模型架构

【LLMs 入门实战 】第二式:MiniGPT4 模型学习与实战_第1张图片
⬆️ MiniGPT-4的架构:由一个带有预训练ViT和Q-Former的视觉编码器、一个单一的线性投影层和一个先进的Vicuna大型语言模型组成。MiniGPT-4只需要训练线性投影层,使视觉特征与Vicuna对齐。

  • MiniGPT-4 具有许多类似于 GPT-4 的能力, 图像描述生成、从手写草稿创建网站等;
  • MiniGPT-4 还能根据图像创作故事和诗歌,为图像中显示的问题提供解决方案,教用户如何根据食物照片做饭等。

微调

  1. 在 4 个 A100 上用 500 万图文对训练;
  2. 再用一个小的高质量数据集训练,单卡 A100 训练只需要 7 分钟。

效果

在零样本 VQAv2 上,BLIP-2 相较于 80 亿参数的 Flamingo 模型,使用的可训练参数数量少了 54 倍,性能提升了 8.7 %。

Let’s try it out!

前期准备

Vicuna Weight

四步走:

  1. 下载 Vicuna Weight;
  2. 下载原始LLAMA-7B或LLAMA-13B权重;
  3. 构建真正的 working weight
  4. 配置模型路径:MiniGPT-4/minigpt4/configs/models/minigpt4.yaml第16行,将 “/path/to/vicuna/weights/” 修改为本地weight地址
# Vicuna
llama_model: "chat/vicuna/weight"   # 将 "/path/to/vicuna/weights/"  修改为本地 weight 地址

前三步参考【LLMs 入门实战 】第一式:Vicuna模型学习与实战

下载 MiniGPT-4 checkpoint

  • 方法一:从 google drive 下载
    Checkpoint Aligned with Vicuna 13B
    Checkpoint Aligned with Vicuna 7B
  • 方法二:从 huggingface 平台下载
    prerained_minigpt4_7b.pth
    pretrained_minigpt4.pth

然后在 MiniGPT-4/eval_configs/minigpt4_eval.yaml 的 第11行 设置 MiniGPT-4 checkpoint 路径

ckpt: '/path/to/pretrained/ckpt/'       # 修改为 MiniGPT-4 checkpoint 路径

搭建环境

这里插一句:如何在Colab中安装Conda
还有每一句命令前面都要记得加感叹号
【LLMs 入门实战 】第二式:MiniGPT4 模型学习与实战_第2张图片

!pip install -q condacolab
import condacolab
condacolab.install()
!conda --version
!conda env create -f environment.yml  # 这一句很费劲,A100跑了8min!我的小钱钱啊!
!source activate minigpt4

在本地启动MiniGPT-4 demo

python demo.py --cfg-path eval_configs/minigpt4_eval.yaml  --gpu-id 0

注:为了节省GPU内存,Vicuna默认加载为8位,波束搜索宽度为1。这种配置对于Vicuna 13B需要大约23G GPU内存,对于Vicuna7B需要大约11.5G GPU内存。对于更强大的GPU,您可以通过在配置文件minigpt4_eval.yaml中将low_resource设置为False以16位运行模型,并使用更大的波束搜索宽度。

效果图⬇️
【LLMs 入门实战 】第二式:MiniGPT4 模型学习与实战_第3张图片
图中有三片银杏叶,但是没有识别到;给的图片解释有点差强人意。

训练MiniGPT-4

MiniGPT-4的训练包含两个 alignment stages:

  1. 预训练阶段:使用 Laion和CC数据集的图像-文本对 来 训练模型,以对齐视觉和语言模型。要下载和准备数据集,请查看第一阶段数据集准备说明。在第一阶段之后,视觉特征被映射,并且可以被语言模型理解。要启动第一阶段培训,请运行以下命令。在我们的实验中,我们使用了4个A100(被优雅地劝退了==)。您可以在配置文件 train_configs/minigpt4_stage1_pretrain.yaml 中更改保存路径。只有第一阶段训练的MiniGPT-4 checkpoint 可以在这里下载:与第二阶段之后的模型相比,该 checkpoint 频繁地生成不完整和重复的句子。
torchrun --nproc-per-node NUM_GPU train.py --cfg-path train_configs/minigpt4_stage1_pretrain.yaml
  1. 在第二阶段,我们使用自己创建的小型高质量图像-文本对数据集,并将其转换为对话格式,以进一步对齐MiniGPT-4。要下载和准备我们的 第二阶段数据集,请查看我们的 second stage dataset preparation instruction。要启动第二阶段对齐,首先在 train_configs/minigpt4_stage1_pretrain.yaml 中指定阶段1中训练的 checkpoint 文件的路径。您也可以在那里指定输出路径。然后,运行以下命令。在我们的实验中,我们使用1 A100(这个可以有!)
torchrun --nproc-per-node NUM_GPU train.py --cfg-path train_configs/minigpt4_stage2_finetune.yaml

在第二阶段对齐后,MiniGPT-4能够连贯地谈论图像并且用户友好。

有了第一式做铺垫,再打第二式就不难啦!()

原图奉上⬇️

参考链接:https://github.com/km1994/LLMsNineStoryDemonTower/tree/main/mingpt4

你可能感兴趣的:(LLM九层妖塔,学习,python,算法,语言模型)