实操指南:如何部署和微调多模态LLM NExT-GPT以生成创意内容

2023年12月22日 由 alex 发表 346 0

介绍


最近,能够理解文本、图像和视频等各种类型信息的大型语言模型取得了显着发展。然而,它们面临一个挑战:虽然它们在理解不同的模态方面很专业,但在跨这些模态创造内容方面却不够熟练。与这些模型不同,人类能够通过文字、图片、视频和声音等多种形式进行交流和理解。为了让人工智能更加类似于人类,我们需要多模态的大型语言模型(LLMs)。NExT-GPT就是这样一个系统。它可以处理信息并以不同的形式产生输出,如文本、图像、视频和声音。这个系统是通过修改现有的、训练良好的模型中的小部分来使它们适合不同的内容类型而开发的。像NExT-GPT这样的多模态模型所取得的进展,可能会为将来更加类似人类的人工智能铺平道路。


技术描述


1


NeXT-GPT包含三个阶段来处理和生成多模态内容,可以概括如下:


1. 多模态编码阶段


这一阶段使用现有模型来对来自不同模态的输入进行编码。具体来说,它采用了ImageBind,一种高性能的编码器,可以处理六种不同的模态。这些模态的数据随后通过线性投影层转化为类语言表达。这种转换使得输入能够被大型语言模型(LLMs)所理解。


2. LLM理解和推理阶段


在这里,一个名为Vicuna的大型语言模型充当中央处理单元。它接收来自不同模态的编码表示,并执行语义理解和推理。LLM输出文本回应,并为每一模态生成信号标记。这些信号标记作为指令,指导接下来的解码阶段是否要生成多模态内容以及应该生成何种内容。


3. 多模态生成阶段


在这最后一个阶段,多模态信号以及来自LLM的具体指令被基于Transformer的输出投影层所处理。这些层将信号标记表示转换成可以被各种多模态解码器理解的格式。为了生成不同类型的内容,会使用各种专门的模型,如Stable Diffusion (SD)用于图像合成,Zeroscope用于视频合成,以及AudioLDM用于音频合成。


在这个框架中,不同阶段的整合允许有效地处理和生成多模态内容,每个阶段在确保输出的连贯性和相关性方面都发挥着至关重要的作用。


NExT-GPT的部署:


对于高级GPU服务模型的需求,你可以查看E2E网络提供的云GPU服务。前往他们的网站并注册以访问他们的GPU节点。


2


建立环境


conda 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


4


5


准备预训练检查点


可以通过执行此命令下载ImageBind(编码器)的预训练检查点,并选择‘huge’版本。这个过程将会加载冻结参数,即在模型微调期间保持不变的参数。


wget https://dl.fbaipublicfiles.com/imagebind/imagebind_huge.pth


将 imagebind_huge.pth 文件放置在 [./ckpt/pretrained_ckpt/imagebind_ckpt/huge] 路径下。


接下来,从 Hugging Face 下载 Vicuna LLM 仓库,并保存在 [./ckpt/pretrained_ckpt/vicuna_ckpt/] 路径下。


git clone https://huggingface.co/BetterHF/vicuna-7b ./ckpt/pretrained_ckpt/vicuna_ckpt/7b_v0/


下一行将指导你如何为NExT-GPT系统加载可调参数。这些参数是在微调过程中会改变的参数。


git clone https://huggingface.co/ChocoWu/nextgpt_7b_tiva_v0 ./ckpt/delta_ckpt/nextgpt/7b_tiva_v0


部署


在此之后,你将能够启动 NeXT-GPT。


cd ./code
bash scripts/app.sh


6


调整模型


首先我们将下载我们的训练数据集。


1. T-X 对数据,这是文本数据(输入)和X(输出 - 图像、视频或音频)数据的组合。


通过以下命令下载图片:


pip install img2dataset
img2dataset --url_list Train_GCC-training.tsv --input_format "tsv" --url_col "url" --caption_col "caption" --output_format webdataset --output_folder cc3m --processes_count 16 --thread_count 64 --image_size 256 --enable_wandb True


在下载数据集之后,请确认下载状态,确保所有图像文件已经成功获取。随后,根据指定的格式将数据集组织为JSON文件。


[
    {
        "caption": "pitcher pitches against sports team",
        "image_name": "000002362.jpg"
    },
    {
        "caption": "sea beach with mountains on the horizon , yellow umbrella and sand",
        "image_name": "000007816.jpg"
    },
    ...
]


输出的数据结构应该如下所示:


7


在解码端对齐的训练过程中,我们的目标是减少信号标记和标题表示之间的差距。为了优化时间和内存使用,我们预先计算了图像、音频和视频标题的文本嵌入。这涉及到使用嵌入在各自扩散模型中的文本编码器。


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


在下载数据集后,使用提供的脚本启动NExT-GPT的训练:


```bash
cd ./code
bash scripts/train.sh
```


训练脚本是用以下命令执行的:


```bash
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,表示deepspeed的GPT CUDA设备号0。


--stage:指定训练阶段。


--save_path:设置用来存储训练后的增量权重的目录。这个目录会被自动创建。


--log_path:定义保存日志文件的目录。


结论


本文概述了该模型的三个基本阶段,专注于各个组件的集成,以保证输出结果的连贯性和相关性。它为设置环境、获取预训练的检查点以及微调模型提供了清晰的指导。微调部分进一步阐明了准备训练数据集、下载图像和组织数据以有效训练的过程。

文章来源:https://medium.com/stackademic/deploying-fine-tuning-and-running-multimodal-llm-next-gpt-for-any-to-any-content-generation-b6f71dcb8e18
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消