针对具有 GPT-4 级别功能的大型语言和视觉模型进行视觉指令调整。
通过可视化指令调整改进基线 [论文]
刘浩天, 李春元, 李宇恒, 李勇宰
视觉教学调优(NeurIPS 2023,口语)[论文]
刘浩天*, 李春元*, 吴庆阳, 李勇宰(*同等贡献)
由GLIGEN通过“戴眼镜的可爱熔岩美洲驼”和框提示生成
使用和许可声明:数据和检查点仅供研究使用并许可使用。它们也仅限于遵循LLaMA,Vicuna和GPT-4许可协议的使用。数据集是NC 4.0的CC(仅允许非商业用途),使用该数据集训练的模型不应用于研究目的之外。
git clone https://github.com/haotian-liu/LLaVA.git
cd LLaVA
conda create -n llava python=3.10 -y
conda activate llava
pip install --upgrade pip # enable PEP 660 support
pip install -e .
pip install ninja pip install flash-attn --no-build-isolation
git pull
pip uninstall transformers
pip install -e .
请查看我们的模型动物园,了解所有公共LLaVA检查站,以及如何使用砝码的说明。
要运行我们的演示,你需要在本地准备 LLaVA 检查点。请按照此处的说明下载检查点。
要在本地启动 Gradio 演示,请逐个运行以下命令。如果计划启动多个模型工作线程以在不同检查点之间进行比较,则只需启动控制器和 Web 服务器一次。
python -m llava.serve.controller --host 0.0.0.0 --port 10000
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 的 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 位)启动模型工作线程,这允许你在减少 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 检查点在模型名称中没有, 并且通常比合并的检查点小得多 (小于 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
我们在微调中使用了与骆马类似的一组超参数。下面提供了预训练和微调中使用的两个超参数。
超参数 | 全球批量大小 | 学习率 | 时代 | 最大长度 | 重量衰减 |
---|---|---|---|---|---|
LLaVA-v1.5-13B | 256 | 1e-3 | 1 | 2048 | 0 |
超参数 | 全球批量大小 | 学习率 | 时代 | 最大长度 | 重量衰减 |
---|---|---|---|---|---|
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。
请下载最终混合物的注释,我们的指令调整数据llava_v1_5_mix665k.json,并从构成数据集下载图像:
下载所有数据后,按如下方式组织数据,
./playground/data
├── coco │ └── train2017 ├── gqa │ └── images ├── ocr_vqa │ └── images ├── textvqa │ └── train_images └── vg ├── VG_100K └── VG_100K_2
你可以在模型动物园中下载我们的预训练投影仪。不建议使用旧版投影仪,因为它们可能使用不同版本的代码库进行训练,如果关闭任何选项,模型将无法按预期运行/训练。
由于分辨率提高到 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 辅助评估管道旨在全面了解视觉语言模型的功能。有关更多详细信息,请参阅我们的论文。
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
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
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},
}
有关未来的项目创意,请查看: