LLaVA - 视觉指令调整:针对多模式 GPT-4 级别功能而构建的大型语言和视觉助手。

Created at: 2023-04-18 00:13:11
Language: Python
License: Apache-2.0

🌋 LLaVA:大型语言和视觉助手

针对具有 GPT-4 级别功能的大型语言和视觉模型进行视觉指令调整。

[项目页面][演示][数据][模型动物园]

通过可视化指令调整改进基线 [论文]
刘浩天, 李春元, 李宇恒李勇宰

视觉教学调优(NeurIPS 2023,口语)[论文]
刘浩天*, 李春元*, 吴庆阳李勇宰(*同等贡献)


GLIGEN通过“戴眼镜的可爱熔岩美洲驼”和框提示生成

释放

  • [10/5] 🔥 LLaVA-1.5 出局了!在 11 个基准测试上实现 SoTA,只需对原始 LLaVA 进行简单修改,利用所有公共数据,在单个 8-A100 节点上在 ~1 天内完成训练,并超越 Qwen-VL-Chat 等使用数十亿级数据的方法。查看技术报告,并探索演示!模型在模型动物园中可用,训练和评估脚本将在下周推出!
  • [9/26] LLaVA 通过人类反馈强化学习 (RLHF) 得到改进,以改善事实基础并减少幻觉。在项目 [LLavA-RLHF] 中查看新的 SFT 和 RLHF 检查点
  • [9/22] LLaVA 被 NeurIPS 2023 作为口头演示,LLaVA-Med 被 NeurIPS 2023 数据集和基准跟踪作为聚光灯演示
  • [9/20] 我们在一份说明中总结了我们对训练 33B 和 65B LLaVA mdoel 的深入研究。此外,如果你对多模态基础模型的全面回顾、演变和趋势感兴趣,请查看我们最近的调查论文“多模式基础模型:从专家到通用助手”。

  • [7/19] 🔥 我们发布了重大升级,包括对 LLaMA-2、LoRA 训练、4/8 位推理、更高分辨率 (336x336) 等的支持。我们发布了LLaVA Bench,用于使用Bard和Bing-Chat的结果对开放式视觉聊天进行基准测试。我们还支持和验证RTX 3090和RTX A6000的培训。查看LLaVA-from-LLaMA-2和我们的模型动物园
  • [6/26] CVPR 2023 大型多式联运模型教程:迈向构建和超越多式联运 GPT-4!请查看 [幻灯片] [备注] [YouTube] [哔哩哔哩]。
  • [6/11] 我们发布了最需要的功能的预览版:DeepSpeed 和 LoRA 支持!请参阅此处的文档。
  • [6/1] 我们发布了LLaVA-Med:生物医学的大型语言和视觉助手,这是朝着构建具有GPT-4级功能的生物医学领域大型语言和视觉模型迈出的一步。查看纸张页面
  • [5/6] 我们正在发布基于MPT-7B-Chat的LLaVA-Lighting-MPT-7B-preview!有关更多详细信息,请参阅此处
  • [5/2] 🔥 我们正在发布LLaVA-Lighting!在 4 小时内只需 40 美元即可训练一个精简的多模式 GPT-3!有关更多详细信息,请参阅此处
  • [4/27] 感谢社区的努力,具有 4 位量化的 LLaVA-13B 允许你在低至 12GB VRAM 的 GPU 上运行!在这里尝试一下。
  • [4/17] 🔥 我们发布了LLaVA:大型语言和视觉助手。我们建议视觉指令调整,以构建具有GPT-4级功能的大型语言和视觉模型。查看论文演示

代码许可证 数据许可证 使用和许可声明:数据和检查点仅供研究使用并许可使用。它们也仅限于遵循LLaMA,Vicuna和GPT-4许可协议的使用。数据集是NC 4.0的CC(仅允许非商业用途),使用该数据集训练的模型不应用于研究目的之外。

内容

安装

  1. 克隆此存储库并导航到 LLaVA 文件夹
git clone https://github.com/haotian-liu/LLaVA.git
cd LLaVA
  1. 安装包
conda create -n llava python=3.10 -y
conda activate llava
pip install --upgrade pip  # enable PEP 660 support
pip install -e .
  1. 为训练案例安装其他包
pip install ninja
pip install flash-attn --no-build-isolation

升级到最新的代码库

git pull
pip uninstall transformers
pip install -e .

LLaVA 砝码

请查看我们的模型动物园,了解所有公共LLaVA检查站,以及如何使用砝码的说明。

演示

要运行我们的演示,你需要在本地准备 LLaVA 检查点。请按照此处的说明下载检查点。

格莱德网页用户界面

要在本地启动 Gradio 演示,请逐个运行以下命令。如果计划启动多个模型工作线程以在不同检查点之间进行比较,则只需启动控制器和 Web 服务器一次

启动控制器

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

启动 gradio 网络服务器。

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

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

启动模型工作人员

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

--model-path

python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path liuhaotian/llava-v1.5-13b

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

你可以根据需要启动任意数量的工作器,并在同一Gradio界面中比较不同模型检查点。请保持相同,并将 和 修改为每个工作线程的不同端口号。

--controller
--port
--worker

python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port <different from 40000, say 40001> --worker http://localhost:<change accordingly, i.e. 40001> --model-path <ckpt2>

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

--device
--device mps

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

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

CUDA_VISIBLE_DEVICES

CUDA_VISIBLE_DEVICES=0,1 python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path liuhaotian/llava-v1.5-13b

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

你可以使用量化位(4 位、8 位)启动模型工作线程,这允许你在减少 GPU 内存占用的情况下运行推理,从而可能允许你在低至 12GB VRAM 的 GPU 上运行。请注意,使用量化比特进行推理可能不如全精度模型准确。只需将 或附加到你正在执行的模型工作人员命令即可。下面是使用 4 位量化运行的示例。

--load-4bit
--load-8bit

python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path liuhaotian/llava-v1.5-13b --load-4bit

启动模型工作线程 (LoRA 权重, 未合并)

你可以使用 LoRA 权重启动模型工作线程, 无需将它们与基本检查点合并, 以节省磁盘空间.将有额外的加载时间,而推理速度与合并的检查点相同。未合并的 LoRA 检查点在模型名称中没有, 并且通常比合并的检查点小得多 (小于 1GB) (13G 为 7B, 25G 用于 13B).

lora-merge

要加载未合并的 LoRA 权重, 你只需要传递一个额外的参数 ,这是用于训练 LoRA 权重的基础 LLM.你可以在模型库中检查每个 LoRA 权重的基本 LLM.

--model-base

python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path liuhaotian/llava-v1-0719-336px-lora-vicuna-13b-v1.3 --model-base lmsys/vicuna-13b-v1.3

命令行推理

使用LLaVA聊天图像,而无需Gradio接口。它还支持多个 GPU、4 位和 8 位量化推理。通过 4 位量化,对于我们的 LLaVA-1.5-7B,它在单个 GPU 上使用不到 8GB 的 VRAM。

python -m llava.serve.cli \
    --model-path liuhaotian/llava-v1.5-7b \
    --image-file "https://llava-vl.github.io/static/images/view.jpg" \
    --load-4bit

火车

以下是 LLaVA v1.5 的最新训练配置。对于旧型号,请立即参考版本的自述文件。稍后我们将在单独的文档中添加它们。

LLaVA训练包括两个阶段:(1)特征对齐阶段:使用我们的LAION-CC-SBU数据集的558K子集将冷冻预训练视觉编码器连接到冷冻LLM;(2)可视化指令调优阶段:使用150K GPT生成的多模态指令跟随数据(来自面向学术任务的VQA数据)来教导模型遵循多模态指令。

LLaVA 在 8 个具有 80GB 内存的 A100 GPU 上进行训练。要在更少的 GPU 上进行训练,你可以相应地减少和增加。始终保持全局批大小相同:x x 。

per_device_train_batch_size
gradient_accumulation_steps
per_device_train_batch_size
gradient_accumulation_steps
num_gpus

超参数

我们在微调中使用了与骆马类似的一组超参数。下面提供了预训练和微调中使用的两个超参数。

  1. 预训练
超参数 全球批量大小 学习率 时代 最大长度 重量衰减
LLaVA-v1.5-13B 256 1e-3 1 2048 0
  1. 微调
超参数 全球批量大小 学习率 时代 最大长度 重量衰减
LLaVA-v1.5-13B 128 2e-5 1 2048 0

下载骆马检查站(自动)

我们的基本模型 Vicuna v1.5 是一个指令调整的聊天机器人,当你运行我们提供的训练脚本时,将自动下载。无需执行任何操作。

预训练(特征对齐)

请下载 LAION-CC-SBU 数据集的 558K 子集,其中包含我们在论文中使用的 BLIP 标题。

由于分辨率提高到336px,LLaVA-v1.5-13B在8x A100(80G)上的预训练大约需要5.5小时。LLaVA-v1.5-7B 大约需要 3.5 小时。

使用DeepSpeed ZeRO-2的训练脚本:pretrain.sh

  • --mm_projector_type mlp2x_gelu
    :两层 MLP 视觉语言连接器。
  • --vision_tower openai/clip-vit-large-patch14-336
    :剪辑 ViT-L/14 336px。

可视化指令调整

  1. 准备数据

请下载最终混合物的注释,我们的指令调整数据llava_v1_5_mix665k.json,并从构成数据集下载图像:

下载所有数据后,按如下方式组织数据,

./playground/data

├── coco
│   └── train2017
├── gqa
│   └── images
├── ocr_vqa
│   └── images
├── textvqa
│   └── train_images
└── vg
    ├── VG_100K
    └── VG_100K_2
  1. 开始训练!

你可以在模型动物园中下载我们的预训练投影仪。不建议使用旧版投影仪,因为它们可能使用不同版本的代码库进行训练,如果关闭任何选项,模型将无法按预期运行/训练。

由于分辨率提高到 336px,LLaVA-v1.5-13B 在 8x A100 (80G) 上的视觉指令调整大约需要 20 小时。LLaVA-v1.5-7B 在 8x A100 (40G) 上大约需要 10 小时。

使用DeepSpeed ZeRO-3的训练脚本:finetune.sh

需要注意的新选项:

  • --mm_projector_type mlp2x_gelu
    :两层 MLP 视觉语言连接器。
  • --vision_tower openai/clip-vit-large-patch14-336
    :剪辑 ViT-L/14 336px。
  • --image_aspect_ratio pad
    :这会将非方形图像填充到正方形,而不是裁剪它们;它略微减少幻觉。
  • --group_by_modality_length True
    :仅当你的指令调优数据集同时包含语言(例如 ShareGPT)和多模式(例如 LLaVA-Instruct)时,才应使用此功能。它使训练采样器在训练期间仅对单一模态(图像或语言)进行采样,我们观察到这将训练速度提高 ~25%,并且不会影响最终结果。

评估

在LLaVA-1.5中,我们根据不同的12个基准测试评估模型。为了确保可重复性,我们使用贪婪解码评估模型。我们不会使用波段搜索进行评估,以使推理过程与实时输出的聊天演示保持一致。

详细的评估脚本即将推出。

GPT 辅助评估

我们针对多模态建模的 GPT 辅助评估管道旨在全面了解视觉语言模型的功能。有关更多详细信息,请参阅我们的论文。

  1. 生成 LLaVA 响应
python model_vqa.py \
    --model-path ./checkpoints/LLaVA-13B-v0 \
    --question-file \
    playground/data/coco2014_val_qa_eval/qa90_questions.jsonl \
    --image-folder \
    /path/to/coco2014_val \
    --answers-file \
    /path/to/answer-file-our.jsonl
  1. 评估生成的响应。在我们的例子中,answer-file-ref.jsonl 是由纯文本 GPT-4 (0314) 生成的响应,并提供了上下文标题/框。
OPENAI_API_KEY="sk-***********************************" python llava/eval/eval_gpt_review_visual.py \
    --question playground/data/coco2014_val_qa_eval/qa90_questions.jsonl \
    --context llava/eval/table/caps_boxes_coco2014_val_80.jsonl \
    --answer-list \
    /path/to/answer-file-ref.jsonl \
    /path/to/answer-file-our.jsonl \
    --rule llava/eval/table/rule.json \
    --output /path/to/review.json
  1. 总结评估结果
python summarize_gpt_review.py

引文

如果你发现LLaVA对你的研究和应用有用,请使用此BibTeX引用:

@misc{liu2023improvedllava,
      title={Improved Baselines with Visual Instruction Tuning}, 
      author={Liu, Haotian and Li, Chunyuan and Li, Yuheng and Lee, Yong Jae},
      publisher={arXiv:2310.03744},
      year={2023},
}

@misc{liu2023llava,
      title={Visual Instruction Tuning}, 
      author={Liu, Haotian and Li, Chunyuan and Wu, Qingyang and Lee, Yong Jae},
      publisher={arXiv:2304.08485},
      year={2023},
}

确认

  • 骆马:我们构建的代码库,以及我们的基本模型骆马-13B,具有惊人的语言功能!

有关未来的项目创意,请查看: