Project Icon

BakLLaVA

突破性多模态语言模型创新

BakLLaVA项目通过优化基础模型、改进训练流程、使用定制数据集和重构LLaVA架构,将先进的多模态能力融入语言模型。该项目与LAION、Ontocord和Skunkworks OSS AI小组合作,致力于提升AI系统理解和生成视觉内容的能力。BakLLaVA为研究人员提供了探索视觉语言模型前沿的强大工具。

BakLLaVA


BakLLaVA v1 的训练得益于我们的计算赞助商 Together Compute (www.together.ai)。BakLLaVA v1 可以在这里找到:https://huggingface.co/SkunkworksAI/BakLLaVA-1

这是一个与 LAION (www.laion.ai)、Ontocord (www.ontocord.ai) 和 Skunkworks OSS AI 团队合作的项目。

将最先进的多模态能力融入语言模型。

通过实施更优秀的基础模型、改进的训练过程、定制数据集,以及对原始 LLaVA 实现进行重大架构变更。


查看原始 LLaVA 代码、演示和论文:https://github.com/haotian-liu/LLaVA

原始论文和链接: 通过 GPT-4 级别能力的视觉指令调整,实现大型语言和视觉模型

[项目页面] [演示] [数据] [模型库]

通过视觉指令调整改进基线 [论文]
刘浩天, 李春远, 李宇恒, 李容재

视觉指令调整 (NeurIPS 2023, 口头报告) [论文]
刘浩天*, 李春远*, 吴清阳, 李容再 (*共同第一作者)

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

目录

安装

  1. 克隆此仓库并进入 LLaVA 文件夹
git clone https://github.com/SkunkworksAI/BakLLaVA.git
cd BakLLaVA
  1. 安装包
conda create -n llava python=3.10 -y
conda activate llava
pip install --upgrade pip  # 启用 PEP 660 支持
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 界面

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

启动控制器

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

启动 Gradio Web 服务器

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

您刚刚启动了 Gradio Web 界面。现在,您可以使用屏幕上打印的 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 running on ..."。现在,刷新您的 Gradio Web 界面,您将在模型列表中看到刚刚启动的模型。

您可以启动任意数量的工作器,并在同一个 Gradio 界面中比较不同的模型检查点。请保持 --controller 相同,并为每个工作器修改 --port--worker 为不同的端口号。

python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port <不同于 40000,比如 40001> --worker http://localhost:<相应更改,即 40001> --model-path <ckpt2>

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

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

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 内存占用运行推理,可能允许您在 VRAM 仅为 12GB 的 GPU 上运行。请注意,使用量化位数进行推理可能不如全精度模型准确。只需在您执行的模型工作器命令中添加 --load-4bit--load-8bit。以下是使用 4 位量化运行的示例。

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 检查点名称中没有 lora-merge,通常比合并的检查点小得多(7B 模型小于 1GB,13B 模型为 25GB)。 要加载未合并的LoRA权重,你只需要传递一个额外的参数--model-base,它是用于训练LoRA权重的基础LLM。你可以在模型库中查看每个LoRA权重的基础LLM。

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

CLI推理

无需Gradio界面即可使用LLaVA聊天图像。它还支持多个GPU、4位和8位量化推理。使用4位量化,对于我们的LLaVA-1.5-7B,在单个GPU上使用的VRAM少于8GB。

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训练包括两个阶段:(1) 特征对齐阶段:使用大约60万经过筛选的CC3M数据集将冻结的预训练视觉编码器连接到冻结的LLM;(2) 视觉指令微调阶段:使用15万个GPT生成的多模态指令来教导模型遵循多模态指令。

LLaVA在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

超参数

我们在微调中使用了与Vicuna类似的一组超参数。预训练和微调中使用的超参数如下所示。

  1. 预训练
超参数全局批量大小学习率轮数最大长度权重衰减
LLaVA-13B2561e-3120480
  1. 微调
超参数全局批量大小学习率轮数最大长度权重衰减
LLaVA-13B1282e-5120480

准备Vicuna检查点

在开始之前,请准备我们的基础模型Vicuna,它是一个经过指令微调的聊天机器人。请在这里下载其权重。

Vicuna有两个版本:v0和v1,它们之间的主要区别是提示格式。我们支持这两种版本。为确保最佳性能,你需要指定与你下载的权重相对应的正确提示版本:v0权重使用v0,所有Vicuna v1.x模型使用v1

预训练(特征对齐)

请在这里下载我们在论文中使用的CC3M数据集子集。

LLaVA-13B的预训练在8个A100(80G)上大约需要4小时。7B检查点大约需要2小时。

我们建议使用DeepSpeed进行训练,因为它可以节省大量GPU内存。我们提供了使用DeepSpeed的训练脚本在这里

你可以使用单个A100 GPU运行以下代码。请注意,per_device_train_batch_size * gradient_accumulation_steps应该等于128,以保持全局批量大小不变。

预训练:LLaVA-13B,1x A100(80G)。时间:约33小时。
python llava/train/train_mem.py \
    --model_name_or_path ./checkpoints/vicuna-13b \
    --version [v0 or v1] \
    --data_path /path/to/cc3m_595k.json \
    --image_folder /path/to/cc3m_595k_images \
    --vision_tower openai/clip-vit-large-patch14 \
    --tune_mm_mlp_adapter True \
    --mm_vision_select_layer -2 \
    --mm_use_im_start_end False \
    --mm_use_im_patch_token False \
    --bf16 True \
    --output_dir ./checkpoints/llava-13b-pretrain \
    --num_train_epochs 1 \
    --per_device_train_batch_size 16 \
    --per_device_eval_batch_size 4 \
    --gradient_accumulation_steps 8 \
    --evaluation_strategy "no" \
    --save_strategy "steps" \
    --save_steps 2400 \
    --save_total_limit 1 \
    --learning_rate 2e-3 \
    --weight_decay 0. \
    --warmup_ratio 0.03 \
    --lr_scheduler_type "cosine" \
    --logging_steps 1 \
    --tf32 True \
    --model_max_length 2048 \
    --gradient_checkpointing True \
    --lazy_preprocess True \
    --report_to wandb

视觉指令微调

  1. 准备数据

请下载我们的指令微调数据注释llava_instruct_158k.json,并在这里下载COCO train2017图像。

  1. 开始训练!

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

在我们最初发布论文时,我们在LLaVA-Instruct-158K数据集上使用了完整的3轮训练计划。脚本在这里提供。

在后续探索中,我们引入了LLaVA-Lightning,因为我们发现在LLaVA-Instruct-80K上进行更快的1轮训练计划可以实现快速收敛和良好性能。使用LLaVA Lightning,我们能够在LLaMA-2发布的同一天训练、验证并发布LLaVA-LLaMA-2检查点预览。如果你对了解更多关于LLaVA Lightning的信息感兴趣,请继续阅读以下部分。

Lightning

LLaVA-Lightning可以在8个A100 GPU上仅用3小时完成训练,包括预训练和微调。使用竞价实例时,成本仅为约40美元。

对于LLaVA Lightning,我们创建了两个蒸馏子集,以确保概念覆盖面广泛,同时提高训练效率。此外,我们只进行1轮指令微调,而不是论文中的3轮。我们发现这样的计划是有效的,可以实现快速收敛和良好性能。

对于预训练,我们创建了LAION-CC-SBU的概念平衡子集。它包含558K张图像。在这里下载数据。

对于指令微调,我们创建了LLaVA-Instruct-150K的子集。它包含80K个图像-指令对,其中包括40K对话和40K复杂推理数据,图像不重复。在这里下载llava_instruct_80k.json

超参数

  1. 预训练(脚本
超参数全局批量大小学习率轮数最大长度权重衰减
LLaVA-Lightning1282e-3120480
  1. 视觉指令微调(脚本) | 超参数 | 全局批量大小 | 学习率 | 训练轮数 | 最大长度 | 权重衰减 | | --- | ---: | ---: | ---: | ---: | ---: | | LLaVA-Lightning | 128 | 2e-5 | 1 | 2048 | 0 |

LLaVA-MPT-7b

借助LLaVA-Lightning,我们能够在8张A100 GPU上仅用3小时就训练出一个基于MPT-7B-Chat的检查点,包括预训练和微调的全过程。

注意:这是基于MPT-7B-chat检查点的LLaVA-Lightning研究预览版。模型的使用应遵守MPT-7B-chat的许可和协议。

  1. 使用方法

你无需下载我们的检查点,它会直接从我们的Hugging Face模型加载:liuhaotian/LLaVA-Lightning-MPT-7B-preview

python -m llava.serve.controller --host 0.0.0.0 --port 10000
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-Lightning-MPT-7B-preview
python -m llava.serve.gradio_web_server --controller http://localhost:10000
  1. 训练

我们使用与其他Lightning检查点相同的训练数据集和超参数。

评估

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

ScienceQA

请查看此处的文档。

引用

如果您发现LLaVA对您的研究和应用有用,请使用以下BibTeX进行引用:


@misc{liu2023llava,
      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},
}

致谢

  • Vicuna:我们基于此代码库构建,以及我们的基础模型Vicuna-13B具有惊人的语言能力!

相关项目

对于未来的项目想法,请查看:

项目侧边栏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号