SmolVLA: A Vision-Language-Action Model for Affordable and Efficient Robotics
Paper: arXiv:2506.01844 Code: huggingface/lerobot Code reference:
main@dfdc48a7(2026-05-19)
1. Motivation (研究动机)
SmolVLA 解决的核心问题不是“再做一个更小的 VLA”这么简单,而是把 VLA 真正放到普通研究者、教育者和低成本机器人用户能承受的硬件与数据条件下。论文指出,VLM 已经在大规模图文、视频数据上学到了视觉和语言知识,因此把 VLM 改造成 vision-language-action policy 是合理路线;但现有 VLA 往往有数十亿参数,训练成本、显存、推理延迟和真实机器人部署门槛都很高。OpenVLA、RT-2-X、 等模型证明了 open VLA 的可行性,却仍依赖大模型、大数据和昂贵机器人平台,这与低成本 SO-100 / SO-101 这类社区机器人生态并不匹配。
第二个动机是数据。机器人学习无法像语言模型那样直接依赖互联网文本规模化,因为机器人轨迹需要人类 teleoperation,且不同机器人 embodiment、传感器、控制频率、相机命名、action parameterization 和任务描述差异很大。论文称这种异构性会形成 “data islands”:每个小数据集可能对本任务有效,但直接拼接会带来噪声。SmolVLA 的立场是:社区采集数据虽然噪声大、格式不统一,但它覆盖了家庭、实验室、不同相机视角、不同对象和不同任务,反而提供了低成本 robot learning 生态最需要的多样性。关键不是把这些数据忽略掉,而是用足够轻量的模型和标准化流程把它们变成可训练的预训练语料。
第三个动机是推理实时性。多数 action-chunking policy 会一次预测一段低层动作,然后机器人执行整个 chunk。这样能降低模型调用频率,却会在 chunk 内变成 open-loop:如果物体滑动、抓取偏移、网络/计算延迟出现,机器人只能继续执行旧动作。另一种极端是每个控制步都重新推理并聚合重叠 chunk,但这对边缘设备或 CPU 部署不友好。SmolVLA 因此把效率问题拆成两层:模型本身要小,控制栈也要避免“执行动作时等待推理”的空档。
论文的目标可以概括为:在保持 VLA 语义理解与多相机输入能力的同时,把训练、微调、推理和真实机器人部署都压到更可访问的范围内。它声称 SmolVLA 可以在单 GPU 条件下训练,在消费级 GPU 甚至 CPU 上部署;主模型 0.45B 参数,远小于 3B–7B 级别 VLA;预训练只使用 481 个社区数据集、22.9K episodes 和 10.6M frames,却在仿真与真实 SO100 / SO101 任务上接近或超过更大的基线。
2. Idea (核心思想)
SmolVLA 的核心想法是把“低成本 VLA”分成三个互相配合的设计:第一,用 SmolVLM-2 作为 compact pretrained VLM,只保留足够有用的早期语言层和很少的视觉 token;第二,用 flow matching action expert 生成连续 action chunks,而不是把 action 离散成语言 token;第三,用异步推理栈把 observation processing / action prediction 与 action execution 解耦,减少真实机器人等待推理的时间。
Figure 1 的结构很直接:输入包括多路 RGB 相机、当前 sensorimotor state 和自然语言指令。VLM 负责把图像、语言和状态编码成条件特征;action expert 接收这些特征以及带噪 action chunk,经过交错的 cross-attention / self-attention block 输出 flow field,最后采样出一段连续动作。图里的 scissors 标识了 layer skipping:不是用完整 SmolVLM-2 的所有 LLM 层,而是只使用前 层,主模型中 。
这篇论文的关键 trade-off 是:它没有把小模型做成“从零训练的小 policy”,而是尽量保留 VLM 预训练带来的视觉-语言先验;也没有把机器人动作完全语言化,而是保留连续控制的 chunk 结构;同时它承认小模型推理仍有延迟,因此在系统层面用 async stack 弥补。换言之,SmolVLA 的贡献不是某个单独模块,而是一个从数据、模型、训练目标到部署控制栈的可复现实用组合。
一个重要的直觉是,VLA 的瓶颈不只在参数量。若视觉 token 太多,推理会慢;若每次都等完整 action chunk 执行完再观测,控制会迟钝;若社区数据的 task annotation 和 camera view 混乱,预训练会学到不一致映射。SmolVLA 分别用 64 visual tokens、、camera normalization、VLM-based instruction rewriting、flow matching 和 async queue policy 来处理这些瓶颈。
3. Method (方法)
3.1 Model architecture
SmolVLA 由两个主体组成:pretrained VLM 和 action expert。VLM 的作用是感知环境并把多模态输入变成条件特征;action expert 的作用是在这些特征条件下输出连续动作。论文使用 SmolVLM-2 作为 VLM backbone。SmolVLM-2 由 SigLIP 视觉编码器和 SmolLM2 language decoder 组成,适合 multi-image / video 输入。对机器人任务而言,输入 token 被分成三类:图像经过视觉编码器和 token-shuffling 得到 visual tokens;语言指令被 tokenizer 变成 text tokens;sensorimotor state 通过线性层投影成一个 token,使其维度匹配 language model token dimension。三者拼接后进入 decoder,decoder 第 层的输出作为 action expert 的条件。
为了降低视觉计算量,SmolVLA 不使用 SmolVLM-2 原本支持的 image tiling,只使用 global image,并通过 pixel shuffle 把每帧 visual token 限制到 64 个。这个选择牺牲了一部分高分辨率细节,但换来更低延迟和更小显存。对真实桌面 manipulation 来说,论文认为这种牺牲可接受,因为任务常常依赖物体位置、相机视角和状态 token,而不是长文本式视觉推理。
为了进一步加速,SmolVLA 不使用 VLM 的全部 LLM 层,而是只使用前 层。论文的主配置把 设为总层数的一半,即 ;实验中该选择在速度和性能之间最好。这个设计也有表征层面的依据:下游机器人控制并不一定需要最后一层最语言化的特征,较早层可能保留更多视觉/空间信息。代码中的默认配置对应 num_vlm_layers=16,即只取 SmolVLM-2 LLM 的前 16 层。
3.2 Flow matching action expert
Action expert 接收 VLM 特征并预测 action chunk。令 action chunk 为: 论文采用 conditional flow matching transformer。训练目标写作: $ \mathcal L^\tau(\theta)= \mathbb E_{p(\mathbf A_t \mid \mathbf o_t), q(\mathbf A_t^\tau \mid \mathbf A_t)} \left[ \left| \mathbf v_\theta(\mathbf A_t^\tau,\mathbf o_t)
\mathbf u(\mathbf A_t^\tau \mid \mathbf A_t)
\right|^2
\right]
\mathbf{o}_to_tN
\mathbf A_t^\tau = \tau \mathbf A_t + (1-\tau)\epsilon,\quad
\epsilon \sim \mathcal N(0,\mathbf I)
\mathbf u(\mathbf A_t^\tau \mid \mathbf A_t)=\epsilon-\mathbf A_t
$
代码实现中变量方向略不同但等价地服务于从噪声积分到动作:modeling_smolvla.py 在训练时采样 Gaussian noise 和 Beta time,构造 x_t = time * noise + (1 - time) * actions,目标向量 u_t = noise - actions,再用 F.mse_loss(u_t, v_t) 训练 expert;推理时从 noise 开始,令 dt=-1/num_steps,做 10 步 denoising integration,逐步把 noisy action chunk 推向真实 action chunk。这个映射说明论文中的 flow matching 不是抽象描述,而是直接落到了 LeRobot 的 VLAFlowMatching.forward() 和 sample_actions()。
Action expert 的 attention 结构也有论文贡献。不同于只用 self-attention 的 风格,或只用 cross-attention 的一些轻量 VLA,SmolVLA 交错使用 cross-attention 和 causal self-attention。Cross-attention 让 action tokens 访问 VLM features 的 keys / values;self-attention 让 action chunk 内的动作彼此通信;causal mask 防止当前位置看到未来动作,从而避免未来动作泄漏。论文经验上发现,self-attention 对真实机器人更重要,因为它能让一段 action chunk 更平滑;而 CA+SA 的组合在 LIBERO 平均成功率达到 85.5,高于 CA-only 的 79.0 和 SA-only 的 74.5。
3.3 Community pretraining data
SmolVLA 的预训练数据不是传统大实验室的封闭机器人数据,而是 Hugging Face 上社区贡献的 LeRobot 数据。论文筛选出 481 个社区数据集,合计 22.9K episodes、10.6M frames。筛选标准包括 embodiment type、episode count、整体数据质量和 frame coverage。这个规模比很多 robotics pretraining 数据小一个数量级,但覆盖了更多低成本机器人用户的真实采集环境。
社区数据的主要问题是 annotation 和 camera naming 不稳定。许多数据集的任务描述可能是 task desc、Hold、Up,甚至完全缺失。SmolVLA 用 Qwen2.5-VL-3B-Instruct 自动生成更清晰的短任务描述:对每个数据集抽取代表性帧,结合原始 instruction,让 VLM 生成 action-oriented sentence。这样做的目的不是让模型“理解更复杂语言”,而是把 imitation learning 的 condition 变成一致的任务语义。
相机标准化也很关键。同一个字段名 images.laptop 在不同数据集中可能代表 top view、side view 或 wrist view。论文手工把相机映射到标准 view type,优先顺序为 top、wrist、side,并重命名为 OBS_IMAGE_1、OBS_IMAGE_2、OBS_IMAGE_3;多余视角保留顺序但训练时丢弃未用视角。这一步直接对应代码侧的图像输入准备:SmolVLA policy 会把多路图像整理成模型期望的 image list 和 mask,再与语言 token、state token 共同构成 prefix。
3.4 Asynchronous inference
SmolVLA 的异步推理要解决的是 chunk policy 的空档问题。普通 synchronous inference 会先根据 observation 预测一段动作 ,机器人执行完这段 chunk 后才获取新 observation 并预测下一段。这样计算频率低,但如果推理耗时,机器人会在下一段 chunk 生成前 idle;而且整个 chunk 执行期间环境变化不会被新 observation 修正。
异步栈把系统拆成 RobotClient 和 PolicyServer。RobotClient 持有当前 action queue,持续 PopFront 并执行动作;当剩余动作比例 低于阈值时,它捕获新 observation,并非阻塞地发给 PolicyServer 做 AsyncInfer。如果新 chunk 在旧 queue 耗尽前返回,就用函数 聚合重叠动作;如果尚未返回,就继续使用旧 queue。为避免重复请求和机器人抖动,系统会用 joint-space 距离判断 near-duplicate observation,低于阈值 的 observation 不重复处理;但当 queue 真正耗尽时,最近 observation 会被强制处理。
这个设计带来两个实际价值。第一,它消除了“动作执行和模型推理串行等待”的一部分空档,使控制 loop 更紧;第二,它允许把 PolicyServer 放到更强的 GPU 机器上,而低功耗机器人端只负责传感器、队列和执行。对低成本机器人来说,这比要求每台机器人都带高端 GPU 更现实。需要注意的是,论文的代码主 policy 仍提供同步的 select_action() 队列逻辑;异步/RTC 相关能力在 LeRobot 中通过 predict_action_chunk() 与 RTC processor 参数暴露,不能把默认 select_action() 误读成完整 async stack。
3.5 Code mapping (mandatory code search)
代码检索确认论文官方实现位于 arXiv 页面给出的 huggingface/lerobot。本笔记锚定当前 main 分支 dfdc48a7(2026-05-19),不是论文提交日的历史快照,因此下表用于说明当前实现与论文概念的对应关系。
| Paper Concept | Source File | Key Class / Function | 对应关系 |
|---|---|---|---|
| SmolVLA 配置 | src/lerobot/policies/smolvla/configuration_smolvla.py:24-100 | SmolVLAConfig | 默认 chunk_size=50、n_action_steps=50、image resize 512、num_steps=10、num_vlm_layers=16、self_attn_every_n_layers=2、expert_width_multiplier=0.75。 |
| VLM + expert 拼接 | src/lerobot/policies/smolvla/smolvlm_with_expert.py:103-144,405-484 | SmolVLMWithExpertModel | 根据 expert_width_multiplier 缩小 expert hidden size;按 self_attn_every_n_layers 在 expert 层中交错 self-attention / cross-attention;只迭代 num_vlm_layers。 |
| Flow matching 训练 | src/lerobot/policies/smolvla/modeling_smolvla.py:620-810 | VLAFlowMatching.forward | 采样 noise 和 Beta time,构造 noisy actions,拼接 prefix / suffix embedding,输出 vector field,并以 MSE 拟合 u_t=noise-actions。 |
| Flow matching 推理 | src/lerobot/policies/smolvla/modeling_smolvla.py:812-916 | sample_actions, denoise_step | 从 Gaussian noise 开始,10 步负步长积分;prefix KV cache 先算一次,后续 denoise 只更新 action suffix。 |
| Action queue | src/lerobot/policies/smolvla/modeling_smolvla.py:276-352 | _get_action_chunk, predict_action_chunk, select_action | predict_action_chunk() 直接返回 chunk;select_action() 维护 action queue,queue 为空时才重新采样 chunk。 |
| Fine-tuning 文档 | docs/source/smolvla.mdx:47-65 | lerobot-train --policy.path=lerobot/smolvla_base | 官方文档使用 lerobot/smolvla_base 作为 450M pretrained model,示例 20k steps 约 4 小时 A100。 |
从代码看,论文的“轻量”不是只由参数量决定:配置层固定 512 图像、50 action chunk、10 denoise steps、冻结视觉编码器、默认训练 expert-only;模型层通过 prefix/suffix attention mask 明确区分图像/语言/state 与 action tokens;推理层还复用 prefix KV cache,避免每个 denoise step 重算图像和语言上下文。这些细节共同决定了实际推理成本。
4. Experimental Setup (实验设置)
实验覆盖仿真和真实机器人。仿真使用 LIBERO 与 Meta-World。LIBERO 有 Spatial、Object、Goal、Long 四类,每类 10 个任务,共 40 个任务;论文使用 physical-intelligence/libero 数据集,包含 1,693 episodes,并以每任务 10 次试验、二值成功率评估。Meta-World 覆盖 50 个任务,按 easy、medium、hard、very hard 分组;论文新收集了每个任务 50 条 demonstrations,共 2,500 episodes,同样每任务 10 次试验。
真实机器人部分使用 SO-100 和 SO-101。SO-100 是低成本、3D-printable 的 6 DoF 机械臂;SO-101 是改进版本,装配更快、电机更平滑。论文在 SO-100 上评估三类任务:Pick-Place、Stacking、Sorting;在 SO-101 上评估 Pick-Place-Lego。每个真实数据集对应一个任务,每个任务 5 个起始位置、每个位置 10 条轨迹,即每数据集 50 demonstrations。Pick-Place 得分拆成抓起 cube 0.5 分、放入 box 0.5 分;Stacking 拆成抓起上方 cube 0.5 分、堆到下方 cube 0.5 分;Sorting 更长程,红/蓝 cube 与左右 box 匹配,每个抓取/匹配子步骤 0.25 分。
训练细节也体现了“可访问”目标。预训练使用 LeRobot 框架,在社区数据上训练 200,000 steps,global batch size 256,100-step warmup 后用 cosine LR schedule,从 衰减到 ,优化器为 AdamW,。图像 resize 到 512×512。主模型为 450M 参数,其中约 100M 属于 action expert;只使用 VLM 的前 16 层;action expert 输出 的 action chunks;flow matching 推理固定 10 steps;训练时冻结 VLM,只训练 action expert。论文实际预训练用 4 GPUs 以容纳大 batch,总项目约消耗 30k GPU hours,但作者强调模型本身足够小,可以在单 GPU 上训练。
基线包括 和 ACT。 是 3.3B 参数 VLA,使用 Paligemma 与 flow matching,并在 10,000 小时 cross-embodiment robotics data 上预训练;真实任务中 会在目标数据上微调。ACT 是约 80M 参数的 CVAE / transformer policy,使用 ImageNet 预训练 ResNet 视觉编码器,但 CVAE 从零训练,目标是直接回归连续 action chunks。这个基线设置让 SmolVLA 同时面对“大 VLA”与“经典轻量 imitation policy”。
5. Experimental Results (实验结果)
5.1 Simulation
在 LIBERO 上,SmolVLA 0.45B 的平均成功率为 87.3,超过 Diffusion Policy 72.4、Octo 75.1、OpenVLA 76.5、 Paligemma-3B 初始化版 71.8,也略高于 robotics-pretrained 3.3B 的 86.0。更大的 SmolVLA 2.25B 达到 88.75,说明模型放大仍有收益,但 0.45B 已经非常接近。分项看,0.45B 在 Spatial/Object/Goal/Long 上分别为 90/96/92/71;2.25B 为 93/94/91/77;Long-horizon 仍是最难项。
在 Meta-World 上,SmolVLA 0.45B 平均 57.3,超过 Diffusion Policy 10.5、TinyVLA 31.6、 Paligemma 50.5 和 robotics-pretrained 47.9。SmolVLA 2.25B 平均 68.24,尤其 Hard 任务达到 70、Very Hard 64,说明更大模型对复杂任务有明显帮助。0.24B 版本平均 56.95,和 0.45B 的 57.3 接近,表明在该 benchmark 上数据/训练设置也可能限制了 0.45B 的优势。
论文特别强调,相比 ,SmolVLA 大约快 40% 训练,并消耗 6× 更少内存。这个结论的重要性在于:即便 2.25B 版本性能最好,真正符合论文标题“affordable and efficient”的主角仍是 0.45B 版本,因为它在成本显著更低时达到可竞争结果。
5.2 Real-world SO100 / SO101
SO100 三任务结果中,ACT 单任务训练平均 48.3,Pick-Place / Stacking / Sorting 分别为 70 / 50 / 25; 3.5B 多任务训练平均 61.7,分别为 100 / 40 / 45;SmolVLA 0.45B 多任务训练平均 78.3,分别为 75 / 90 / 70。这个结果说明 SmolVLA 的强项不只是简单 pick-place;它在 stacking 和 sorting 上比 更稳,尤其 sorting 从 45 提升到 70,显示社区预训练和 action expert 对多任务桌面操作有实际价值。
SO101 Pick-Place-Lego 是跨 embodiment / 新任务泛化测试。ACT 在 in-distribution / out-of-distribution 上为 70 / 40;SmolVLA 为 90 / 50。论文指出 SmolVLA 没有在 SO101 数据上预训练,因此该结果支持“从 SO100 社区数据预训练到 SO101 微调/泛化”的说法。不过 OOD 只有 50,说明更换 embodiment、物体和透明容器后仍存在明显泛化瓶颈。
预训练与多任务学习的 ablation 更直接:SmolVLA 0.45B 单任务、无 VLA pretraining 时平均 40;多任务、无 VLA pretraining 时平均 51.7;多任务、带 VLA pretraining 时平均 78.3。这个跨度说明真实机器人成功率主要来自两个因素叠加:多任务训练改善共享技能,社区预训练提供可迁移的视觉-动作先验。若只看模型架构而忽略数据,无法解释 40 到 78.3 的提升。
5.3 Asynchronous inference
异步推理在成功率上不是单调更高:SO100 三任务中 Sync 为 75 / 90 / 70,平均 78.3;Async 为 80 / 90 / 50,平均 73.3。Sorting 降到 50,说明 async queue aggregation 或更频繁 observation 处理并不自动改善长程任务,可能引入动作不一致或任务阶段切换问题。但 async 的优势体现在固定时间内完成更多工作:任务完成时间 Sync total 137.5s、avg 13.75s、std 2.42;Async total 97.0s、avg 9.70s、std 2.95。固定时间 cube 数量 Sync total 9、avg 1.8、std 0.45;Async total 19、avg 3.8、std 1.3。
因此,async stack 的价值应理解为吞吐和延迟优化,而不是替代模型能力。对于 pick-place 这类短任务,Async Pick-Place 从 75 到 80,同时速度更快;对 Sorting 这类长任务,Async 成功率下降提醒读者:queue threshold、overlap aggregation、near-duplicate filter 和任务阶段稳定性需要按任务调参。论文 caption 也说明 async hyperparameters 是为 Pick-Place 优化后复用于其他任务。
5.4 Ablations
Flow matching 优于 L1 regression。LIBERO 上,flow matching 在 Spatial/Object/Goal/Long/Avg 为 89/94/85/53/80.25;regression 为 92/85/86/38/75.25。Regression 在 Spatial 和 Goal 不差,但 Long-horizon 从 53 降到 38,说明直接回归连续 chunk 在长程组合上更容易退化。
State 输入位置很重要。把 states 作为 VLM prefix 并用 CA 时为 89/94/85/53/80.3;把 states 作为 suffix 给 expert 时为 86/82/78/47/73.3。若使用 SA,prefix 为 62/74/57/20/53.3,suffix 为 80/92/80/47/74.8。最合理解释是:state token 若能参与 VLM prefix 表征,action expert 得到的条件更稳定;但 attention 机制必须匹配,否则 state token 也可能被低效利用。
Attention 结构验证了交错 CA+SA 的必要性。CA-only 平均 79.0,SA-only 平均 74.5,CA+SA 平均 85.5;在 Long 项上分别为 54、40、67。Causal self-attention 也优于 bidirectional mask:Causal 平均 74.5,Bidir 平均 67.5,Long 从 23 提升到 40。虽然直觉上 bidirectional 能看更多 action token,但它会让训练时未来动作信息泄漏到当前 token,导致推理时不匹配。
VLM layer 使用也有清晰 trade-off。使用 8/16/24/32 层的平均成功率分别为 75.0/78.5/79.5/80.3;Skip 每二层为 75.5;直接换成 VLM-256M 为 75.8。完整 32 层最高,但 16 层已经接近,并大幅降低计算。论文最终选择 ,不是因为 16 层性能最高,而是因为性价比最好。
Action chunk 大小在 10 到 50 之间最好。Chunk size 1 平均 50.0,10 为 84.0,30 为 78.5,50 为 80.3,100 为 74.5。Action execution steps 也类似:每 1 步或 10 步重新采样 observation 时平均 80.3 / 82.8;30 步降到 70.8;50 步降到 51.8。这与 async 章节一致:chunk 太短会丢失动作连续性,chunk 太长会让系统 open-loop 太久。
6. Limitations / Notes (局限与阅读要点)
第一,SmolVLA 的“affordable”是相对大 VLA 的。论文项目总消耗约 30k GPU hours,预训练也实际用了 4 GPUs;只是由于模型小,读者可以单 GPU 复现或微调。若只用官方 smolvla_base 微调,门槛确实大幅降低;若要从头重做社区数据预训练,仍需要工程与算力投入。
第二,社区数据带来低成本与多样性,也带来数据噪声。论文用 Qwen2.5-VL-3B-Instruct 补全 instruction,并手工标准化相机视角,但这不是完全自动化流程。未来如果社区数据继续扩大,camera mapping、task annotation、低质量 episode 过滤和 embodiment metadata 都需要更系统的数据治理。
第三,async inference 提升吞吐但不是无代价。结果显示 Async 平均成功率低于 Sync,主要受 Sorting 下滑影响;因此它更像一个可调系统组件,而不是默认应该打开的模型改进。对真实部署而言,异步阈值 、near-duplicate 阈值 、网络延迟和 chunk aggregation 函数都可能影响安全性。
第四,论文主结果仍集中在桌面 manipulation 和 SO100 / SO101 低成本机械臂。SmolVLA 证明了小模型可以在这些任务上接近大 VLA,但还没有证明它能直接覆盖移动操作、双臂复杂装配、动态人机交互或高风险环境。它更适合作为“低成本 VLA baseline + LeRobot 工程栈”,而不是通用 embodied intelligence 的最终方案。
7. Takeaway (一句话总结)
SmolVLA 的价值在于把 VLA 从“大模型论文 demo”推进到可被社区机器人用户复现和微调的工程形态:用 SmolVLM-2 保留视觉语言先验,用 flow matching expert 输出连续 action chunks,用社区 LeRobot 数据预训练,用 async stack 改善真实控制延迟;它牺牲了一部分大模型容量,却换来了显著更低的训练/推理门槛,并在 LIBERO、Meta-World、SO100、SO101 上取得了足以作为强基线的结果。