一句话定位
SmolVLA 是 Hugging Face / LeRobot 团队做的一个只有 450M 参数(其中动作专家约 100M)的开源 VLA:预训练数据完全来自 HF Hub 上 481 个社区众包数据集(22.9K episodes、10.6M frames,比同类工作少一个数量级),骨干用小型 VLM SmolVLM2 并砍掉一半 LLM 层、视觉 token 压到每帧 64 个,配合交替的 cross/self-attention 动作专家和一套解耦”感知预测”与”动作执行”的异步推理栈,使其单卡可训、CPU 可推,在 LIBERO/Meta-World 仿真与 SO100/SO101 真机任务上追平甚至超过参数量大 10 倍的 pi0。
背景与定位
范式:这是”小 VLM 骨干 + 社区众包数据 + 系统工程优化”路线,与”大 VLM 骨干 + 大规模私有/学术机器人数据”的主流 VLA 路线(pi0 用 3.3B 模型 + 约 1 万小时私有跨具身数据;openvla 用 7B 模型 + open-x-embodiment)形成对照。论文明确指出机器人数据没有”互联网规模”这种资源,现有 VLA 依赖的学术/工业数据集掩盖了社区众包数据(来自 SO-100 这类平价机械臂爱好者拍摄的数据)日益增长的可得性——这类数据具身多样、任务多样,但也天然噪声大、标注乱。
方法谱系上,SmolVLA 与 [tinyvla]目标相似但路线不同:SmolVLA 用一个预训练过的小型 VLM(SmolVLM2)做初始化再接社区数据预训练,而非从零训练;与 pi0(PaliGemma 骨干 + flow matching 动作专家)、dexvla(Qwen2-VL 骨干 + 1B 扩散专家)相比,SmolVLA 反其道而行——VLM 骨干和动作专家都做小,靠架构上的”层跳过 + 视觉 token 削减 + 交替注意力”来换效率,而不是靠加大参数量换性能。异步推理栈这一贡献后来被 HF 团队单独写了一篇后续博客(“Asynchronous Robot Inference”,2025-07-09)专门展开,本页仅覆盖 SmolVLA 论文本身披露的异步推理设计与实验(见下”Infra”与”评测”两节),未深挖该后续博客的额外内容。
模型架构
整体结构:预训练 VLM(感知)+ 独立 flow-matching 动作专家(决策),二者靠拼接后经过 VLM 若干层解码器处理特征、再通过投影层对齐维度来交互,属于 late-fusion VLA 常规做法,但每一处组件都刻意做小。
- VLM 骨干:SmolVLM2(HF 自家小型多模态模型,SigLIP 视觉编码器 + SmolLM2 语言解码器,针对多图/视频输入优化)。VLM 处理多路 RGB 图像序列、语言指令、以及本体感知状态(通过一个线性层投影为单个 token 后接入)。VLM 输出的中间层特征直接送入动作专家。
- 视觉 token 削减:SmolVLM2 原生用图像分块(tiling)技术处理高分辨率图,但 SmolVLA 推理时只用全局图、不做分块,再配合 PixelShuffle 操作,把每帧视觉 token 压到 64 个(512×512 图像本应产生 1024 个 token)。
- 层跳过加速:不用 VLM 最后一层特征,而是让动作专家只能看到到第 N 层为止的特征;论文将 N 设为总层数 L 的一半(N=L/2),据此把 LLM 与动作专家的计算量都砍半。实现细节一节单独指出主模型”只用 LLM 的前 16 层”——结合 N=L/2 可反推该 LLM 总层数为 32(论文未直接写出 32 这个数字,是由两处表述联立得到)。
- 动作专家(ACTION 头)= flow-matching Transformer,连续动作(非离散 token):基于 Transformer 架构,训练目标为流匹配损失 L^τ(θ)=E‖v_θ(A_t^τ,o_t)−u(A_t^τ|A_t)‖²,其中 A_t^τ=τA_t+(1−τ)ε、ε~N(0,I)、u(A_t^τ|A_t)=ε−A_t,与 pi0 一致 τ 从 Beta 分布采样(论文未给出具体 α/β 参数值)。为进一步压缩推理成本,动作专家隐藏维度取 VLM 隐藏维度 d 的 0.75 倍。
- 交替 cross/self-attention(与 pi0 全 self-attention、GR00T 类工作全 cross-attention 都不同):动作专家内每个 block 要么是 CA(action token 交叉注意 VLM 的 key/value)要么是 SA(action token 相互注意,加因果掩码,只能看过去、不能看未来 token)。消融显示 CA+SA 交替(85.5% 平均成功率)显著优于单纯 CA(79.0%)或单纯 SA(74.5%),因果掩码(74.5%)也显著优于双向掩码(67.5%)。
- 主模型配置:总参数 450M,其中动作专家约 100M;动作块大小 n=50;推理时流匹配固定 10 步去噪。论文同时报告了 0.24B(更小的 VLM 变体)与 2.25B(更大变体)两个尺寸做对比,主推的是 0.45B 版本(即公开权重
lerobot/smolvla_base)。 - 训练时只训练动作专家,VLM 全程冻结。
数据
- 社区预训练数据集:从 HF Hub 上按具身类型、episode 数量、整体质量、帧覆盖度筛选出 481 个社区数据集,合计 22.9K episodes、10.6M frames(论文 Table 1),比业界同类预训练规模小至少一个数量级(如 OpenVLA 用约 100 万条轨迹)。HF 博客给出的口径略有出入(487 个数据集、约 1000 万帧、统一 30 FPS、聚焦 SO100 机械臂),两处数字都未完全对齐,本页如实并列标注。
- 任务标注清洗:社区数据集标注噪声大(含糊占位符如 “task desc”、过于笼统的 “Hold”/“Up”、甚至完全无标注),用现成 VLM Qwen2.5-VL-3B-Instruct 对每个数据集采样代表性帧 + 原始标注,提示词生成”以动作动词开头、不超过 30 字符”的简洁任务描述(具体 prompt 见论文附录 A.1,与 HF 博客一致)。
- 相机视角标准化:社区数据集相机命名混乱(如
images.laptop可能是顶视/侧视/腕部视角中的任意一种),人工把每路相机映射为标准视角类型(优先顶视、腕部、侧视),重命名为OBS_IMAGE_1/OBS_IMAGE_2/OBS_IMAGE_3,多余视角在训练时丢弃。 - 仿真评测数据:LIBERO 用 physical-intelligence/libero 数据集,1,693 episodes,覆盖全部 40 个任务(Spatial/Object/Goal/Long 各 10 个);Meta-World 用 lerobot/metaworld_mt50,2,500 episodes(50 任务 × 50 demo)。
- 真机评测数据(SO100/SO101 平价机械臂,均已开源到 HF):Pick-Place(
lerobot/svla_so100_pickplace)、Stacking(svla_so100_stacking)、Sorting(svla_so100_sorting)三个 SO100 数据集 + Pick-Place-Lego(svla_so101_pickplace)一个 SO101 数据集,每个任务 5 种起始位置 × 10 条轨迹 = 50 条演示。关键限制:SmolVLA 预训练数据全部来自 SO100 具身,SO101 数据集完全未出现在预训练中,用于测试跨具身泛化。 - 无仿真到真实(sim-to-real)迁移,无数据增强说明;全部真机数据来自遥操作采集,社区自发上传。
训练方法
- 预训练:200,000 步,全局 batch size 256,覆盖全部社区数据集;100 步 warmup 后余弦学习率调度,峰值 1e-4 衰减到最小 2.5e-6;AdamW(β1=0.9, β2=0.95);图像统一 resize 到 512×512(与 VLM 输入尺寸对齐);只训练动作专家,VLM 冻结。
- 仿真任务微调:100,000 步,batch size 64。真实世界任务微调:200,000 步(论文未单独给出真机微调的 batch size 数字)。作者补充说明:实践中模型远不需要训这么多步也能达到接近的效果。
- 训练目标:flow matching(见”模型架构”节公式),消融(Table 10)显示 flow matching(LIBERO 均分 80.25)显著优于直接回归 L1 损失(75.25),与 pi0 的选择一致。
- 状态输入位置消融(Table 11):把本体状态作为 VLM 前缀(prefix)输入,比作为动作专家后缀(suffix)输入效果好(CA 下 80.3 vs 73.3;SA 下差异更大)。
- 动作块大小与执行步数消融:块大小 n 在 10~50 之间效果最好(n=10 时 84.0,n=50 时 80.3,n=1 骤降到 50.0,n=100 降到 74.5);执行动作步数越少、越频繁重新观测,效果越好(每 1 步或每 10 步更新观测明显优于每 30/50 步更新一次)。
Infra(训练 / 推理工程)
- 训练硬件:预训练用 4 张 GPU(型号未披露)以撑住较大的 batch size;论文强调因模型体量小,单张 GPU 也能训练。
- 训练总成本:整个项目约消耗 30,000 GPU-hours(未拆分预训练/微调/消融各占多少)。
- 训练优化:bfloat16 精度 +
torch.compile()JIT 编译;为兼容编译优化,固定序列长度与 batch size,丢弃不满一个完整 batch 的多余帧;多卡/多机训练用 Hugging Faceaccelerate库做混合精度调度。 - 算力来源:法国 IDRIS(GENCI 分配号 2025-[A0181016235])与 PostGenAI@Paris 集群(ANR-23-IACL-0007,FRANCE 2030 计划)。
- 推理:
- 相比 pi0,SmolVLA 训练快约 40%、显存占用少 6 倍(论文正文原话,未给绝对显存数字)。
- 真机环境帧率 30 FPS,控制周期 Δt=33ms。
- 真机评测用同步推理(整块动作执行完才处理下一次观测);仿真评测则每执行一步就重新采样观测、预测下一动作。
- 异步推理:RobotClient 消费动作队列到剩余比例低于阈值 g(实验中 g≈0.7,即队列消耗掉约 30% 时触发)才向 PolicyServer(可远程、可带 GPU)发送新观测请求新动作块,新旧队列在重叠时间步上做聚合融合;同时用关节空间相似度过滤近重复观测,避免冗余请求。异步推理下,Pick-Place 任务平均完成时间从同步的 13.75s 降到 9.70s(约快 30%),固定时间窗口内完成的取放次数从 9 次提升到 19 次(约 2 倍)。
评测 benchmark
LIBERO(仿真,40 任务,10 trials/任务,平均成功率 %,论文 Table 2):
| 策略 | 参数量 | VLA 预训练 | Spatial | Object | Goal | Long | 平均 |
|---|---|---|---|---|---|---|---|
| Diffusion Policy | — | No | 78.3 | 92.5 | 68.3 | 50.5 | 72.4 |
| octo | 0.09B | Yes | 78.9 | 85.7 | 84.6 | 51.1 | 75.1 |
| openvla | 7B | Yes | 84.7 | 88.4 | 79.2 | 53.7 | 76.5 |
| π0(PaliGemma-3B 初始化) | 3B | No | 87 | 63 | 89 | 48 | 71.8 |
| pi0 | 3.3B | Yes | 90 | 86 | 95 | 73 | 86.0 |
| SmolVLA | 0.24B | No | 87 | 93 | 88 | 63 | 82.75 |
| SmolVLA(主模型) | 0.45B | No | 90 | 96 | 92 | 71 | 87.3 |
| SmolVLA | 2.25B | No | 93 | 94 | 91 | 77 | 88.75 |
SmolVLA(0.45B)不做机器人预训练即超过做过 OXE 预训练的 OpenVLA(7B)、Octo(0.09B)与”仅 VLM 初始化”的 π0(3B),与”做过机器人预训练”的完整 π0(3.3B)基本持平(87.3 vs 86.0)。
Meta-World(仿真,50 任务/4 难度,论文 Table 2):
| 策略 | Easy | Medium | Hard | Very Hard | 平均 |
|---|---|---|---|---|---|
| Diffusion Policy | 23.1 | 10.7 | 1.9 | 6.1 | 10.5 |
| TinyVLA | 77.6 | 21.5 | 11.4 | 15.8 | 31.6 |
| π0(3.5B-PaliGemma,No VLA pt) | 80.4 | 40.9 | 36.7 | 44.0 | 50.5 |
| π0(3.5B,VLA pt=Yes) | 71.8 | 48.2 | 41.7 | 30.0 | 47.9 |
| SmolVLA(0.45B) | 82.5 | 41.8 | 45.0 | 60.0 | 57.3 |
| SmolVLA(2.25B) | 87.14 | 51.82 | 70 | 64 | 68.24 |
真机 SO100(3 任务,多任务训练,论文 Table 3,成功率 %,细粒度打分):
| 策略 | Pick-Place | Stacking | Sorting | 平均 |
|---|---|---|---|---|
| ACT(单任务训练) | 70 | 50 | 25 | 48.3 |
| π0(3.5B,多任务) | 100 | 40 | 45 | 61.7 |
| SmolVLA(0.45B,多任务) | 75 | 90 | 70 | 78.3 |
真机 SO101 Pick-Place-Lego(单任务训练,论文 Table 4):SmolVLA(0.45B)域内 90% / OOD 50%,对比 ACT 域内 70% / OOD 40%——注意 SmolVLA 预训练数据完全不含 SO101,该结果是跨具身泛化。
预训练与多任务学习的贡献(论文 Table 5,SO100):单任务不预训练 40.0% → 多任务不预训练 51.7% → 多任务 + 社区数据预训练 78.3%(社区预训练带来 +26.6 个百分点绝对提升)。
其余消融(均在 LIBERO,不做机器人预训练,VLM 冻结,只从零训练动作专家):
- 层跳过 N(Table 8):N=8→75.0,N=16→78.5,N=24→79.5,N=32(全部层)→80.3,隔层跳(Skip%2)→75.5,换用更小的 256M VLM→75.8。注意:论文正文选择 N=16(半层)是效率与性能的折中,但该消融表里 N=32(即不跳层)分数其实更高(80.3 > 78.5)——本页如实标注这一”最终选择非表内最优分”的情况,未替作者取舍。
- 动作专家容量(Table 9):×1.00 d→82.3,×0.75 d(默认选择)→77.5,×0.50 d→80.3,×0.25 d→73.8。同样注意:默认选用的 0.75×d 在该表里也不是最高分(0.50×d 的 80.3 更高),这一点在 HF 博客评论区也被读者(Mzou000)公开提问过,论文正文未给出明确的额外理由(如稳定性/显存)来解释为何仍选 0.75×d。
- 训练目标(Table 10):flow matching 80.25 vs 回归 L1 75.25。
- 状态输入位置(Table 11):Prefix+CA 80.3 / Suffix+CA 73.3 / Prefix+SA 53.3 / Suffix+SA 74.8。
- 动作块大小(Table 12):n=1→50.0,n=10→84.0,n=30→78.5,n=50→80.3,n=100→74.5。
- 观测更新频率(Table 13):每 1 步更新→80.3,每 10 步→82.8,每 30 步→70.8,每 50 步→51.8。
- 异步 vs 同步推理成功率(Fig 5a,3 个真机任务平均):同步 78.3% vs 异步 73.3%——论文称二者”success rate 相当”,但表中异步平均分实际略低于同步,速度优势(见 Infra 节)是异步的核心卖点而非成功率提升。
创新点与影响
- 证明了 VLA 不必依赖学术/工业大规模私有数据集:仅用 HF Hub 上 481 个社区众包数据集(不到 3 万条 episode,比 OpenVLA 少一个数量级)预训练的 450M 小模型,即可追平甚至超过参数量大 7~10 倍的 pi0、openvla。
- 架构上把”层跳过 + 视觉 token 削减到 64/帧 + 交替 CA/SA 动作专家”三项优化组合到一起,让训练可在单卡完成、推理可在消费级 GPU 甚至 CPU/MacBook 上运行。
- 提出的异步推理栈(解耦动作执行与动作预测,PolicyServer/RobotClient 分离,支持远程 GPU 推理)是模型无关的通用设计,可用于任何输出动作块的策略,不只是 SmolVLA 本身——是本文除模型本身外另一个独立贡献,后续在 HF 团队 2025-07-09 的后续博客中被单独展开(该博客未在本页深挖)。
- 作者自陈局限(论文 Section 5.1):(1)预训练数据仅来自单一具身(SO100),跨具身泛化能力有限;(2)数据规模(约 2.3 万条轨迹)远小于 OpenVLA 等(约 100 万条),扩大数据规模有望进一步提升性能;(3)模型体量刻意压到 0.5B 以下,如何在不牺牲速度/可及性的前提下进一步扩容是未来方向;(4)VLM 骨干(SmolVLM2)主要在文档阅读/OCR 类任务上预训练,是否是机器人任务的最优选择尚不清楚;(5)尚未做机器人数据与更广泛多模态数据的联合训练;(6)在长时程任务上表现有限,未来可探索层级策略/多级规划;(7)当前仅用模仿学习,尚未探索强化学习。
原始链接
- arXiv: https://arxiv.org/abs/2506.01844
- PDF: https://arxiv.org/pdf/2506.01844
- 官方博客: https://huggingface.co/blog/smolvla
- GitHub(LeRobot 仓库,SmolVLA 策略实现于
src/lerobot/policies/smolvla/): https://github.com/huggingface/lerobot - HF 基座权重(450M): https://huggingface.co/lerobot/smolvla_base
- 相关: pi0、openvla、tinyvla、dexvla、octo
一手源存档(sources/)
- smolvla—blog — 官方博客全文快照(方法图解 + 社区数据集细节 + 结果小结),https://huggingface.co/blog/smolvla
- smolvla—hf-card — HF 基座模型卡(安装/推理/训练命令),https://huggingface.co/lerobot/smolvla_base
- smolvla—github-readme — LeRobot 仓库内 SmolVLA 专属文档(论文链接 + 引用信息),https://github.com/huggingface/lerobot/blob/main/docs/source/policy_smolvla_README.md
- arXiv 全文 PDF(2506.01844,arXiv 原文 PDF,不入 git):https://arxiv.org/pdf/2506.01844