该框架支持一系列从 2B 到 34B 的密集和 MoE 大型语言模型 (LLM),同时进行图像理解、推理和生成。我们基于 LLaVA 构建此存储库。
- [05/03] 🔥 我们支持基于LLaMA3的模型!欢迎来这里尝试。
- [04/15] 🔥抱脸演示上线。是13B-HD版本,欢迎观看和尝试。
- [03/28] 🔥 小双子来了!我们发布论文、演示、代码、模型和数据!
我们在本节中提供了一些精选示例。更多示例可以在我们的项目页面中找到。欢迎尝试我们的在线演示!
请按照以下说明安装所需的软件包。
注意:如果您想使用2B版本,请确保安装最新版本的Transformers(>=4.38.0)。
- 克隆这个存储库
git clone https://github.com/dvlab-research/MGM.git
- 安装包
conda create -n mgm python=3.10 -y conda activate mgm cd MGM pip install --upgrade pip # enable PEP 660 support pip install -e .
- 为培训案例安装附加包
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
对于模型微调,请下载以下指令数据并将其整理为:
->
意思是把数据放到本地文件夹中。
- COCO火车2017 ->
data/MGM-Finetune/coco
- 质量保证->
data/MGM-Finetune/gqa
- OCR-VQA(我们将所有文件另存为
.jpg
)->data/MGM-Finetune/ocr_vqa
- TextVQA(不包括在训练中)->
data/MGM-Finetune/textvqa
- VisualGenome 第 1 部分, VisualGenome 第 2 部分->
data/MGM-Finetune/vg
- 分享GPT4V-100K ->
data/MGM-Finetune/sam
,share_textvqa
,wikiart
,web-celebrity
,web-landmark
- 莱昂 GPT4V ->
data/MGM-Finetune/gpt4v-dataset
- ALLaVA 说明->
data/MGM-Pretrain/ALLaVA-4V
- 文档VQA ->
data/MGM-Finetune/docvqa
- 图表QA ->
data/MGM-Finetune/chartqa
- DVQA- >
data/MGM-Finetune/dvqa
- AI2D- >
data/MGM-Finetune/ai2d
对于模型评估,请点击此链接进行准备。我们使用一些额外的基准进行评估。请下载以下基于图像的训练数据并将其组织为:
->
意思是把数据放到本地文件夹中。
请将预训练数据、微调数据和评估数据放入 StructureMGM-Pretrain
后面的、MGM-Finetune
和MGM-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-336、OpenCLIP-ConvNeXt-L、Gemma-2b-it、Vicuna-7b-v1.5、Vicuna-13b-v1.5、Mixtral- 8x7B-Instruct-v0.1和Nous-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_size
x gradient_accumulation_steps
x num_gpus
。
请确保在培训前的准备工作中下载并整理数据。
注意:请设置hostfile
2 台机器训练和hostfile_4
4 台机器训练。
如果您想训练和微调框架,请对图像大小为 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
请在、llama
、mixtral
和yi
中查找更多培训脚本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
。
无需 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
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 的 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 位)启动模型工作线程,这样您就可以在减少 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之上的。
- 这项工作利用了Gemma、Vicuna、Mixtral和Nous-Hermes的法学硕士。
数据和检查点仅供研究使用并获得许可。它们还仅限于遵循 LLaVA、LLaMA、Vicuna 和 GPT-4 许可协议的使用。该数据集为 CC BY NC 4.0(仅允许非商业用途),使用该数据集训练的模型不应在研究目的之外使用。