MiniGPT-4 模型学习与实战

1 前言

MiniGPT-4 是一个冻结的视觉编码器(Q-Former&ViT)与一个冻结的 文本生成大模型(Vicuna,江湖人称:小羊驼) 进行对齐造出来的。

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

2 模型介绍

2.1 模型结构介绍
  • 投影层(Projection Layer)是神经网络中常见层类型,将输入数据从一个空间映射到另一个空间。
  • NLP中,投影层通常用于将高维词向量映射到低维空间,以减少模型参数数量和计算量。
  • CV中,投影层可以将高维图像特征向量映射到低维空间,以便于后续处理和分析。

在这里插入图片描述

2.2 fine tune 介绍
  • 先是在 4 个 A100 上用 500 万图文对训练
  • 然后再用一个小的高质量数据集训练,单卡 A100 训练只需要 7 分钟。
2.3 模型效果介绍

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

3 环境搭建

3.1 下载代码
git clone https://github.com/Vision-CAIR/MiniGPT-4.git
3.2 构建环境
cd MiniGPT-4
conda env create -f environment.yml
conda activate minigpt4

4 MiniGPT-4 模型下载

  • 参考:How to Prepare 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地址
4.1 下载 Vicuna Weight

当前版本的MiniGPT-4是建立在v0版本的 Vicuna-13B 之上的。请参考我们的说明来准备 Vicuna weights。最终的权重将在结构类似于以下的单个文件夹中:

git clone https://huggingface.co/lmsys/vicuna-13b-delta-v1.1
# or
git clone https://huggingface.co/lmsys/vicuna-7b-delta-v1.1
  • 请注意,这不是直接的 working weight ,而是LLAMA-13B的 working weight 与 original weight 的差值。(由于LLAMA的规则,我们无法分配LLAMA的 weight 。
4.2 下载 LLAMA Weight
git clone https://huggingface.co/decapoda-research/llama-13b-hf  # more powerful, need at least 24G gpu memory
# or
git clone https://huggingface.co/decapoda-research/llama-7b-hf  # smaller, need 12G gpu memory

量力而行⬆️上面是官方教程给的,但是7b的权重文件和vicuna-delta的7b对不上
📢注意:LLAMA的权重用这个更好:
llama-7b

4.3 构建真正的 working weight

当这两个 weight 备好后,我们可以使用Vicuna团队的工具来创建真正的 working weight 。首先,安装与v0 Vicuna兼容的库

pip install git+https://github.com/lm-sys/FastChat.git@v0.1.10

执行如下命令创建最终 working weight:

python -m fastchat.model.apply_delta --base /path/to/llama-13bOR7b-hf/  --target /path/to/save/working/vicuna/weight/  --delta /path/to/vicuna-13bOR7b-delta-v1.1/ --low-cpu-mem
>>>
The tokenizer class you load from this checkpoint is not the same type as the class this function is called from. It may result in unexpected tokenization. 
The tokenizer class you load from this checkpoint is 'LLaMATokenizer'. 
The class this function is called from is 'LlamaTokenizer'.
Split files for the base model to /tmp/tmptu2g17_d
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████| 33/33 [01:47<00:00,  3.26s/it]
Split files for the delta model to /tmp/tmpol8jc2oy
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [01:03<00:00, 31.92s/it]
Applying the delta
33it [02:09,  3.91s/it]
Saving the target model to vicuna/weight/
  • 注:低CPU内存需加入–low-cpu-mem,可以把大的权重文件分割成多个小份,并使用磁盘作为临时存储。可以使峰值内存保持在16GB以下。不然无法载入vicuna增量文件,CPU内存占满,程序直接被kill,

output

config.json           pytorch_model-16.bin  pytorch_model-23.bin  pytorch_model-30.bin  pytorch_model-8.bin
pytorch_model-0.bin   pytorch_model-17.bin  pytorch_model-24.bin  pytorch_model-31.bin  pytorch_model-9.bin
pytorch_model-10.bin  pytorch_model-18.bin  pytorch_model-25.bin  pytorch_model-32.bin  pytorch_model.bin.index.json
pytorch_model-11.bin  pytorch_model-19.bin  pytorch_model-26.bin  pytorch_model-3.bin   special_tokens_map.json
pytorch_model-12.bin  pytorch_model-1.bin   pytorch_model-27.bin  pytorch_model-4.bin   tokenizer_config.json
pytorch_model-13.bin  pytorch_model-20.bin  pytorch_model-28.bin  pytorch_model-5.bin   tokenizer.model
pytorch_model-14.bin  pytorch_model-21.bin  pytorch_model-29.bin  pytorch_model-6.bin
pytorch_model-15.bin  pytorch_model-22.bin  pytorch_model-2.bin   pytorch_model-7.bin
4.4 配置 模型路径
#minigpt4/configs/models/minigpt4.yaml
# Vicuna
llama_model: "chat/vicuna/weight"   # 将 "/path/to/vicuna/weights/"  修改为本地 weight 地址

比如:

model:arch: mini_gpt4# vit encoderimage_size: 224drop_path_rate: 0use_grad_checkpoint: Falsevit_precision: "fp16"freeze_vit: Truefreeze_qformer: True# Q-Formernum_query_token: 32# Vicunallama_model: "C:\Users\admin\wws\LLMS\Vicuna\vicuna-7b-weight" # 将 "/path/to/vicuna/weights/"  修改为本地 weight 地址# generation configsprompt: ""preprocess:vis_processor:train:name: "blip2_image_train"image_size: 224eval:name: "blip2_image_eval"image_size: 224text_processor:train:name: "blip_caption"eval:name: "blip_caption"

5 Prepare the pretrained MiniGPT-4 checkpoint

5.1 下载 MiniGPT-4 checkpoint
  • 方法一:从 google drive 下载
    • Checkpoint Aligned with Vicuna 13B: https://drive.google.com/file/d/1a4zLvaiDBr-36pasffmgpvH5P7CKmpze/view?usp=share_link
    • Checkpoint Aligned with Vicuna 7B: https://drive.google.com/file/d/1RY9jV0dyqLX-o38LrumkKRh6Jtaop58R/view?usp=sharing
  • 方法二:huggingface 平台下载
    • prerained_minigpt4_7b.pth:https://www.huggingface.co/wangrongsheng/MiniGPT4-7B/tree/main
    • pretrained_minigpt4.pth:https://www.huggingface.co/wangrongsheng/MiniGPT4/tree/main
git lfs install
git clone https://www.huggingface.co/wangrongsheng/MiniGPT4-7B
5.2 在 eval_configs/minigpt4_eval.yaml 的 第11行 设置 MiniGPT-4 checkpoint 路径
    model:arch: mini_gpt4model_type: pretrain_vicunafreeze_vit: Truefreeze_qformer: Truemax_txt_len: 160end_sym: "###"low_resource: Trueprompt_path: "prompts/alignment.txt"prompt_template: '###Human: {} ###Assistant: 'ckpt: '/path/to/pretrained/ckpt/'       # 修改为 MiniGPT-4 checkpoint 路径...
5.3 在本地启动 MiniGPT-4 demo

本地 通过以下命令 demo.py 运行 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位运行模型,并使用更大的波束搜索宽度。
5.4 训练 MiniGPT-4

MiniGPT-4的训练包含两个 alignment stages.
MiniGPT-4 —— First pretraining stage

在第一个预训练阶段,使用 Laion和CC数据集的图像-文本对 来 训练模型,以对齐视觉和语言模型。要下载和准备数据集,请查看我们的第一阶段数据集准备说明。在第一阶段之后,视觉特征被映射,并且可以被语言模型理解。要启动第一阶段培训,请运行以下命令。在我们的实验中,我们使用了4个A100。您可以在配置文件 train_configs/minigpt4_stage1_pretrain.yaml 中更改保存路径

torchrun --nproc-per-node NUM_GPU train.py --cfg-path train_configs/minigpt4_stage1_pretrain.yaml
  • rain_configs/minigpt4_stage1_pretrain.yaml 介绍
    model:arch: mini_gpt4model_type: pretrain_vicunafreeze_vit: Truefreeze_qformer: Truedatasets:laion:vis_processor:train:name: "blip2_image_train"image_size: 224text_processor:train:name: "blip_caption"sample_ratio: 115cc_sbu:vis_processor:train:name: "blip2_image_train"image_size: 224text_processor:train:name: "blip_caption"sample_ratio: 14run:task: image_text_pretrain# optimizerlr_sched: "linear_warmup_cosine_lr"init_lr: 1e-4min_lr: 8e-5warmup_lr: 1e-6weight_decay: 0.05max_epoch: 4batch_size_train: 64batch_size_eval: 64num_workers: 4warmup_steps: 5000iters_per_epoch: 5000seed: 42output_dir: "output/minigpt4_stage1_pretrain"amp: Trueresume_ckpt_path: nullevaluate: False train_splits: ["train"]device: "cuda"world_size: 1dist_url: "env://"distributed: True

只有第一阶段训练的MiniGPT-4 checkpoint 可以在这里下载。与第二阶段之后的模型相比,该 checkpoint 频繁地生成不完整和重复的句子。

MiniGPT-4 —— Second finetuning stage

在第二阶段,我们使用自己创建的小型高质量图像-文本对数据集,并将其转换为对话格式,以进一步对齐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

踩坑手册

RuntimeError: PytorchStreamReader failed reading zip archive: failed finding central directory
error: RPC failed; curl 28 OpenSSL SSL_read: Connection was reset, errno 10054
ValueError: Tokenizer class LLaMATokenizer does not exist or is not currently imported.

  • MiniGPT-4 本地部署 RTX 3090
  • LLaMATokenizer does not exist or is not currently imported- LLaMA 4-bit
  1. 打开fastchat.model.apply_delta.py
  2. 使用文本替换,将所有的
    • AutoTokenizer 替换为 LlamaTokenizer
    • AutoModelForCausalLM 替换为 LlamaForCausalLM
    • 保存
  3. 重新运行上面的命令即可。

如果你的CPU内存不足,您也可以尝试通过这些方法来减少权重转换对 CPU 内存的要求

  • 方案一:将 --low-cpu-mem 追加到上面的命令中,这会将大权重文件拆分为较小的文件,并将磁盘用作临时存储。 这可以将峰值内存保持在 16GB 以下;
    • python -m fastchat.model.apply_delta --base C:\Users\admin\wws\LLMS\Vicuna\llama-7b-hf --target C:\Users\admin\wws\LLMS\Vicuna\vicuna-7b-weight --delta C:\Users\admin\wws\LLMS\Vicuna\vicuna-7b-delta-v1.1 --low-cpu-mem
  • 方案二:创建一个大的交换文件并依靠操作系统自动的将磁盘当作虚拟内存。

tensor尺度不一致

bug:tensor尺度不一致RuntimeError: The size of tensor a (32000) must match the size of tensor b (32001) at non-singleton dimension 0当使用v0版本时,生成vicuna权重出错(bug:tensor尺度不一致),而换为v1.1版本即可解决。

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

参考

【LLMs 入门实战 —— 八 】MiniGPT-4 模型学习与实战

MiniGPT-4 模型学习
【LLMs 入门实战 】第二式
论文 :《MiniGPT-4: Enhancing Vision-language Understanding with Advanced Large Language Models》
Vision-CAIR/MiniGPT-4
Vision-CAIR/MiniGPT-4/blob/main/PrepareVicuna.md
MiniGPT-4|图像对话模型
lm-sys/FastChat
lmsys/vicuna-7b-delta-v1.1
小羊驼模型(FastChat-vicuna)运行踩坑记录
大模型也内卷,Vicuna训练及推理指南,效果碾压斯坦福羊驼
MiniGPT-4 本地部署 RTX 3090 (bug:默认conda装的环境torch不带cuda,手动pip 装了 1.13.1 和cuda 117 解决了)
MiniGPT-4,开源了!
Vicuna 模型学习与实战

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/15205.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QLoRA:一种高效LLMs微调方法,48G内存可调65B 模型,调优模型Guanaco 堪比Chatgpt的99.3%!

引言 本文是华盛顿大学刚刚发布的一篇文章。作者提出了QLoRA,它是一种「高效的微调方法」,可以在保持完整的16位微调任务性能的情况下,将内存使用降低到足以「在单个48GB GPU上微调650亿参数模型」。QLORA通过冻结的4位量化预训练语言模型向低秩适配器(LoRA)反向传播梯度。…

Prompt Learning: ChatGPT 也在用的 NLP 新范式

编者按&#xff1a;自GPT-3以来&#xff0c;大语言模型进入了新的训练范式&#xff0c;即“预训练模型Promp learning”。在这一新的范式下&#xff0c;大语言模型呈现出惊人的zero-shot和few-shot能力&#xff0c;使用较少的训练数据来适应新的任务形式。最近火爆出圈的ChatGP…

《花雕学AI》新版必应 Bing 登场:轻松注册,一站式搜索、聊天与绘画应有尽有

引言&#xff1a; 你是否曾经在网上搜索信息时感到困惑或沮丧&#xff1f;你是否曾经想要在网上创造一些有趣或有用的内容&#xff0c;却不知道从何开始&#xff1f;你是否曾经想要用文字描述一个图像&#xff0c;却无法找到合适的图片&#xff1f;如果你的答案是肯定的&#x…

如何利用ChatPDF快速阅读英文论文,帮你写作业

英语渣狂喜&#xff5e;确实惊艳到我了&#xff01; 大家好&#xff0c;我是老表 使用平台&#xff1a;https://www.chatpdf.com/ 1、上传PDF 访问官网&#xff1a;https://www.chatpdf.com/&#xff0c;界面很美&#xff0c;点击直接上传 PDF&#xff0c; 需要注意免费版本PDF…

GPT4All: 一个基于大规模数据训练的聊天机器人模型

微信改版&#xff0c;求求大家星标下公众号&#xff0c; 不然后面推送大家可能会看不到 大家好&#xff0c;我是老表&#xff0c;今天给大家分享的是一个开源项目&#xff1a;GPT4All 随着人工智能技术的不断发展&#xff0c;聊天机器人已经成为了一个备受关注的研究领域。在这…

ChatGPT提问的万能公式,强烈建议收藏!泰裤辣!

在实际使用GPT的时候&#xff0c;并不是GPT不够强大&#xff0c;而是我们需要很多时间去调教AI&#xff0c;以便输出我们期望的答案&#xff0c;为了让输出无限的靠近你的期望&#xff0c;就需要下面这个万能的框架&#xff0c;如果大家记不住这个框架或者没有形成习惯&#xf…

老黄因ChatGPT大赚311亿/ 中国移动公布实名NFT交易专利/C919首航航班确定...今日更多新鲜事在此...

日报君 发自 凹非寺量子位 | 公众号 QbitAI 大噶好~今天是兔年首个要上班的周一。 不知各位打工人从假期中缓过来了嘛&#xff1f;&#xff08;虽然可能已经上了两天班&#xff09; 日报君在此祝大家新的一年里工作顺利&#xff0c;并在此奉上今日份科技趣闻&#xff08;为您精…

吴恩达给ChatGPT泼冷水/ 罗永浩谈欠薪/ 谷歌元老离职... 今日更多新鲜事在此

日报君 发自 凹非寺量子位 | 公众号 QbitAI 大噶吼~今天是2月17日星期五。 又到一周工作日的尾巴了&#xff0c;各位想好周末怎么欢度了嘛&#xff1f; 在出去嗨皮/回家睡觉之前&#xff0c;不妨来和日报君看一看科技趣闻——讲真&#xff0c;挺有趣的。 OpenAI计划纠正ChatGPT…

银行数字化转型导师坚鹏:ChatGPT解密与银行应用案例

ChatGPT解密与银行应用案例 ——开启人类AI新纪元 打造数字化转型新利器 课程背景&#xff1a; 很多企业和员工存在以下问题&#xff1a; 不清楚ChatGPT对我们有什么影响&#xff1f; 不知道ChatGPT的发展现状及作用&#xff1f; 不知道ChatGPT的银行业应用案例&#…

关于大模型实践的一些总结

随着ChatGPT的迅速出圈&#xff0c;加速了大模型时代的变革。对于以Transformer、MOE结构为代表的大模型来说&#xff0c;传统的单机单卡训练模式肯定不能满足上千&#xff08;万&#xff09;亿级参数的模型训练&#xff0c;这时候我们就需要解决内存墙和通信墙等一系列问题&am…

OpenAI 遭遇离职潮:员工对 ChatGPT 进展缓慢失望,痛批 CEO 不务正业

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年6月份全网热门报告合集 普通人如何利用ChatGPT变现赚钱&#xff1f; 无需翻墙&#xff0c;无需注册&#xff0c;ChatGPT4直接使用 ChatGPT提词手册&#xff0c;学完工…

近期AI成为热点话题, ChatGPT, GPT4, new bing, Bard,AI 绘画, AI 编程工具引发大量讨论。请结合自身学习经历,一起来聊聊你对 AI 技术以及其今后发展的看

1&#xff0c;你人生中第一次接触到“人工智能”的概念和产品是什么&#xff1f;什么让你觉得“人类做的东西的确有智能”&#xff1f; 天猫精灵/小度智能语音音箱。科技越来越发达&#xff0c;一些年龄大的老人并不能够跟上时代的步伐。平时爸妈要上班&#xff0c;我和弟弟要上…

​从底层技术分析如何调教你的ChatGPT?

相信很多人都已经在使用类ChatGPT的工具进行工作或者娱乐了&#xff0c;这里说的类ChatGPT的是指和ChatGPT相同或者相似功能的产品&#xff0c;包括国外的开源平替模型、百度的文心一言等&#xff0c;但是你真的会使用这些工具和应用吗&#xff1f;你使用的方法是正确的吗&…

从ChatGPT的成功看中美创新模式的差异

我在大约三个月前撰写了文章《三分钟读懂新一代人工智能——ChatGPT》,当时ChatGPT的用户刚刚突破一百万,相对来说还较为小众,在资本市场还没有引起关注和追捧。三个月后,这个产品开始进入大众视野,按照瑞银的统计,月活跃用户数已经突破了一亿。如果有投资者在三个月前开…

奥特曼系列ol2020服务器,奥特曼系列ol2020

奥特曼系列ol2020比较好玩的一个系列&#xff0c;游戏玩法里面还原了真实的奥特曼场景带给你回忆感&#xff0c;奥特曼系列ol2020游戏众多人物角色可以选择&#xff0c;跟随着剧情进行体验&#xff0c;奥特曼系列ol2020喜欢的可以下载。 奥特曼系列ol2020游戏特色 1、每一个奥特…

基于Pyramid Vision Transformer(PVT-v2)实现奥特曼识别

前言 大家好,我是阿光。 本专栏整理了《PyTorch深度学习项目实战100例》,内包含了各种不同的深度学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPy…

奥特曼打小怪兽python代码简单版_奥特曼打小怪兽

from random import randint # 导入randint函数 class Monster(object): def __init__(self, name, energy): self.name name self.energy energy if self.energy > 100: print(self.name "满血战斗") else: print(self.name "目前有" str(self.en…

奥特曼html代码,和平精英捏脸代码奥特曼

和平精英自从更新的新的捏脸玩法之外&#xff0c;玩家们就发明出来了各种各样的脸型&#xff0c;除了明星、小丑之外&#xff0c;还有大家喜爱的奥特曼&#xff01;最近万几门被奥特曼的信息疯狂洗脑&#xff0c;还去重新看了一遍奥特曼&#xff0c;回忆自己的童年&#xff0c;…

《李宏毅深度学习笔记》开源了!AI界最热视频老师!新增ChatGPT内容

Datawhale开源 开源项目&#xff1a;LeeDL-Tutorial&#xff0c;作者&#xff1a;杨毅远 导读 大家都对于李宏毅老师已经很熟悉了&#xff0c;他用幽默风趣的语言带领大家入门深度学习&#xff0c;旨在向学习者介绍深度学习的基本概念、方法和实践技巧。更可贵的是&#xff0c…

博士的尽头是教职?传奇大神何恺明被曝回归学界

梦晨 Alex 发自 凹非寺量子位 | 公众号 QbitAI AI大牛何恺明有了最新动向&#xff0c;而且是回归学术界。 MIT CSAIL实验室发布公告&#xff0c;3月13日下周一&#xff0c;何恺明将到MIT做学术演讲。 此事引起AI圈广泛关注。在相关知乎问题下&#xff0c;MIT博士Charles指出&am…