SmolVLM 发布说明 / 新功能
Hugging Face 发布了 SmolVLM,一个专为效率、速度和本地部署设计的 2B 参数视觉语言模型(VLM)。该模型完全开源,所有检查点、数据集、训练配方和工具均在 Apache 2.0 许可证下发布。
模型变体和生态系统
SmolVLM 提供三种不同的版本以支持不同的用例:
- SmolVLM-Base: 专为下游微调设计。
- SmolVLM-Synthetic: 在合成数据上微调的变体。
- SmolVLM-Instruct: 经过指令调优的版本,可直接用于交互式最终用户应用。
生态系统包括与 transformers 库的集成、一个监督微调脚本和一个公开演示。这些模型使用开源数据集进行训练,具体是 The Cauldron 和 Docmatix。
技术架构
SmolVLM 的架构基于 Idefics3,但引入了若干优化以降低内存和计算需求:
- 语言骨干网络:用 SmolLM2 1.7B 替换 Llama 3.1 8B。
- 视觉压缩:采用像素洗牌策略将补丁视觉信息压缩 9x(相比 Idefics3 的 4x)。
- 图像补丁:使用 384x384 像素的补丁(为了像素洗牌策略可被 3 整除),而不是 364x364。
- 视觉骨干网络:使用具有 384x384 像素补丁和 14x14 内部补丁的形状优化 SigLIP。
性能和效率
基准测试
SmolVLM 在多个多模态基准测试中表现出竞争力的性能,同时相比其他 2B 级模型具有显著更低的内存占用:
| 模型 | MMMU (验证) | MathVista (测试mini) | MMStar (验证) | DocVQA (测试) | TextVQA (验证) | 最小 GPU RAM (GB) |
|---|---|---|---|---|---|---|
| SmolVLM | 38.8 | 44.6 | 42.1 | 81.6 | 72.7 | 5.02 |
| Qwen2-VL 2B | 41.1 | 47.8 | 47.5 | 90.1 | 79.7 | 13.70 |
| InternVL2 2B | 34.3 | 46.3 | 49.8 | 86.9 | 73.4 | 10.52 |
| PaliGemma 3B | 34.9 | 28.7 | 48.3 | 32.2 | 56.0 | 6.72 |
| moondream2 | 32.4 | 24.3 | 40.3 | 70.5 | 65.2 | 3.87 |
内存和吞吐量
SmolVLM 在图像编码方面非常高效,将每个 384x384 的图像补丁转换为仅 81 个 token。对于单张图像和提示,SmolVLM 使用大约 1.2k 个 token,而 Qwen2-VL 使用 16k 个 token。这种高效率带来:
- 减少 RAM:在
transformers中现有的 VLM 套件中内存使用最低。 - 更高吞吐量:预填充吞吐量比 Qwen2-VL 快 3.3 到 4.5 倍,生成吞吐量快 7.5 到 16 倍。
视频分析
SmolVLM 可以通过提取最多 50 均匀采样的帧用于基本的视频分析。在 CinePile 基准测试上的测试中,它获得了 27.14% 的得分,使其性能介于 InternVL2 (2B) 和 Video LlaVa (7B) 之间。
训练和微调
上下文扩展
为了支持多张图像和长序列,SmolLM2 的预训练上下文窗口被扩展到 16k 个 token。这是通过将 RoPE 基础值从 10k 增加到 273k 并对长上下文(来自 Dolma 的书籍和来自 The Stack 的代码)以及短上下文(FineWeb-Edu、DCLM 和一个数学数据集)数据的混合进行微调实现的。
检查点选择
最优检查点是通过在 MMMU、MMStar、DocVQA、TextVQA、MathVista 和 AI2D 上的加权指标选择的。团队指出,虽然一般性能通常会随着更多训练而提升,但 DocVQA 的性能随时间推移往往会下降。
自定义
SmolVLM 可以使用 transformers 和 TRL 库进行微调。提供的笔记本演示了在 VQAv2 数据集上使用 LoRA 或 QLoRA 进行微调。通过 8 位加载和梯度检查点,该模型可以在消费级 GPU(例如 L4)上使用大约 16 GB 的 VRAM 进行微调。