首页 > 其他分享 >多模态大语言模型——《动手学大模型》实践教程第六章

多模态大语言模型——《动手学大模型》实践教程第六章

时间:2024-11-21 21:18:49浏览次数:3  
标签:模态 模型 py NExT 3.2 学大 GPT data

目录

1 前言

从一些大模型相关的论文里学了一些理论知识,但是还是欠缺实践经验,本系列博文是在学习上交大张倬胜老师的开源项目的基础上写的相关总结,旨在提升自己的大模型实践能力。开源项目地址:dive-into-llms
备注:本项目大部分资源都需要科学上网才能获取。

免责声明
本系列博文所有技巧仅供参考,不保证百分百正确。若有任何问题,欢迎联系博主。
本系列博文所涉及的资源均来自互联网,如侵犯了您的版权请联系我删除,谢谢。

2 多模态大语言模型

不得不感叹,大模型的研究真是迅速啊,遍地开花。

Awesome-Multimodal-Large-Language-Models

1
2
3
4
5
6
7

8
9
10
12
13
14
15
16
17
18
19
20

3 实践代码

该部分介绍多模态大语言模型的常见架构以及构建方法

大语言模型的出现让大家看到,高阶的智能在语言模态上得到了充分的体现。作为能够更充分模拟真实世界的多模态大语言模型,其如何实现更强大的多模态理解和生成能力?多模态大语言模型是否能够帮助实现AGI?

大模型智能体迈向了未来操作系统之旅。然而,大模型在开放智能体场景中能意识到风险威胁吗?

目标:

  1. 熟悉多模态大语言模型的类型
  2. 掌握多模态大语言模型的通用技术框架
  3. 掌握多模态大语言模型的搭建、训练和推理

3.1 理论知识预备

3.1.1 了解多模态大语言模型的类型

  • 现有多模态大语言模型的功能、模态支持分类

在构建多模态大语言模型(MLLM)之前,本领域的研究者们都达成了一个共识、一个关键前提:由于规模定律和新兴现象,当前基于语言的LLM已经具有了强大的语义理解能力,这意味着语言已经成为承载智能的关键模态,所以语言智能被认为是多模态智能的枢纽。因此,几乎所有的MLLM都是建立在基于语言的LLM之上的,我这LLM作为核心决策模块,类似于大脑或中央处理器。换句话说,通过添加额外的外部非文本模态模块或编码器,LLM被赋予了多模态感知/操作能力。

我们将现有的MLLM根据其模态支持、功能支持情况,划分为不同的类型。

overview

3.1.2 了解多模态大语言模型的通用技术框架

  • 架构一:LLM as Task Scheduler

目前社区存在两种常见的MLLM架构。
第一种是“LLM作为离散调度器/控制器”的架构。如下图所示,LLM的角色是接收文本信号并向下游模块发出文本命令。系统内部的所有消息传递都是通过LLM输出的纯文本命令作为媒介进行的。不同的功能模块之间不存在交互。

arc1

  • 架构二:LLM as Joint Part of System

第二种架构,编码器-LLM-解码器框架。
这也是目前最流行的架构。其中LLM的角色是感知多模态信息,并在一个编码器-LLM-解码器的结构中自行做出响应和操作。因此,这个架构跟第一章架构的关键区别在于:LLM作为系统的关键联合部分,直接从外部接收多模态信息,并以更顺畅的方式委派指令给解码器/生成器。在编码器-LLM-解码器框架中,如下图所示,编码器处理来自多个模态的编码信号,LLM充当核心决策者,而解码器管理多模态输出。
arc2

3.2 上手实践通用多模态大语言模型

实践“任意模态到任意模态”的通用多模态大语言模型的构建过程

3.2.1 面向通用统一的“任意到任意模态”多模态大语言模型:NExT-GPT

未来的MLLM研究一定是朝着越来越通用的generalist方向发展,所以会包含尽可能多的模态、功能。NExT-GPT是这个领域的目前最为开创性的一项工作之一,其首次引入了“任意到任意模态”MLLM的概念。这种架构实现了强大的功能,为未来的多模态大语言模型的研究方向奠定了基础。

u1

本次课程关于多模态大语言模型的代码实践部分,将会以NExT-GPT的代码为目标,进行深入浅出的分析和实践。

NExT-GPT Project

NExT-GPT GitHub 代码库

3.2.2 代码框架浏览

├── figures
├── data
│   ├── T-X_pair_data  
│   │   ├── audiocap                      # text-autio pairs data
│   │   │   ├── audios                    # audio files
│   │   │   └── audiocap.json             # the audio captions
│   │   ├── cc3m                          # text-image paris data
│   │   │   ├── images                    # image files
│   │   │   └── cc3m.json                 # the image captions
│   │   └── webvid                        # text-video pairs data
│   │   │   ├── videos                    # video files
│   │   │   └── webvid.json               # the video captions
│   ├── IT_data                           # instruction data
│   │   ├── T+X-T_data                    # text+[image/audio/video] to text instruction data
│   │   │   ├── alpaca                    # textual instruction data
│   │   │   ├── llava                     # visual instruction data
│   │   ├── T-T+X                         # synthesized text to text+[image/audio/video] instruction data
│   │   └── MosIT                         # Modality-switching Instruction Tuning instruction data
├── code
│   ├── config
│   │   ├── base.yaml                     # the model configuration 
│   │   ├── stage_1.yaml                  # enc-side alignment training configuration
│   │   ├── stage_2.yaml                  # dec-side alignment training configuration
│   │   └── stage_3.yaml                  # instruction-tuning configuration
│   ├── dsconfig
│   │   ├── stage_1.json                  # deepspeed configuration for enc-side alignment training
│   │   ├── stage_2.json                  # deepspeed configuration for dec-side alignment training
│   │   └── stage_3.json                  # deepspeed configuration for instruction-tuning training
│   ├── datast
│   │   ├── base_dataset.py
│   │   ├── catalog.py                    # the catalog information of the dataset
│   │   ├── cc3m_datast.py                # process and load text-image pair dataset
│   │   ├── audiocap_datast.py            # process and load text-audio pair dataset
│   │   ├── webvid_dataset.py             # process and load text-video pair dataset
│   │   ├── T+X-T_instruction_dataset.py  # process and load text+x-to-text instruction dataset
│   │   ├── T-T+X_instruction_dataset.py  # process and load text-to-text+x instruction dataset
│   │   └── concat_dataset.py             # process and load multiple dataset
│   ├── model                     
│   │   ├── ImageBind                     # the code from ImageBind Model
│   │   ├── common
│   │   ├── anyToImageVideoAudio.py       # the main model file
│   │   ├── agent.py
│   │   ├── modeling_llama.py
│   │   ├── custom_ad.py                  # the audio diffusion 
│   │   ├── custom_sd.py                  # the image diffusion
│   │   ├── custom_vd.py                  # the video diffusion
│   │   ├── layers.py                     # the output projection layers
│   │   └── ...  
│   ├── scripts
│   │   ├── train.sh                      # training NExT-GPT script
│   │   └── app.sh                        # deploying demo script
│   ├── header.py
│   ├── process_embeddings.py             # precompute the captions embeddings
│   ├── train.py                          # training
│   ├── inference.py                      # inference
│   ├── demo_app.py                       # deploy Gradio demonstration 
│   └── ...
├── ckpt                           
│   ├── delta_ckpt                        # tunable NExT-GPT params
│   │   ├── nextgpt         
│   │   │   ├── 7b_tiva_v0                # the directory to save the log file
│   │   │   │   ├── log                   # the logs
│   └── ...       
│   ├── pretrained_ckpt                   # frozen params of pretrained modules
│   │   ├── imagebind_ckpt
│   │   │   ├──huge                       # version
│   │   │   │   └──imagebind_huge.pth
│   │   ├── vicuna_ckpt
│   │   │   ├── 7b_v0                     # version
│   │   │   │   ├── config.json
│   │   │   │   ├── pytorch_model-00001-of-00002.bin
│   │   │   │   ├── tokenizer.model
│   │   │   │   └── ...
├── LICENCE.md
├── README.md
└── requirements.txt

3.2.3 安装环境

请先克隆仓库并安装所需的环境,可以通过运行以下命令来完成环境的安装:

conda env create -n nextgpt python=3.8

conda activate nextgpt

# CUDA 11.6
conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.6 -c pytorch -c nvidia

git clone https://github.com/NExT-GPT/NExT-GPT.git
cd NExT-GPT

pip install -r requirements.txt

3.2.4 系统推理上手

3.2.4.1 加载预训练的NExT-GPT模型checkpoint
  • 步骤1:加载冻结参数NExT-GPT 是基于以下现有模型或模块进行训练的, 请按照以下说明准备checkpoint。

    • ImageBind 是统一的图像/视频/音频编码器。可以从此处下载预训练检查点,版本为huge。然后,将imagebind_huge.pth文件放置在[./ckpt/pretrained_ckpt/imagebind_ckpt/huge]
    • Vicuna:首先按照[这里]的说明准备LLaMA。然后将预训练模型放置在[./ckpt/pretrained_ckpt/vicuna_ckpt/]
    • Image Diffusion 用于生成图像。NExT-GPT 使用版本为v1-5Stable Diffusion。(代码里将会自动下载)
    • Audio Diffusion 用于生成音频内容。NExT-GPT 使用版本为l-fullAudioLDM。(代码里将会自动下载)
    • Video Diffusion 用于视频生成。我们使用版本为v2_576wZeroScope。(代码里将会自动下载)
  • 步骤2:加载可调参数

将NExT-GPT系统放置在[./ckpt/delta_ckpt/nextgpt/7b_tiva_v0]。可以选择 1) 使用自己训练的参数,或者 2) 从Huggingface下载预训练好的checkpoint。

3.2.4.2 Gradio Demo部署

完成检查点加载后,您可以通过以下方式在本地运行演示:

cd ./code
bash scripts/app.sh

指定关键参数如下:

  • --nextgpt_ckpt_path:预训练NExT-GPT参数的路径。
3.2.4.3 测试示例实践

目前的版本能够支持文字、图像、视频、声音四种模态下任意组合的输入,并任务组合模态的输出。
并且支持多轮上下文交互。

请各位自行运行测试效果。

  • Case-1:输入T+I,输出T+A

c1

  • Case-2:输入T+V,输出T+A

c2

  • Case-3:输入T+I,输出T+I+V
    c3

  • Case-4:输入T,输出T+I+V+A

c4

3.2.5 系统训练过程

3.2.5.1 数据准备

请下载以下用于模型训练的数据集:

A) T-X对数据

B) 指令微调数据

3.2.5.2 嵌入向量准备

在NExT-GPT的解码端的对齐训练中,我们最小化Signal Token和captions的表征之间的距离。为了保证系统的高效率,节省时间和内存成本,我们使用各个扩散模型中的文本编码器预计算图像、音频和视频标题的文本嵌入。

在进行NExT-GPT的训练之前,请运行以下命令,生成的 embedding 文件将保存在[./data/embed]

cd ./code/
python process_embeddings.py ../data/T-X_pair_data/cc3m/cc3m.json image ../data/embed/ runwayml/stable-diffusion-v1-5

参数说明:

  • args[1]: 标题文件路径;
  • args[2]: 模态,可以是 imagevideoaudio
  • args[3]: 嵌入向量文件保存路径;
  • args[4]: 相应的预训练扩散模型名称。
3.2.5.3 三阶段式训练

首先参考基础配置文件[./code/config/base.yaml],了解整个模块的基本系统设置。

然后运行以下脚本开始NExT-GPT的训练:

cd ./code
bash scripts/train.sh

指定命令如下:

deepspeed --include localhost:0 --master_addr 127.0.0.1 --master_port 28459 train.py \
    --model nextgpt \
    --stage 1\
    --save_path  ../ckpt/delta_ckpt/nextgpt/7b_tiva_v0/\
    --log_path ../ckpt/delta_ckpt/nextgpt/7b_tiva_v0/log/

其中关键参数:

  • --include: localhost:0 表示深度速度中的 GPT cuda 编号 0
  • --stage: 训练阶段。
  • --save_path: 存储训练后的 delta 权重的目录。此目录将自动创建。
  • --log_path: 存储日志文件的目录。

NExT-GPT的整个训练分为3个步骤:

  • 步骤1:编码端LLM为中心的多模态对齐。该阶段训练输入投影层,同时冻结ImageBind、LLM和输出投影层。

    只需运行上述的train.sh脚本,并设置:--stage 1

    还请参考运行配置文件[./code/config/stage_1.yaml]和deepspeed配置文件[./code/dsconfig/stage_1.yaml]以获取更多逐步配置信息。

    请注意,在此步骤中使用的数据集包含在dataset_name_list中,并且数据集名称必须与[./code/dataset/catalog.py]中的定义精确匹配。

  • 步骤2:解码端指令跟随对齐。该阶段训练输出投影层,同时冻结ImageBind、LLM和输入投影层。

    只需运行上述的train.sh脚本,并设置:--stage 2

    还请参考运行配置文件[./code/config/stage_2.yaml]和deepspeed配置文件[./code/dsconfig/stage_2.yaml]以获取更多逐步配置信息。

  • 步骤3:指令调整。该阶段对指令数据集进行以下调整:1) 通过LoRA调整LLM,2) 调整输入投影层和3) 调整输出投影层

    只需运行上述的train.sh脚本,并设置:--stage 3

    还请参考运行配置文件[./code/config/stage_3.yaml]和deepspeed配置文件[./code/dsconfig/stage_3.yaml]以获取更多逐步配置信息。

标签:模态,模型,py,NExT,3.2,学大,GPT,data
From: https://blog.csdn.net/sinat_16020825/article/details/143953715

相关文章

  • AI大模型如何赋能电商行业并引领变革?
    成长路上不孤单......
  • 九析带你轻松完爆AI大模型(十六)---项目实战①
    申明:九析唯一授权【超级网红系列课程——AI大模全栈型架构师】系列课程一、项目自述    九析老师:“早上好,三上,你看起来气色很好,元气满满。”    三上老师:“谢谢九析老师,早睡早起,对身体很有益处。不过你看起来倒有点疲惫。”    九析老师:“是......
  • 大模型在企业落地的三大阻力
    关注我的朋友应该看到了,上个月我作为助教参加了公司新一期的AICA首席架构师培养计划,在三天的学习里我和来自不同的企业学员们做了很多交流,发现大模型要想在企业真正落地,还有很多坎儿需要迈,很多块硬骨头需要啃。前排提示,文末有大模型AGI-CSDN独家资料包哦!今天就想结合这段......
  • 以数据为中心的大模型落地方法论与实践
    引言大模型落地到当前这个阶段,核心关注点还是领域大模型,而领域大模型落地的前提在于两点:需求端,对当前应用的降本增效以及新应用的探索;供给端,训练技术已经有较高的成熟度。前排提示,文末有大模型AGI-CSDN独家资料包哦!降本增效方面,以机器学习团队的构成为例,滴普科技Deepexi......
  • AI论文写作专属模型-积墨论文
    在这个信息爆炸的时代,学术研究和论文写作已经成为知识传播的重要途径。然而,传统的论文写作方式耗时耗力,往往让研究者们分身乏术。为了解决这一难题,积墨论文,一个革命性的AI论文写作专属模型,它将彻底改变您的写作体验。在线全文预览,所见即所得积墨论文支持在线全文预览功能,让您......
  • Transformer 模型全方位解析
    Transformer模型全方位解析引言Transformer模型自从在2017年被提出以来,已经成为了自然语言处理(NLP)领域的主流模型之一。它不仅在机器翻译、文本生成等任务中表现出色,还成为了许多先进模型(如BERT和GPT)的基础。本文将全面解析Transformer模型的概念、工作原理、优势、应用......
  • 如何实现3D模型在线展示、互动和分享?
    实现3D模型在线展示、互动和分享,可以通过多种途径和技术手段来完成。以下是一些具体的方法和步骤:一、选择适合的3D模型展示平台首先,你需要选择一个支持3D模型在线展示、互动和分享的平台。这些平台通常提供用户友好的界面和工具,方便用户上传和管理3D模型。例如:51建模网:提供......
  • 中国大模型落地应用案例集(2023),119页pdf
    来源:中国信通院华东分院近日,中国信通院联合上海人工智能实验室成立的大模型测试验证与协同创新中心牵头,首次面向全国范围征集全行业优秀应用实践,并形成《2023大模型落地应用案例集》(以下简称“《案例集》”)。前排提示,文末有大模型AGI-CSDN独家资料包哦!作为首部聚焦落地应......
  • 本地构建大模型
    本地运行大模型比较方便,我们就弄个本地的,使用ollama进行搭建。一、下载大模型服务Ollama到https://ollama.com/download下载安装包(以下以Windows为例)。二、安装Ollama软件安装好后在任务校址有启动图标三、下载摘取模型,以千问2.5为例打开模型地址:https://ollama.com/li......
  • 2.1_6 线程的实现方式和多线程模型
    目录1、用户级线程历史背景代码实现​用户级线程的优缺点2、内核级线程概念内核级线程的优缺点3、多线程模型一对一模型多对一模型多对多模型总览1、用户级线程历史背景早期的操作系统(如:早期Unix)只支持进程,不支持线程。当时的“线程”是由线程库实现的 ......