背景

过去两年,VLM 的主流进展主要来自“更大的模型、更大的数据、更多模态任务统一训练”。相应的代价是推理显存高、视觉 token 长、视频场景成本更夸张,导致很多模型虽然 benchmark 很强,却不适合边缘端、浏览器、本地电脑和移动设备

SmolVLM表明:小模型参数变小,但仍继承了大模型的视觉 token 化和架构习惯,实际运行时 RAM/VRAM 依然很高

本文切入的关键:作者不是只追求“更小的参数量”,而是把目标改成了 resource-efficient inference,也就是在真实部署条件下把显存、token 数、吞吐和效果一起优化。

论文指出:对于 VLM,用模型参数量衡量成本是不够的,RAM usage 更接近真实部署代价

创新点

1. 重新定义 encoder 和 LM 的算力分配。
论文发现:在小 VLM 里,大视觉编码器不一定划算。大模型常见的“语言塔很大、视觉塔也尽量堆强”在小模型里会失衡。作者实验证明,小模型更适合更平衡的 encoder-LM 参数配比,因此 256M/500M 版本最终都选了 93M 的 SigLIP base,而不是 400M 级视觉编码器。

2. 强调长上下文对小 VLM 的价值。
小 VLM 对 context length 很敏感。因为图像经过编码后会占掉大量 token,若上下文太短,多图、长图、视频都很难支持。SmolVLM 因此将 SmolLM2 的上下文扩展到 16k,并把这当成整体 recipe 的关键部分之一。

3. 小模型反而更适合更激进的视觉 token 压缩
一般会担心压缩太狠会伤害 OCR 和细粒度定位,但论文表明:对小模型来说,更激进的压缩能显著减轻 attention 开销,整体上更值。SmolVLM 因此把 pixel shuffle 压缩做得比 Idefics3 更强:2.2B 版本相对 Idefics3 把视觉信息压得更狠,小版本还进一步提升了每 token 对应的像素面积。

4. 把高分辨率图像和视频分开处理
对于图像,SmolVLM 采用了 image splitting/tiling:把高分辨率图切成多个子图,再配一个缩小的全局图;这样既保留细节,又不过度爆 token。对视频,作者专门测试了 frame averaging,结果发现会明显伤害效果,因此最终没有采用“多帧平均压缩”。这说明图像与视频在 token budget 上不能简单复用同一 trick。

5.tokenization 和 prompt engineering 在小模型里不是小修小补,而是核心因素。
论文发现,用字符串位置标记(如 <row_1_col_2>)会出现所谓 “OCR loss plague”:loss 看起来降了,但 OCR 没真的学好。换成 learned positional tokens 后,训练更稳定、OCR 更好。与此同时,system prompt、media intro/outro tokens、只在 completion 上训练、mask user prompt,这些在小模型上都能带来明显增益。

6. small VLM 不能直接继承大模型时代的 SFT/CoT 数据习惯。
这篇文章一个很有启发的结论是:把 LLM 后期 SFT 的文本直接复用到小 VLM 上,反而会掉点;CoT 数据也不是越多越好,只保留极少比例时有轻微帮助,比例一大就会伤害视觉能力。也就是说,小模型容量有限,过多 reasoning-style text 会“挤占”视觉建模空间。

模型架构

SmolVLM 的主干是 Idefics3 风格的 self-attention VLM。整体流程很直接:

  1. 图像先被切成子图;视频先采样成若干帧
  2. 这些视觉输入经过 SigLIP 编码成视觉特征
  3. 视觉特征先做 pixel shuffle,以减少 token 数
  4. 再经过一个 MLP projector 映射到语言模型输入空间
  5. 视觉 token 与文本 token 交错/拼接后,一起送入 SmolLM2 解码生成文本

论文最终给了三档模型:

  • 256M:93M 的 SigLIP base + SmolLM2-135M;
  • 500M:同样的 93M SigLIP base + SmolLM2-360M;
  • 2.2B:更大的 SigLIP-So 视觉塔 + 1.7B 的 SmolLM2。
    这三档基本对应“极致端侧 / 中等端侧 / 更强但仍高性价比”的不同部署场景。

从公开模型卡还能看到更细的设计:256M 版把 512×512 的图块压成 64 个 visual tokens,并且为子图分隔加入了专门 special tokens;2.2B 的早期公开版则是每个 384×384 patch 编成 81 tokens。这说明作者不是单纯“缩 backbone”,而是在视觉 token 接口上也做了成体系的重设计

Pipeline

SmolVLM 的训练可以理解成两层 pipeline。

模型侧 pipeline

先把语言底座 SmolLM2 的上下文扩到 16k;然后用视觉 encoder + pixel shuffle + MLP projector 接到 LLM 上;最后再做 vision stage 和 video stage 的 multimodal instruction tuning。对 2B 公开版来说,context extension 通过把 RoPE base 从 10k 调到 273k,并在长短上下文混合数据上继续训练来完成。

数据侧 pipeline

论文的正式训练分两阶段:

  • Vision stage:主要基于 The Cauldron、Docmatix,并加入 MathWriting,强调文档理解、captioning、VQA、图表/表格理解和视觉推理。
  • Video stage:加入 LLaVA-Video-178K、Video-STaR、Vript、ShareGPT4Video、Vista-400K、MovieChat、FineVideo 等视频数据,同时混入 multi-image 和少量文本数据,维持文本能力不塌。

其中一个非常重要的 recipe 是:保留严格的 14% 文本比例,而不是简单复用大量 LLM-SFT 文本;另外在 SFT 阶段只训练 completion token,并通过 system prompt、media intro/outro、prompt masking 提高泛化。这个 pipeline 非常“工程化”,但正是它构成了论文的主要贡献。

实验

实验设置

作者用 VLMEvalKit 做统一评测,横跨 9 个图像/多任务 benchmark 和 5 个视频 benchmark,并且特别把性能和 RAM usage 结合起来看,而不是只比参数量。

图像任务结果

表 1 里三档模型的整体均分分别是:

  • 256M:44.0
  • 500M:51.0
  • 2.2B:59.8

2.2B 版在多个典型图像 benchmark 上都很强:OCRBench 72.9、DocVQA 80.0、ScienceQA 89.6、MMMU 42.0、MathVista 51.5、MMStar 46.0 500M 版:DocVQA 70.5、MMMU 33.7、MathVista 40.1、OCRBench 61.0;256M 版则用极小资源提供了一个仍然可用的多模态基线。

视频任务结果

视频上,2.2B 版在 Video-MME 52.1、MLVU 55.2、TempCompass 53.7、WorldSense 36.2,其中在 Video-MME 和 WorldSense 上表现尤其突出; 500M 版也达到了 Video-MME 42.2、MLVU 47.3、TempCompass 49.0

效率与部署结果

论文表中 batch size=1 时,三档模型 RAM usage 分别约为:

  • 256M:0.8 GB
  • 500M:1.2 GB
  • 2.2B:4.9 GB

对照的高性能开放模型 MolmoE-A1B-7B 则需要 27.7 GB。这也是论文反复强调的重点:SmolVLM 的优势不只是“小”,而是“小到真能部署”。

公开 2B 版博客还给了很直观的解释:SmolVLM 把单张图和提示编码成约 1.2k tokens,而 Qwen2-VL 在同类测试里达到 16k tokens;因此它的显存和吞吐都会明显更好。该博客报告,SmolVLM 相对 Qwen2-VL 的 prefill 吞吐快 3.3–4.5 倍,generation 吞吐快 7.5–16 倍