nanoLLaVA 是 GitHub 上的开源项目(qnguyen3/nanoLLaVA),其定位为“世界上最小的视觉语言模型”,并基于 LLaVA(Large Language and Vision Assistant)构建。仓库同时介绍了 Bunny:一个轻量级但能力较强的多模态模型系列。
用途与定位 Bunny 面向多模态(视觉-语言)任务,旨在以较小的模型规模实现有竞争力的多模态理解能力,并支持替换不同的视觉编码器与语言模型骨干。
主要能力与模型
- 提供可插拔的视觉编码器,例如 EVA-CLIP、SigLIP。
- 提供多种语言骨干,包括 Phi-1.5、StableLM-2、Qwen1.5 与 Phi-2。
- 通过从更广泛数据源中精选、构建更具信息量的训练数据,以弥补模型规模减小带来的影响。
- 据资料,基于 SigLIP 与 Phi-2 的 Bunny-v1.0-3B 不仅优于同规模多模态模型,也优于更大的 7B 多模态模型,甚至达到与 13B 模型相当的性能。
- 2024.03.15 发布聚焦中文的 Bunny-v1.0-2B-zh,基于 SigLIP 与 Qwen1.5-1.8B。
使用方式
- 提供 HuggingFace transformers 代码片段,用于使用 Bunny-v1.0-3B 与 Bunny-v1.0-2B-zh。
- 训练分为两阶段:(1) 预训练阶段:连接冻结的预训练视觉编码器与冻结的 LLM,仅训练连接器;(2) 视觉指令微调阶段:让模型遵循多模态指令,更新连接器与可学习的 LLM 参数。
- 训练依赖:CUDA 11.8 与 cuDNN 8.7.0(CUDA 12 亦可),需要创建 conda 虚拟环境(python=3.10),安装 transformers、torch、torchvision、xformers、apex、flash-attention 等,并安装 bunny 包。
- 训练规模:使用 8 张 A100 GPU;如条件不同,可减小 per_device_train_batch_size 并相应增大 gradient_accumulation_steps,保持全局批大小不变(global_batch_size = per_device_train_batch_size × gradient_accumulation_steps × num_gpus)。
- 支持的骨干:视觉编码器支持 CLIP、EVA-CLIP、SigLIP;LLM 支持 phi-1.5、stablelm-2、qwen1.5-1.8b、phi-2。代码基于上述具体版本构建与测试。
- 预训练数据:使用 LAION-2B 的高质量核心集(去重且更具信息量),随机采样 200 万图文对并转换为训练格式。
- 视觉指令微调数据:通过修改 SVIT-mix-665K 构建 Bunny-695K。
- 服务与推理:可启动 Controller、Gradio Web Server 与 Model Worker,也可使用 CLI 推理(含全参数微调模型与 LoRA 微调模型两种加载方式;LoRA 权重可用 merge_lora_weights.py 合并)。
适用场景 适合希望在较小模型规模下进行多模态视觉-语言研究与开发的用户,包括需要替换视觉编码器/语言骨干开展实验、按两阶段流程训练多模态模型、以及通过 Gradio 或 CLI 进行本地推理的场景。
限制与许可
- 资料未提供 nanoLLaVA 自身的具体模型规模、训练数据、基准分数或商用说明。
- 项目自身采用 Apache 2.0 许可证;所使用的数据集与检查点受各自原始许可证约束,用户须遵守其全部条款。
- 训练建议使用 8 张 A100;其他硬件需按说明调整批大小与梯度累积。资料未提供其他硬件下的具体性能与耗时。