BakLLaVA

BakLLaVA

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

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

BakLLaVA多模态语言模型视觉指令微调AI训练Github开源项目

BakLLaVA

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/ab5030c0/b6b79e89-f0dd-4977-830b-1ba8c4eef4d4.gif" width="50%"> <br> </p>

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 级别能力的视觉指令调整,实现大型语言和视觉模型

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

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

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

代码许可 数据许可 使用和许可声明:数据和检查点仅供研究使用。它们还受限于遵守 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
<img src="https://yellow-cdn.veclightyear.com/ab5030c0/5b590eca-7412-4221-b264-77e9167f6cd1.gif" width="70%">

训练

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,以保持全局批量大小不变。

<details> <summary>预训练:LLaVA-13B,1x A100(80G)。时间:约33小时。</summary>
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
</details>

视觉指令微调

  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具有惊人的语言能力!

相关项目

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

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多