突破性多模态语言模型创新
BakLLaVA项目通过优化基础模型、改进训练流程、使用定制数据集和重构LLaVA架构,将先进的多模态能力融入语言模型。该项目与LAION、Ontocord和Skunkworks OSS AI小组合作,致力于提升AI系统理解和生成视觉内容的能力。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 级别能力的视觉指令调整,实现大型语言和视觉模型
通过视觉指令调整改进基线 [论文] <br> 刘浩天, 李春远, 李宇恒, 李容재
视觉指令调整 (NeurIPS 2023, 口头报告) [论文]<br> 刘浩天*, 李春远*, 吴清阳, 李容再 (*共同第一作者)
使用和许可声明:数据和检查点仅供研究使用。它们还受限于遵守 LLaMA、Vicuna 和 GPT-4 的许可协议。数据集采用 CC BY NC 4.0 许可(仅允许非商业用途),使用该数据集训练的模型不应用于研究目的之外。
git clone https://github.com/SkunkworksAI/BakLLaVA.git cd BakLLaVA
conda create -n llava python=3.10 -y conda activate llava pip install --upgrade pip # 启用 PEP 660 支持 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 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 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 位)启动模型工作器,这允许您以较低的 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-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
无需Gradio界面即可使用LLaVA聊天图像。它还 支持多个GPU、4位和8位量化推理。使用4位量化,对于我们的LLaVA-1.5-7B,在单个GPU上使用的VRAM少于8GB。
<img src="https://yellow-cdn.veclightyear.com/ab5030c0/5b590eca-7412-4221-b264-77e9167f6cd1.gif" width="70%">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类似的一组超参数。预训练和微调中使用的超参数如下所示。
超参数 | 全局批量大小 | 学习率 | 轮数 | 最大长度 | 权重衰减 |
---|---|---|---|---|---|
LLaVA-13B | 256 | 1e-3 | 1 | 2048 | 0 |
超参数 | 全局批量大小 | 学习率 | 轮数 | 最大长度 | 权重衰减 |
---|---|---|---|---|---|
LLaVA-13B | 128 | 2e-5 | 1 | 2048 | 0 |
在开始之前,请准备我们的基础模型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>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
请下载我们的指令微调数据注释llava_instruct_158k.json,并在这里下载COCO train2017图像。
你可以在模型库中下载我们预训练的投影器。不建议使用旧版投影器,因为它们可能是用不同版本的代码库训练的,如果有任何选项关闭,模型将无法按预期运行/训练。
在我们最初发布论文时,我们在LLaVA-Instruct-158K数据集上使用了完整的3轮训练计划。脚本在这里提供。
在后续探索中,我们引入了LLaVA-Lightning,因为我们发现在LLaVA-Instruct-80K上进行更快的1轮训练计划可以实现快速收敛和良好性能。使用LLaVA Lightning,我们能够在LLaMA-2发布的同一天训练、验证并发布LLaVA-LLaMA-2检查点预览。如果你对了解更多关于LLaVA 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
。
超参数 | 全局批量大小 | 学习率 | 轮数 | 最大长度 | 权重衰减 |
---|---|---|---|---|---|
LLaVA-Lightning | 128 | 2e-3 | 1 | 2048 | 0 |
借助LLaVA-Lightning,我们能够在8张A100 GPU上仅用3小时就训练出一个基于MPT-7B-Chat的检查点,包括预训练和微调的全过程。
注意:这是基于MPT-7B-chat检查点的LLaVA-Lightning研究预览版。模型的使用应遵守MPT-7B-chat的许可和协议。
你无需下载我们的检查点,它会直接从我们的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
我们使用与其他Lightning检查点相同的训练数据集和超参数。
我们提供了用于多模态建模的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{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}, }
对于未来的项目想法,请查看:
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号