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 进行微调。

Sources