HuggingFace分享视觉语言模型在嵌入式平台的完整部署方案,涵盖数据采集、模型微调和推理优化。
作者:Enzo Ruedas、Tess Boivin
大型语言模型(Large Language Models)的最新进展,推动了推理系统从纯文本走向多模态:首先是 Vision–Language Model(VLM)引入视觉感知能力,最近则进一步发展到能够生成机器人动作的 Vision–Language–Action(VLA)模型。然而,由于嵌入式机器人平台在算力、内存和功耗方面存在严格限制,同时还要满足实时控制要求,在这类平台上部署这些模型仍然极具挑战。
在同步控制流水线中,VLA 执行推理时,机械臂只能空闲等待指令,这会导致动作振荡和纠正延迟。为解决这一问题,可以通过异步推理将动作生成与执行解耦,从而实现平滑、连续的运动。不过,要让这种方式真正有效,端到端推理延迟必须短于动作执行时长。因此,这一时间约束也为模型吞吐量设定了上限。
将 VLA 模型部署到嵌入式平台,并不只是模型压缩问题,而是一项复杂的系统工程,需要进行架构拆分、延迟感知调度,以及与硬件特性相匹配的执行优化。只有解决这些挑战,才能将多模态基础模型的最新进展转化为实用、可部署的嵌入式机器人系统。
本指南总结了 NXP 的实战最佳实践,包括如何录制可靠的机器人数据集、微调 VLA 策略(ACT 和 SmolVLA),并重点介绍经过优化后 NXP i.MX 95 SoC 所能实现的实时性能。
高质量且一致的数据,胜过“数量更多但杂乱无章”的数据。本节将实践中积累的经验整理为具体的检查清单和规范。
在我们的案例中,我们为以下任务录制了一个数据集:“把茶包放进马克杯。”
固定摄像头:使用刚性支架,避免摄像头位姿漂移。如果在录制或评估过程中,一个或多个摄像头因为机器人振动,或操作员重置环境而发生偏移,模型准确率可能会显著下降。
控制光照:尽量在能够充分控制光照的环境中工作。使用固定光源,并远离光线会随时间变化的自然阳光。
保持强对比度:除非“白色物体置于白色背景”正是实际部署场景,否则应避免使用这种数据进行训练。尽可能增强机械臂、目标物体和环境之间的视觉对比度。
固定校准:务必备份机器人和遥操作设备的校准数据,避免代码崩溃后不得不重新录制之前的 episode。
不要作弊:不要使用模型在推理阶段无法获得的信息。录制数据时,操作员很容易下意识地直接观察现场环境,但这会引入数据集中并不存在的信息。收集数据时,必须严格限制为仅使用策略运行时能够获得的摄像头输入。
从仅有场景视角改为混合视角,可以提升整体准确率;但摄像头越多,对延迟的影响也越大。因此,必须在两者之间找到合适的平衡。在我们的案例中,3 个摄像头达到了理想的平衡:
我们强烈建议使用安装在夹爪上的摄像头。它能够提供近距离且与任务直接相关的视角,因此可以稳定提升精细操作任务的成功率。更重要的是,它也是最能帮助团队落实正确数据收集方式的摄像头:操作员可以完全依赖机器人的感知画面,而不必直接观察现场环境。
安装夹爪摄像头时,建议使用魔术贴或应力消除导线槽固定线缆,防止线缆遮挡视野,或在机械臂运动过程中脱落。
一些简单的硬件改进也很有效。例如,在夹爪上套一层热缩管,可以增大摩擦力、降低表面粗糙度、减少 episode 执行过程中的滑动,并提高任务成功率,减少那些“差一点就成功”的 episode,进而提升策略学习的稳定性。
录制数据集时,应注意以下几点:
改变 episode 的分布:将工作空间划分为多个起始位置簇,每个簇至少录制 10 个 episode。通过改变物体的位置和旋转角度增加数据多样性。例如,我们将机械臂可触达的工作空间划分为 11 个簇,每个簇的大小为 10 × 10 cm。
改变 episode 的分布:将工作空间划分为多个起始位置簇,每个簇至少录制 10 个 episode。通过改变物体的位置和旋转角度增加数据多样性。
例如,我们将机械臂可触达的工作空间划分为 11 个簇,每个簇的大小为 10 × 10 cm。
区分训练集和验证集:策略很容易在训练集上过拟合,因此必须确保验证集中的数据对模型完全不可见。例如,我们从训练集中移除了第 6 个簇。
区分训练集和验证集:策略很容易在训练集上过拟合,因此必须确保验证集中的数据对模型完全不可见。
例如,我们从训练集中移除了第 6 个簇。
尽可能录制更多种动作:小型 VLA 模型对未见过的动作泛化能力有限。因此,应录制能够覆盖更大自由度范围的 episode。例如,我们分别以水平和垂直姿态抓取茶包。
尽可能录制更多种动作:小型 VLA 模型对未见过的动作泛化能力有限。因此,应录制能够覆盖更大自由度范围的 episode。
例如,我们分别以水平和垂直姿态抓取茶包。
预判失败情况:策略有时无法一次触达目标物体,需要“返回并再次尝试”。我们发现,如果所有 episode 中约有 20% 是重新返回目标物体的场景,模型的整体成功率会得到提升。例如,我们的训练集中约有 20% 是恢复操作 episode。
预判失败情况:策略有时无法一次触达目标物体,需要“返回并再次尝试”。我们发现,如果所有 episode 中约有 20% 是重新返回目标物体的场景,模型的整体成功率会得到提升。
例如,我们的训练集中约有 20% 是恢复操作 episode。
这些做法与多篇 VLA 论文和社区指南中的最佳实践一致。下面是同一个簇内 3 种数据多样性的示例:
起始位置 1 和起始位置 2 对应同一个簇内的不同位置。相比之下,在恢复操作 episode 中,机器人并不是从“起始模式”开始,而是已经位于马克杯附近,因此应该直接从当前位置开始寻找并抓取茶包。
我们的实际配置如下:
任务:“抓起茶包并将其放进马克杯。”
数据集:120 个 episode:10 个簇 ×(10 个不同的茶包起始位置 + 2 个恢复操作 episode);3 个摄像头(640x480px,30fps):顶部、夹爪、左侧;移除第 6 个簇作为验证集。
120 个 episode:10 个簇 ×(10 个不同的茶包起始位置 + 2 个恢复操作 episode)
3 个摄像头(640x480px,30fps):顶部、夹爪、左侧
移除第 6 个簇作为验证集
训练:训练 200k steps 后,选择验证损失最低的模型 checkpoint。
对于 ACT(每个 chunk 包含 100 个动作),我们发现 100k~160k training steps 能够在训练集和验证集上实现准确率、泛化能力与动作平滑度之间的最佳平衡。对于 SMolVLA(每个 chunk 包含 50 个动作),这一平衡点要到更多 training steps 后才会出现。我们发现,即使模型已经开始出现过拟合,继续训练一小段时间,往往仍能提升整体准确率。
经验法则:应根据模型在训练集和验证集上的任务成功率来选择最终 checkpoint,而不是只看训练损失。
i.MX 95 SoC 集成了 6× Arm Cortex‑A55、一个 Cortex‑M7、一个 Cortex M33 MCU、Mali GPU、全新的 NXP ISP,以及 eIQ® Neutron NPU,面向高效、安全的边缘推理,并支持多摄像头和丰富的 I/O。[nxp.com]
我们没有将模型作为一张单体计算图运行,而是把 VLA 计算图拆分为多个逻辑阶段:encoder、decoder 和 action expert。这样,每个组件都可以独立优化、调度和部署。
在实际实现中,SmolVLA 被拆分为以下子模块:
Vision:处理 RGB 摄像头帧并生成视觉 embedding。
LLM backbone:根据视觉 embedding 和文本 embedding 生成 action token。
Action expert:应用 flow matching,对动作样本进行迭代去噪,并输出最终控制指令。
这种拆分方式支持针对每个模块分别优化。我们可以测量各模块量化后的影响,从而在延迟与准确率之间选择最佳平衡点。此外,将 action expert 与 VLM 隔离,也很适合让它以较低频率运行。
为了优化 i.MX 95 SoC 上的推理性能,我们在不同模块上探索了多种量化技术。结果发现,对 vision encoder 和 LLM prefill 进行量化,对准确率的影响有限;但对 action expert 中的去噪流程进行量化,会显著降低模型性能。这种现象符合预期,因为量化误差会在迭代去噪的各个步骤中不断累积。
因此,我们决定让这个模块保持较高精度,以维持稳定性;而对于其他模块,则根据具体层的情况,探索从 8-bit 混合精度到 4-bit 量化的多种配置。
此外,我们还对不同模块应用了内部优化。结果展示在下表中,并统一称为 optimized models。
在同步控制循环中,流水线的运行方式如下:
执行完整的模型推理
执行生成的动作
在步骤(2)期间,机器人处于空闲状态。如果推理延迟不可忽略,就会产生以下问题:
由于观测数据过时而出现振荡式纠正
有效控制频率降低
恢复能力较差
采用异步推理后,动作生成可以与动作执行并行:
机器人执行当前 action chunk
同时计算下一个 chunk
这样可以提高有效控制频率、减少观测数据过时的问题,并改善恢复能力。
在 i.MX 95 SoC 等嵌入式平台上,异步推理至关重要——但只有当推理延迟保持在动作时间窗口预算以内时,它才真正有效:inference time < execution time
任务:“抓起茶包并将其放进马克杯。”
测试集(20 个 episode):每个簇随机选择 2 个位置。
验证集(10 个 episode):第 6 个簇中的全部 10 个位置。
我们当前的直接目标是提升 SmolVLA(ONNX FP32)在该任务上的准确率。目前,我们已经建立了 baseline,并测得优化后的板端推理延迟为 6.15 s。
下一阶段将重点对 NPU 进行更深入的优化。与此同时,我们计划从单任务设置扩展到时间跨度更长、复杂度更高的场景。为此,我们将引入:
用于可扩展数据生成和 benchmark 的仿真环境
使用 Reinforcement Learning(RL)进一步优化策略
通过 Sim-to-Real transfer 缩小 domain gap,改善真实环境中的性能
我们的目标,是从一个经过验证的单一操作任务出发,逐步形成一套可复现的方法,用于在嵌入式机器人系统上部署 VLA 策略。
确认固定支架牢固可靠
确保摄像头对焦和照明效果良好
确保夹爪具备良好的抓取能力
保存校准文件的备份
每隔 20k steps 保存并评估 checkpoint
同时保存训练参数,以便需要时恢复训练
提前准备验证集,以及用于跟踪准确率和延迟的方法
在 i.MX 95 SoC 上部署
确认模型准确率达到预期
联系我们,对模型进行优化
ACT 文档和论文(核心思想、action chunking、少量演示数据下的成功表现)。[huggingface.co]、[arxiv.org]
SmolVLM/SmolVLA 系列及其代码仓库(紧凑型多模态与 VLA 设计)。[huggingface.co]、[github.com]、[smolvla.net]
Sherry Chen 在 HF Blog 上发表的 SO‑101 ACT 训练文章(实践经验、常见问题及修复方法)。[huggingface.co]
本文提及的模型 1
· 注册或登录后发表评论
本文提及的模型 1