Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

135 Commits
135 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MPP-Qwen-Next logo

MPP-Qwen-Next: Multimodal Pipeline Parallel based on QwenLM

sora_tokyo-walk_en-conv.MOV
Sora_Tokyo_Walk_example.MOV

News

  • [2024/6] 🔥 开源MPP-Qwen-Next的sft权重(15GB) modelscope链接 百度网盘链接
  • [2024/6] 🔥 MPP-Qwen-Next: 加入llava的多轮对话sft数据以及videochatgpt的100k sft数据,支持图像多轮对话,视频对话,并涌现出多图对话能力 知乎博客
  • [2024/5] 🔥 代码支持多轮对话sft、视频sft、多图sft
  • [2024/4] 🔥 支持多卡推理,修正chat template以获得更好的对话效果 知乎博客
  • [2024/3] 🔥 MPPQwen-14B: Extend MiniGPT4Qwen-14B to MPP-Qwen14B(Multimodal Pipeline Parallel). 数据和训练范式参照LLaVA(pretrain + sft),指令微调时打开LLM。全部训练过程在6张RTX4090上完成 README&Tutorial知乎博客
  • [2024/2] 🔥 MiniGPT4Qwen-14B: Scaling Up MiniGPT4Qwen to 14B. 使用DeepSpeed Pipeline Parallel让全过程仅使用2张4090显卡 README&Tutorial知乎博客
  • [2023/10] 🔥 MiniGPT4Qwen:采用18.8k的高质量双语指令微调数据,得到单阶段训练的个人版双语MLLM README&Tutorial知乎博客

Framework

Features

图像-单轮问答

图像-多轮对话

视频-对话

多图-对话(未经过多图sft,视频sft后涌现该能力)


无视频sft的MPP-14B模型多图对话(看似回答,实际啥都没说):


视频sft后的MPPQwen-8B模型(具备比较不同图像的能力):

TODO LIST

  • 加入huggingface-transformers实现,并push到huggingface
  • 开源sft权重(modelscope & 百度网盘)
  • 支持单图推理、多图推理、视频推理
  • 支持model parallelism的推理(使用了transformers的device_map="auto"
  • 开源pretrain权重
  • 开源处理好的pretrain和sft的数据集json文件
  • 支持多轮对话、多图sft、视频sft
  • 支持deepspeed的流水线并行

Installation

conda create -n minigpt4qwen python=3.8 && conda activate minigpt4qwen
pip install -e .

Weight&Data Preparation

请放在cache目录中,结构如下

模型权重请参照:WEIGHT.md

训练数据请参照:DATA.md

推理

请先按照WEIGHT.md配置好权重

并在以下链接中二选一,下载sft后的模型权重(15GB):

运行命令行demo

Single-GPU Inference

python cli_demo.py --model-type qwen7b_chat -c lavis/output/pp_7b_video/sft_video/global_step2005/unfreeze_llm_model.pth

MultiGPU(llm使用device_map="auto"加载,可以多卡加载LLM部分模型:

python cli_demo.py --model-type qwen7b_chat -c lavis/output/pp_7b_video/sft_video/global_step2005/unfreeze_llm_model.pth --llm_device_map "auto"

CPU(速度慢):

python cli_demo.py--model-type qwen7b_chat -c lavis/output/pp_7b_video/sft_video/global_step2005/unfreeze_llm_model.pth --cpu-only # 如果显存足够(>=20GB)可以不要--cpu-only

运行后需要输入图片路径,可以输入多张图片,用:f结束图片路径输入后进入对话

常见操作:

:help 查看help

:clear 清空当前命令行

:clh 清空对话历史(但图像输入不会更改)

:his 查看对话历史

:img 查看输入的图像路径

运行gradio webui demo

Single-GPU Inference

python webui_demo.py --model-type qwen7b_chat -c lavis/output/pp_7b_video/sft_video/global_step2005/unfreeze_llm_model.pth

MultiGPU(llm使用device_map="auto"加载

python webui_demo.py --model-type qwen7b_chat -c lavis/output/pp_7b_video/sft_video/global_step2005/unfreeze_llm_model.pth --llm_device_map "auto"

CPU:

python webui_demo.py --model-type qwen7b_chat -c lavis/output/pp_7b_video/sft_video/global_step2005/unfreeze_llm_model.pth --cpu-only # 如果显存足够(>=20GB)可以不要--cpu-only

流水线并行训练(PP+DP)

下面为8卡3090运行指令:

Pretrain

nproc_per_node: 8 dp: 4 pp: 2 nproc_per_node = pp * dp

python -m torch.distributed.run --nproc_per_node=8 train_pipeline.py --cfg-path lavis/projects/pp_qwen7b_video/pretrain.yaml --num-stages 2

SFT

nproc_per_node: 8 dp: 1 pp: 8 nproc_per_node = pp * dp

python -m torch.distributed.run --nproc_per_node=8 train_pipeline.py --cfg-path lavis/projects/pp_qwen7b_video/sft.yaml --num-stages 8

pipeline parallel的权重转换为pth文件

预训练阶段:

(仅转换linear projection层)

python pipe_proj2pth.py --ckpt-dir lavis/output/pp_7b_video/pretrain/global_step2181

转换后,模型文件会存储在ckpt_dir底下,名为model.pth

sft阶段

(需要转换projection层和所有LLM的参数)

python pipemodel2pth.py --ckpt-dir lavis/output/pp_7b_video/sft_video/global_step2005

转换后,模型文件会存储在ckpt_dir底下,名为unfreeze_llm_model.pth

二阶段训练loss曲线参考


pretrain:


sft:

Custom Data Format(如果你想continue training)

处理函数可以参考: https://github.com/Coobiw/MiniGPT4Qwen/releases/download/MPP-Qwen-Next_ckpt-and-data/ckpt-and-data.zip中,llava_instuct和videochatgpt目录里的analysis.py脚本

P.S.: 如果路径经常出错,可以把所有路径都改成绝对路径(包括dataset configs)

图像指令微调数据格式

单轮(instruction和output为str):

[
    {
        "image": "000000215677.jpg",
        "instruction": "<Img><ImageHere></Img> {question}",
        "output": "{answer}"
    },
]

多轮(instruction和output为等长的list):

{
        "image": "000000479443.jpg",
        "instruction": [
            "<Img><ImageHere></Img> {question1}",
            "{question2}",
            "..."
        ],
        "output": [
            "{answer1}",
            "{answer2}",
            "..."
        ]
    },

视频指令微调数据格式

[
    {
        "video": "v_k_ZXmr8pmrs.mkv",
        "instruction": "<Img><ImageHere></Img> {question}",
        "output": "{answer}"
    }
]

Acknowledgement

  • Lavis 本仓库是基于lavis进行构建的,且使用了其中BLIP2的ViT和Q-former
  • QwenLM 本仓库的语言模型采用Qwen7B-Chat
  • DeepSpeed 👍
  • DeepSpeedExamples 👍👍
  • LLaVA 参照其训练范式,使用了其预训练和指令微调数据
  • VideoChatGPT 使用其视频sft的100k数据
  • Video-LLaVA 提供videochatgpt视频数据的百度网盘下载链接

License

  • 本仓库的许多代码是基于Lavis 的,其采用 BSD 3-Clause License.
  • 本仓库采用Qwen-7B-Chat,支持商用和科研、开发用途,其License为LICENSE

Star History

Star History Chart

About

Personal Project: MPP-Qwen14B & MPP-Qwen-Next(Multimodal Pipeline Parallel based on Qwen-LM). Support [video/image/multi-image] {sft/conversations}. Don't let the poverty limit your imagination! Train your own 8B/14B LLaVA-training-like MLLM on RTX3090/4090 24GB.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.