Project Icon

MPP-LLaVA

基于QwenLM的多模态并行系统,支持多轮对话及视频交流

MPP-Qwen-Next项目基于QwenLM,提供多模态流水线并行系统,支持多轮对话、视频对话和多图对话功能。借助DeepSpeed Pipeline Parallel技术,实现高效的单图、多图及视频推理。项目包含详细的预训练和指令微调数据,适用于多种对话场景,并专为大规模显卡配置进行了优化。

MPP-Qwen-Next logo

MPP-Qwen-Next: 基于 QwenLM 的多模态流水线并行

https://github.com/Coobiw/MiniGPT4Qwen/assets/48615375/963416dd-fd97-4680-b7ac-fa4a14beaaae

https://github.com/Coobiw/MiniGPT4Qwen/assets/48615375/0e7c33f6-33d3-478a-ab0e-ecc116aeec78

新闻

  • [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: 将 MiniGPT4Qwen-14B 扩展为 MPP-Qwen14B(多模态流水线并行)。数据和训练范式参照 LLaVA(pretrain + sft),指令微调时打开 LLM。全部训练过程在 6 张 RTX4090 上完成 README & 教程知乎博客
  • [2024/2] 🔥 MiniGPT4Qwen-14B: 将 MiniGPT4Qwen 扩展到 14B。使用 DeepSpeed Pipeline Parallel 让全过程仅使用 2 张 4090 显卡 README & 教程知乎博客
  • [2023/10] 🔥 MiniGPT4Qwen: 采用 18.8k 的高质量双语指令微调数据,得到单阶段训练的个人版双语 MLLM README & 教程知乎博客

框架

特性

图像-单轮问答

图像-多轮对话

视频-对话

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


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


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

待办事项列表

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

安装

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

权重&数据准备

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

模型权重请参照:WEIGHT.md

训练数据请参照:DATA.md

推理

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

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

运行命令行 demo

单 GPU 推理

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

多 GPU(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

单GPU推理

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

多GPU推理(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运行指令:

预训练

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并行的权重转换为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:

自定义数据格式(如果你想继续训练)

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

图像指令微调数据格式

单轮(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}"
    }
]

致谢

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

许可

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

Star历史

Star History Chart

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号