MiniGPT4模型训练与部署

news2024/12/28 19:26:08

第二式:MiniGPT4模型训练与部署

  • 1.环境搭建
    • 1.1 下载MiniGPT-4代码
    • 1.2 创建虚拟环境
  • 2.Vicuna模型准备
    • 2.1 下载vicuna delta weights
    • 2.2 下载原始llama weights
    • 2.3 合成真正的working weights
    • 2.4 配置Vicuna模型路径
  • 3. MiniGPT-4 checkpoint准备
    • 3.1 下载MiniGPT-4 checkpoint
    • 3.2 修改MiniGPT-4 checkpoint路径
  • 4. Bert模型准备
  • 5. 本地启动MiniGPT-4 demo
  • 6. 训练MiniGPT-4
    • 6.1 MiniGPT-4 训练介绍
    • 6.2 MiniGPT-4 —— First pretraining stage
    • 6.3 MiniGPT-4 — Second finetuning stage
  • 7. Reference

1.环境搭建

1.1 下载MiniGPT-4代码

$ git clone https://github.com/Vision-CAIR/MiniGPT-4.git

1.2 创建虚拟环境

$ cd MiniGPT-4
$ conda env create -f environment.yml
$ conda activate minigpt4

说明:也可以用其他的方式创建虚拟环境,创建虚拟环境的主要目的是安装environment.yml中的依赖库。

2.Vicuna模型准备

2.1 下载vicuna delta weights

下载7b delta weights:

$ git lfs install
$ git clone https://huggingface.co/lmsys/vicuna-7b-delta-v1.1

下载13b delta weights:

$ git lfs install
$ git clone https://huggingface.co/lmsys/vicuna-13b-delta-v1.1

请注意:这不是直接的 working weight ,而是LLAMA-13B的 working weight 与 original weight 的差值。(由于LLAMA的规则,我们无法提供LLAMA的 weight )

2.2 下载原始llama weights

您需要按照HuggingFace提供的 原始权重 或 从互联网上获取 HuggingFace格式的原始LLAMA-7B或LLAMA-13B 权重。
注:这里直接从HuggingFace下载已转化为HuggingFace格式的原始LLAMA-7B或LLAMA-13B 权重
下载7b 原始 llama weights:

$ git lfs install
$ git clone https://huggingface.co/decapoda-research/llama-7b-hf

下载13b 原始 llama weights:

$ git lfs install
$ git clone https://huggingface.co/decapoda-research/llama-13b-hf

2.3 合成真正的working weights

当这delta weights 和llama原始weights都准备好后,我们可以使用Vicuna团队的工具来创建真正的 working weight 。
执行如下命令创建最终 working weight

$ python -m fastchat.model.apply_delta --base /home/llama/llama-13b-hf --target /home/vicuna/vicuna-13b-delta-v1.1-llama-merged --delta /home/vicuna/vicuna-13b-delta-v1.1

注:低CPU内存需在上述命令中加入–low-cpu-mem,可以把大的权重文件分割成多个小份,并使用磁盘作为临时存储。可以使峰值内存保持在16GB以下。不然无法载入vicuna增量文件,CPU内存占满,程序直接被kill。

2.4 配置Vicuna模型路径

需要对minigpt4/configs/models/minigpt4.yaml的第16行进行修改,修改为本地Vicuna working weights的路径。

model:
arch: mini_gpt4

vit encoder
image_size: 224
drop_path_rate: 0
use_grad_checkpoint: False
vit_precision: "fp16"
freeze_vit: True
freeze_qformer: True

Q-Former
num_query_token: 32

Vicuna
llama_model: "chat/vicuna/weight" # 将 "/path/to/vicuna/weights/" 修改为本地 weight 地址
...

3. MiniGPT-4 checkpoint准备

3.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

3.2 修改MiniGPT-4 checkpoint路径

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

model:
arch: mini_gpt4
model_type: pretrain_vicuna
freeze_vit: True
freeze_qformer: True
max_txt_len: 160
end_sym: "###"
low_resource: True
prompt_path: "prompts/alignment.txt"
prompt_template: '###Human: {} ###Assistant: '
ckpt: '/path/to/pretrained/ckpt/' # 修改为 MiniGPT-4 checkpoint 路径
...

4. Bert模型准备

1、从huggingface平台下载bert-base-uncased模型:https://huggingface.co/bert-base-uncased

2、修改/MiniGPT-4/minigpt4/models/blip2.py中第31行、47行中

tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
encoder_config = BertConfig.from_pretrained("bert-base-uncased")

"bert-base-uncased"为下载到本地的bert-base-uncased模型路径。

5. 本地启动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位运行模型,并使用更大的波束搜索宽度。
在这里插入图片描述

6. 训练MiniGPT-4

6.1 MiniGPT-4 训练介绍

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

6.2 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

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

6.3 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

7. Reference

感谢:https://github.com/km1994/LLMsNineStoryDemonTower/tree/main/mingpt4

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《二叉搜索树》

文章目录 一、二叉搜索树的概念二、二叉搜索树的实现2.1 插入迭代插入递归插入 2.2 查找迭代查找递归查找 2.3 删除迭代删除递归删除 2.4 中序遍历 三、二叉搜索树的应用1、K模型2、KV模型 四、二叉树的性能分析 一、二叉搜索树的概念 二叉搜索树又叫做二叉排序树。 左子树的…

diffusion model(三)—— classifier guided diffusion model

classifier guided diffusion model 背景 对于一般的DM(如DDPM, DDIM)的采样过程是直接从一个噪声分布,通过不断采样来生成图片。但这个方法生成的图片类别是随机的,如何生成特定类别的图片呢?这就是clas…

前沿重器[35] | 提示工程和提示构造技巧

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。(算起来,专项启动已经…

MySQL数据库主从复制与读写分离(图文详解!)

目录 前言 一:MySQL数据库主从复制与读写分离 1、什么是读写分离? 2、为什么要读写分离呢? 3、什么时候要读写分离? 4、主从复制与读写分离 5、mysql支持的复制类型 (1)STATEMENT (2&…

SLAM面试笔记(5) — C++面试题

目录 第1章 C基础 1 C中static静态变量有什么作用,在什么情况下会用? 2 类中的this指针指向哪里? 3 说一下const的作用。 4 std::string类型为啥不能memset? 5 emplace_back( )和push_back( )有什么区别? 6 tra…

【状态估计】基于无味卡尔曼滤波模拟倾斜传感器研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

通过Redisson的管道批量操作来提高Redis Io效率

一、背景 当在对redis进行刷数操作时,大部分的redis框架对于单次执行的效率差不多,但我们有时需要一次性写入大量的redis key时,一次一次的操作速度就很慢。尤其是处于跨region的环境,一次的redis io就高达数十毫秒&#xff0…

Android aar包的生成与使用

前言 最近用Android Studio开发Android时,会经常接触到aar包(Java Archive),aar包含所有资源,class以及res资源文件全部包含。 优势 Android通过aar方式把代码和资源打成一个包,提供给第三方使用或者是开…

什么是AOP?

目录 一、AOP简介 1、AOP简介和作用 2、AOP的概念 二、AOP的基本实现 三、AOP工作流程 1 、AOP工作流程 2、AOP核心概念 四、AOP切入点表达式 1、语法格式 2、通配符 五、AOP通知类型 1、AOP通知分类 2、AOP通知详解 (1)前置通知 &#xf…

Java Web JDBC(1)23.6.25

JDBC 1,JDBC概述 在开发中我们使用的是java语言,那么势必要通过java语言操作数据库中的数据。这就是接下来要学习的JDBC。 1.1 JDBC概念 JDBC 就是使用Java语言操作关系型数据库的一套API 全称:( Java DataBase Connectivity ) Java 数据库…

vue3-实战-13-管理后台-数据大屏解决方案-顶部组件搭建-实时游客统计

目录 1-数据大屏解决方案vw和vh 2-数据大屏解决方案scale 3-数据大屏原型需求图 4-数据大屏顶部搭建 4.1-顶部原型需求 4.2-顶部模块父组件的结构和逻辑 4.3-顶部模块子组件结构和逻辑 5-数据大屏游客统计 5.1-原型需求图分析 5.2-结构样式逻辑开发 1-数据大屏解决方…

视觉与多模态大模型前沿进展 | 2023智源大会精彩回顾

导读 6 月 9 日下午,智源大会「视觉与多模态大模型」专题论坛如期举行。随着 stable diffusion、midjourney、SAM 等爆火应用相继问世,AIGC 和计算机视觉与大模型的结合成为了新的「风口」。本次研讨会由智源研究院访问首席科学家颜水成和马尔奖获得者曹…

在UE5编辑器环境中使用Python

UE有很多Python方案,本文所讲述的Python为UE5官方内嵌版本方案,并且只能在编辑器环境下使用,使用该功能可以编写编辑器下的辅助工具,提升开发效率。 1.调用Python的几种方式 讲一讲UE5中调用Python的几种方式,首先是…

rust abc(5): 常量

文章目录 1. 目的2. 基本用法2.1 说明2.2 运行结果 3. 不推荐或不正确用法3.1 不推荐用小写字母作为常量名字3.2 常量名称中含有小写字母就会报warning3.3 定义常量时,不指定数据类型会编译报错 4. const 和 immutable 的区别4.1 const 可以在函数外声明&#xff0c…

三、决策树 四、随机森林

三、决策树1.决策树模型的原理1)什么是决策树2)决策树模型原理3.构建决策树的目的4)决策树的优缺点 2.决策树的典型生成算法1)常用的特征选择有信息增益、信息增益率、基尼系数2)基于信息增益的ID3算法3)基…

JAVAWEB 30-

JAVAWEB 30- 快速入门DriverManagerConnectionresultsetPreparedStatement增删改查查询所有添加 修改 MAVEN坐标MyBatis代理开发mybatis查询条件查询添加删除参数传递 快速入门 public static void main(String[] args) throws Exception { /1.注册驱动 Class.forName("co…

【TA100】Bloom算法

一、什么是Bloom算法 1、首先看一下Bloom效果长什么样 2、什么是Bloom ● Bloom,也称辉光,是一种常见的屏幕效果 ● 模拟摄像机的一种图像效果,让画面中较亮的区域“扩散”到周围的区域中,造成一种朦胧的效果 ● 可以让物体具有…

[JVM]再聊 CMS 收集器

题目之所以是再聊,是因为以前聊过: [JVM]聊聊 CMS 收集器 最近又看了下这块的知识,打算把 CMS/标记-清除/GC Roots/引用 这些知识串起来 我依旧可能写的不是很好,降低下期待 GC 算法 CMS 是基于 标记-清除 算法来做的,那我们就先从 GC 算法开始聊 GC 算法有: 标记-清除 标…

一篇博客教会你使用Docker部署Redis哨兵

文章目录 主数据库配置文件启动实例容器虚拟IP 从数据库配置文件启动实例 主从数据库查看主数据库查看从数据库 哨兵配置文件启动哨兵查看哨兵 哨兵机制哨兵选举选举日志重启主数据库 今天我们学习使用 Docker 部署 Redis 的主从复制,并部署 Redis 哨兵,…

Linux学习之grub配置文件介绍

grub配置文件 /etc/default/grub这个文件里边有一些简单的grub配置。 可以看到/etc/default/grub文件里有GRUB_CMDLINE_LINUX"crashkernelauto rhgb quiet idlehalt biosdevname0 net.ifnames0 consoletty0 consolettyS0,115200n8 noibrs nvme_core.io_timeout429496729…