Skip to content

“Mini-Gemini:挖掘多模态视觉语言模型的潜力”的官方仓库

License

Notifications You must be signed in to change notification settings

yuanzhongqiao/dpqq-MGM

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

“Mini-Gemini:挖掘多模态视觉语言模型的潜力”的官方仓库

该框架支持一系列从 2B 到 34B 的密集和 MoE 大型语言模型 (LLM),同时进行图像理解、推理和生成。我们基于 LLaVA 构建此存储库。

发布

  • [05/03] 🔥 我们支持基于LLaMA3的模型!欢迎来这里尝试。
  • [04/15] 🔥抱脸演示上线。是13B-HD版本,欢迎观看和尝试。
  • [03/28] 🔥 小双子来了!我们发布论文演示代码模型数据

内容

演示

我们在本节中提供了一些精选示例。更多示例可以在我们的项目页面中找到。欢迎尝试我们的在线演示

安装

请按照以下说明安装所需的软件包。

注意:如果您想使用2B版本,请确保安装最新版本的Transformers(>=4.38.0)。

  1. 克隆这个存储库
git clone https://github.com/dvlab-research/MGM.git
  1. 安装包
conda create -n mgm python=3.10 -y
conda activate mgm
cd MGM
pip install --upgrade pip  # enable PEP 660 support
pip install -e .
  1. 为培训案例安装附加包
pip install ninja
pip install flash-attn --no-build-isolation

模型

该框架在概念上很简单:利用双视觉编码器来提供低分辨率视觉嵌入和高分辨率候选;提出补丁信息挖掘以在高分辨率区域和低分辨率视觉查询之间进行补丁级挖掘;法学硕士用于将文本与图像结合起来,同时进行理解和生成。

我们提供所有针对第一阶段和第二阶段数据进行完全微调的模型:

模型 LR 人力资源 基础法学硕士 视觉编码器 微调数据 微调时间表 下载
米高梅-2B 第336章 第768章 杰玛-2B 夹子-L 米高梅指导 full_ft-1e 控制点
米高梅-7B 第336章 第768章 骆驼毛-7B-v1.5 夹子-L 米高梅指导 full_ft-1e 控制点
米高梅-13B 第336章 第768章 骆驼毛-13B-v1.5 夹子-L 米高梅指导 full_ft-1e 控制点
米高梅-8B 第336章 第768章 LLaMA-3-8B-指导 夹子-L 米高梅指导 full_ft-1e 控制点
米高梅-8x7B 第336章 第768章 Mixtral-8x7B-Instruct-v0.1 夹子-L 米高梅指导 full_ft-1e 控制点
米高梅-34B 第336章 第768章 Nous-Hermes-2-Yi-34B 夹子-L 米高梅指导 full_ft-1e 控制点
MGM-7B-HD 第672章 1536 骆驼毛-7B-v1.5 夹子-L 米高梅指导 full_ft-1e 控制点
MGM-13B-HD 第672章 1536 骆驼毛-13B-v1.5 夹子-L 米高梅指导 full_ft-1e 控制点
MGM-8B-HD 第672章 1536 LLaMA-3-8B-指导 夹子-L 米高梅指导 full_ft-1e 控制点
MGM-8x7B-HD 第672章 1536 Mixtral-8x7B-Instruct-v0.1 夹子-L 米高梅指导 full_ft-1e 控制点
MGM-34B-HD 第672章 1536 Nous-Hermes-2-Yi-34B 夹子-L 米高梅指导 full_ft-1e 控制点

以下仅是第一阶段数据的预训练权重:

模型 LR 人力资源 基础法学硕士 视觉编码器 预训练数据 微调时间表 下载
米高梅-2B 第336章 第768章 杰玛-2B 夹子-L 米高梅预训练 1e 控制点
米高梅-7B 第336章 第768章 骆驼毛-7B-v1.5 夹子-L 米高梅预训练 1e 控制点
米高梅-13B 第336章 第768章 骆驼毛-13B-v1.5 夹子-L 米高梅预训练 1e 控制点
米高梅-8x7B 第336章 第768章 Mixtral-8x7B-Instruct-v0.1 夹子-L 米高梅预训练 1e 控制点
米高梅-34B 第336章 第768章 Nous-Hermes-2-Yi-34B 夹子-L 米高梅预训练 1e 控制点

准备

数据集

我们为模型训练提供处理后的数据。对于模型预训练,请下载以下基于训练图像的数据并将其组织为:

->意思是把数据放到本地文件夹中。

  • LLaVA 图片-> data/MGM-Pretrain/images,data/MGM-Finetune/llava/LLaVA-Pretrain/images
  • ALLaVA 标题->data/MGM-Pretrain/ALLaVA-4V

对于模型微调,请下载以下指令数据并将其整理为:

->意思是把数据放到本地文件夹中。

对于模型评估,请点击此链接进行准备。我们使用一些额外的基准进行评估。请下载以下基于图像的训练数据并将其组织为:

->意思是把数据放到本地文件夹中。

请将预训练数据、微调数据和评估数据放入 StructureMGM-Pretrain后面的、MGM-FinetuneMGM-Eval子集中。

有关元信息,请下载以下文件并按结构中的方式组织它们。

数据文件名 尺寸
mgm_pretrain.json 1.68克
mgm_instruction.json 1.79克
mgm_ Generation_pure_text.json 0.04克

重要提示:mgm_generation_pure_text.json是与生成相关的子集。不要将其合并,mgm_instruction.json因为它已经包含在其中。您可以将此文件与您自定义的 LLM/VLM SFT 数据集合并,以启用推理生成功能。

预训练权重

我们建议用户从以下链接下载预训练权重CLIP-Vit-L-336OpenCLIP-ConvNeXt-LGemma-2b-itVicuna-7b-v1.5Vicuna-13b-v1.5Mixtral- 8x7B-Instruct-v0.1Nous-Hermes-2-Yi-34B,并将它们放入model_zoo以下​​Structure中。

结构

训练前应按如下方式组织文件夹结构。

MGM
├── mgm
├── scripts
├── work_dirs
│   ├── MGM
│   │   ├── MGM-2B
│   │   ├── ...
├── model_zoo
│   ├── LLM
│   │   ├── gemma
│   │   │   ├── gemma-2b-it
│   │   ├── vicuna
│   │   │   ├── 7B-V1.5
│   │   │   ├── 13B-V1.5
│   │   ├── llama-3
│   │   │   ├── Meta-Llama-3-8B-Instruct
│   │   │   ├── Meta-Llama-3-70B-Instruct
│   │   ├── mixtral
│   │   │   ├── Mixtral-8x7B-Instruct-v0.1
│   │   ├── Nous-Hermes-2-Yi-34B
│   ├── OpenAI
│   │   ├── clip-vit-large-patch14-336
│   │   ├── openclip-convnext-large-d-320-laion2B-s29B-b131K-ft-soup
├── data
│   ├── MGM-Pretrain
│   │   ├── mgm_pretrain.json
│   │   ├── images
│   │   ├── ALLaVA-4V
│   ├── MGM-Finetune
│   │   ├── mgm_instruction.json
│   │   ├── llava
│   │   ├── coco
│   │   ├── gqa
│   │   ├── ocr_vqa
│   │   ├── textvqa
│   │   ├── vg
│   │   ├── gpt4v-dataset
│   │   ├── sam
│   │   ├── share_textvqa
│   │   ├── wikiart
│   │   ├── web-celebrity
│   │   ├── web-landmark
│   │   ├── ALLaVA-4V
│   │   ├── docvqa
│   │   ├── chartqa
│   │   ├── dvqa
│   │   ├── ai2d
│   ├── MGM-Eval
│   │   ├── MMMU
│   │   ├── MMB
│   │   ├── MathVista
│   │   ├── ...

火车

训练过程由两个阶段组成:(1)特征对齐阶段:桥接视觉和语言标记; (2)指令调优阶段:教导模型遵循多模态指令。

我们的模型在 8 个具有 80GB 内存的 A100 GPU 上进行训练。要在更少的 GPU 上进行训练,您可以相应地减少per_device_train_batch_size和增加gradient_accumulation_steps。始终保持全局批量大小相同:per_device_train_batch_sizex gradient_accumulation_stepsx num_gpus

请确保在培训前的准备工作中下载并整理数据。

注意:请设置hostfile2 台机器训练和hostfile_44 台机器训练。

如果您想训练和微调框架,请对图像大小为 336 的 MGM-7B 运行以下命令:

bash scripts/llama/train/stage_1_2_full_v7b_336_hr_768.sh

或者对于图像尺寸为 336 的 MGM-13B:

bash scripts/llama/train/stage_1_2_full_v13b_336_hr_768.sh

因为我们重复使用了 MGM-7B 中预先训练的投影仪权重,所以您可以直接使用图像大小为 672 的 MGM-7B-HD 进行第 2 阶段指令调整:

bash scripts/llama/train/stage_2_full_v7b_672_hr_1536.sh

gemma请在、llamamixtralyi中查找更多培训脚本scripts/

评估

我们对几个基于图像的基准进行评估。请下载准备后的评估数据并按结构中的方式组织它们。

模型 法学硕士 资源。 关联 文本VQA MMB 微机电系统 MM-兽医 MMMU_val MMMU_测试 数学维斯塔
米高梅-2B 杰玛-2B 第336章 控制点 56.2 59.8 1341/312 31.1 31.7 29.1 29.4
米高梅-7B 骆驼毛-7B-v1.5 第336章 控制点 65.2 69.3 1523/316 40.8 36.1 32.8 31.4
米高梅-13B 骆驼毛-13B-v1.5 第336章 控制点 65.9 68.5 1565/322 46.0 38.1 33.5 37.0
米高梅-8B LLaMA-3-8B-指导 第336章 控制点 67.6 72.7 1606/341 47.3 38.2 36.3 --
米高梅-8x7B Mixtral-8x7B-Instruct-v0.1 第336章 控制点 69.2 75.6 1639/379 45.8 41.8 37.1 41.8
米高梅-34B Nous-Hermes-2-Yi-34B 第336章 控制点 70.1 79.6 1666/439 53.0 48.7 43.6 38.9
MGM-7B-HD 骆驼毛-7B-v1.5 第672章 控制点 68.4 65.8 1546/319 41.3 36.8 32.9 32.2
MGM-13B-HD 骆驼毛-13B-v1.5 第672章 控制点 70.2 68.6 1597/320 50.5 37.3 35.1 37.0
MGM-8B-HD LLaMA-3-8B-指导 第672章 控制点 71.6 -- 1532/357 -- 37.0 -- --
MGM-8x7B-HD Mixtral-8x7B-Instruct-v0.1 第672章 控制点 71.9 74.7 1633/356 53.5 40.0 37.0 43.1
MGM-34B-HD Nous-Hermes-2-Yi-34B 第672章 控制点 74.1 80.6 1659/482 59.3 48.0 44.9 43.3

如果您想在基于图像的基准上评估模型,请使用 中的脚本scripts/MODEL_PATH/eval。例如,使用 MGM-7B-HD 运行以下命令进行 TextVQA 评估:

bash scripts/llama/eval/textvqa.sh

请在 中找到更多评估脚本scripts/MODEL_PATH

CLI 推理

无需 Gradio 界面即可与图像聊天。它还支持多个 GPU、4 位和 8 位量化推理。具有 4 位量化。请确保您已安装扩散器PaddleOCR(仅为了更好的 OCR 体验),并尝试执行图像和生成推理:

python -m mgm.serve.cli \
    --model-path work_dirs/MGM/MGM-13B-HD \
    --image-file <path to your image>

或者尝试使用 OCR 获得更好的体验(确保您已经安装了PaddleOCR):

python -m mgm.serve.cli \
    --model-path work_dirs/MGM/MGM-13B-HD \
    --image-file <path to your image> \
    --ocr

或者尝试使用生成进行推理(确保您已经安装了扩散器):

python -m mgm.serve.cli \
    --model-path work_dirs/MGM/MGM-13B-HD \
    --image-file <path to your image> \
    --gen

您还可以尝试 8 位甚至 4 位以进行高效推理

python -m mgm.serve.cli \
    --model-path work_dirs/MGM/MGM-13B-HD \
    --image-file <path to your image> \
    --gen
    --load-8bit

渐变网页用户界面

在这里,我们采用与 LLaVA 类似的 Gradio UI 为我们的模型提供用户友好的界面。要在本地启动 Gradio 演示,请一一运行以下命令。如果您计划启动多个模型工作人员以在不同检查点之间进行比较,则只需启动控制器和 Web 服务器一次

启动控制器

python -m mgm.serve.controller --host 0.0.0.0 --port 10000

启动 gradio Web 服务器。

python -m mgm.serve.gradio_web_server --controller http:https://localhost:10000 --model-list-mode reload

您刚刚启动了 Gradio Web 界面。现在,您可以打开 Web 界面,并将 URL 打印在屏幕上。您可能会注意到模型列表中没有模型。别担心,我们还没有推出任何劳模。当您启动模型工作人员时,它将自动更新。

开展劳动模范活动

这是在 GPU 上执行推理的实际工作程序。每个工作人员负责 中指定的单个模型--model-path

python -m mgm.serve.model_worker --host 0.0.0.0 --controller http:https://localhost:10000 --port 40000 --worker http:https://localhost:40000 --model-path work_dirs/MGM/MGM-13B-HD

等到进程完成加载模型,您会看到“Uvicorn running on ...”。现在,刷新您的 Gradio Web UI,您将在模型列表中看到刚刚启动的模型。

您可以根据需要启动任意数量的工作程序,并在同一 Gradio 界面中比较不同的模型。请保持--controller不变,并将 和 修改--port--worker每个worker的不同端口号。

python -m mgm.serve.model_worker --host 0.0.0.0 --controller http:https://localhost:10000 --port <different from 40000, say 40001> --worker http:https://localhost:<change accordingly, i.e. 40001> --model-path work_dirs/MGM/MGM-34B-HD

如果您使用的是带有 M1 或 M2 芯片的 Apple 设备,则可以使用标志指定 mps 设备--device--device mps

启动模型工作人员(多个 GPU,当 GPU VRAM <= 24GB 时)

如果您的 GPU 的 VRAM 小于 24GB(例如 RTX 3090、RTX 4090 等),您可以尝试使用多个 GPU 运行它。如果您有多个 GPU,我们最新的代码库将自动尝试使用多个 GPU。您可以指定要使用哪些 GPU CUDA_VISIBLE_DEVICES。下面是使用前两个 GPU 运行的示例。

CUDA_VISIBLE_DEVICES=0,1 python -m mgm.serve.model_worker --host 0.0.0.0 --controller http:https://localhost:10000 --port 40000 --worker http:https://localhost:40000 --model-path work_dirs/MGM/MGM-13B-HD

启动模型工作者(4位、8位推理、量化)

您可以使用量化位(4 位、8 位)启动模型工作线程,这样您就可以在减少 GPU 内存占用的情况下运行推理。请注意,使用量化位进行的推理可能不如全精度模型准确。只需将--load-4bit或附加--load-8bit到您正在执行的模型工作器命令即可。下面是使用 4 位量化运行的示例。

python -m mgm.serve.model_worker --host 0.0.0.0 --controller http:https://localhost:10000 --port 40000 --worker http:https://localhost:40000 --model-path work_dirs/MGM/MGM-13B-HD --load-4bit

例子

我们在本节中提供了一些示例。更多示例可以在我们的项目页面中找到。

高分辨率理解

推理生成

引文

如果您发现此存储库对您的研究有用,请考虑引用该论文

@article{li2024mgm,
  title={Mini-Gemini: Mining the Potential of Multi-modality Vision Language Models},
  author={Li, Yanwei and Zhang, Yuechen and Wang, Chengyao and Zhong, Zhisheng and Chen, Yixin and Chu, Ruihang and Liu, Shaoteng and Jia, Jiaya},
  journal={arXiv:2403.18814},
  year={2023}
}

致谢

该项目不隶属于 Google LLC。

我们要感谢以下存储库所做的出色工作:

执照

代码许可 数据许可 重量许可证

数据和检查点仅供研究使用并获得许可。它们还仅限于遵循 LLaVA、LLaMA、Vicuna 和 GPT-4 许可协议的使用。该数据集为 CC BY NC 4.0(仅允许非商业用途),使用该数据集训练的模型不应在研究目的之外使用。

About

“Mini-Gemini:挖掘多模态视觉语言模型的潜力”的官方仓库

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 85.0%
  • Shell 11.5%
  • JavaScript 1.8%
  • HTML 1.4%
  • CSS 0.3%