RLinf 具身模型 SFT 训练机制完整分析报告

NERO 双臂06:《RLinf + DreamZero 5B 双 NERO 仿真训练【纯仿真|WAM Embodiment + Metadata + SFT + π0.5 Benchmark】》 这一卷我会严格围绕 纯仿真 DreamZero 5B 主线 展开:先固定 DreamZero/RLinf 环境与 5B released checkpoint,再完成 的 本体注册(Embodiment Registration)、三相机 元数据(Metadata)、16D State/14D Action 映射、SFT Smoke/正式训练、Checkpoint/Resume、独立仿真评测,最后用与第 5 卷完全相同的 Seed、Camera、Prompt、Action Contract 做 π0.5 阅读详情

详细分析RLinf框架中的具身模型的sft是如何训练的?训练数据是如何组织的?输入、label分别是什么?loss是什么?给出一个完整的分析报告

我会先把 RLinf 的官方论文、代码仓库和训练脚本对齐起来,重点追踪 SFT(Supervised Fine-Tuning,监督微调) 的数据流:数据格式 → tokenizer/processor → model input → label mask → loss 计算 → batch/并行训练。然后我会给你一份“从样本到梯度”的完整报告,尽量把具身模型部分讲到能直接对照代码。

目前已经确认:RLinf 现在把具身 SFT 单独做成了一条 examples/sft/train_vla_sft.py → SFTRunner → FSDPVlaSftWorker 的训练链路,而不是把它塞进 RL actor update 里;对 Evo-1,官方明确写的是 AdamW(AdamW Optimizer)+ cosine schedule(余弦学习率)+ flow-matching MSE(流匹配均方误差)。我接下来重点把 worker 里的 batch 字段和具体 loss 路径挖出来,因为这决定“input / label 到底是什么”。

关键点已经很清楚了:在 RLinf 里,“label”通常 不是 NLP SFT 那种单独的 labels=input_ids。对连续动作 VLA,离线示范中的 专家动作块(expert action chunk) 才是原始监督信号;以 π₀ / Evo-1 为例,模型在 forward 内部再采样噪声和时间,把专家动作转换成 流速度标签(flow-velocity target),最后做 MSE。Evo-1 代码甚至直接构造 target_velocity = actions_gt - noise,并用 action_mask 排除 padding 维度。

:::writing{variant=“document” id=“48271” title=“RLinf 具身模型 SFT 训练机制完整分析报告”}

RLinf 具身模型 SFT 训练机制完整分析报告

1. 结论先行

要理解 RLinf 中具身模型的 监督微调(Supervised Fine-Tuning, SFT) ,最关键的是不要套用纯语言模型 SFT 的思路。

在语言模型中,我们通常会把问题理解为:

  • input:prompt + response token;
  • label:response token;
  • loss:token-level Cross Entropy。

但在 RLinf 的具身 视觉-语言-动作模型(Vision-Language-Action Model, VLA) 中,尤其是 π₀、π₀.₅、Evo-1 这类连续动作生成模型,情况完全不同。

从最抽象的角度,一个 SFT 样本是:

(ot, lt, At∗)\left(o_t,\ l_t,\ A_t^{*}\right)(ot​, lt​, At∗​)

其中:

  • oto_tot​:机器人当前观测,包括图像、机器人状态等;
  • ltl_tlt​:自然语言任务指令;
  • At∗A_t^{*}At∗​:人类示范或专家策略产生的未来一段动作,即 专家动作块(Expert Action Chunk) 。

如果动作预测 horizon 为 HHH,那么:

At∗=[at∗,at+1∗,…,at+H−1∗]A_t^{*}=[a_t^{*},a_{t+1}^{*},\ldots,a_{t+H-1}^{*}]At∗​=[at∗​,at+1∗​,…,at+H−1∗​]

因此,从数据集语义上说:

RLinf 具身 SFT 的真正 label,本质上是专家动作,而不是语言 token。

但是对于 π₀、Evo-1 这样的 流匹配模型(Flow-Matching Model) ,训练时不会直接让网络输出 At∗A_t^{*}At∗​ 后和它做普通动作 MSE。专家动作首先和随机噪声组合成一个带噪动作状态,再把监督目标变换成某种 速度场(Velocity Field) 。

因此还必须区分两层“label”:

  1. 数据层 label :专家动作 At∗A_t^{*}At∗​;
  2. 优化层 target :由专家动作、噪声和时间变量构造出来的 flow velocity。

这是理解 RLinf VLA SFT 最重要的一点。

截至当前 RLinf 主分支,框架已经原生支持 Evo-1 的全参数 SFT,并提供 OpenPI / OpenPI_RLinf、DreamZero、LingBot-VLA 等具身 SFT 数据与模型路径;Evo-1 官方示例明确采用 SFT → GRPO 的训练流程。 turn577980view0


2. RLinf 中 SFT 的整体软件架构

RLinf 并没有在一个统一的 SFTLoss 里硬编码所有具身模型的 loss。

它的设计更接近:

训练入口
  ↓
SFTRunner
  ↓
FSDPVlaSftWorker
  ↓
模型专属 DataLoader
  ↓
batch
  ↓
model(
    forward_type=ForwardType.SFT,
    data=batch
)
  ↓
模型自己的 sft_forward()
  ↓
loss
  ↓
backward
  ↓
optimizer.step()

也就是说:

RLinf 统一的是 SFT 的训练控制流、分布式训练、梯度累积、checkpoint 等基础设施;真正的 input、label 如何解释,以及 loss 如何构造,是由具体 VLA 模型决定的。

当前标准入口 examples/sft/train_vla_sft.py 会创建训练集群和 FSDPVlaSftWorker,之后实例化 SFTRunner 并启动 worker。

SFTRunner 本身并不计算具身 SFT loss,而是反复调用 worker 的 run_training(),同时负责 global step、checkpoint、日志等控制逻辑。

在 FSDPVlaSftWorker 内部,核心接口可以高度概括成:

output = self.model(
    forward_type=ForwardType.SFT,
    data=batch,
)

if torch.is_tensor(output):
    loss = output
else:
    loss = output["loss"]

因此,真正决定 SFT 数学含义的是:

具体模型的 ForwardType.SFT
        ↓
具体模型的 sft_forward()

而不是 SFTRunner。 turn267306view3


3. 数据到底是怎样组织的?

3.1 原始数据不是普通的 input-label 文件

具身训练数据通常按照机器人 轨迹(Trajectory / Episode) 存储。

一条 episode 可以抽象为:

τ={ (It,st,l,at)}t=0T−1\tau=\{(I_t,s_t,l,a_t)\}_{t=0}^{T-1}τ={(It​,st​,l,at​)}t=0T−1​

其中:

  • ItI_tIt​:一个或多个相机图像;
  • sts_tst​:机器人本体状态;
  • lll:任务自然语言描述;
  • ata_tat​:专家在时刻 ttt 执行的真实动作。

例如 LIBERO 中 Evo-1 的观测由相机观测和机器人 state 构成,动作是连续 7-DoF,包括 6-DoF 末端执行器增量以及 gripper;同时每个 episode 有对应自然语言任务 prompt。


3.2 Dataset 会把 trajectory 切成训练 sample

训练时一般不会把整条 episode 一次送给模型,而是在某个时间点 ttt 采样:

xt=(It,st,l)x_t=(I_t,s_t,l)xt​=(It​,st​,l)

然后取后续 HHH 个专家动作:

At∗=[at∗,at+1∗,…,at+H−1∗]A_t^{*}=[a_t^{*},a_{t+1}^{*},\ldots,a_{t+H-1}^{*}]At∗​=[at∗​,at+1∗​,…,at+H−1∗​]

因此可以把一个 SFT 样本理解成:

{
    language_instruction,
    camera_observation,
    robot_state,
    expert_action_chunk
}

这就是具身 SFT 最基本的数据结构。

这里的 动作分块(Action Chunking) 非常重要:模型学的通常不是

ot→ato_t\rightarrow a_tot​→at​

而是:

ot,lt→[at,at+1,...,at+H−1]o_t,l_t\rightarrow[a_t,a_{t+1},...,a_{t+H-1}]ot​,lt​→[at​,at+1​,...,at+H−1​]

这样模型一次推理可以生成未来一段控制序列。


4. RLinf 中 input 和 label 应该怎样定义?

这里最好分成三层。

4.1 数据集层

从行为克隆的语义看:

Input

Xt={ It,st,lt}X_t=\{I_t,s_t,l_t\}Xt​={ It​,st​,lt​}

即:

  • 图像;
  • 本体状态;
  • 自然语言任务。

Label

Yt=At∗Y_t=A_t^{*}Yt​=At∗​

即专家动作块。

这与普通监督学习最接近。


4.2 DataLoader / forward 层

对于 flow matching 模型,batch 中通常还会把专家动作一起传入 forward()。

因此你在代码里可能看到:

model(
    images=images,
    states=states,
    prompts=prompts,
    actions_gt=actions_gt,
)

很容易产生一个疑问:

actions_gt 既然被传进 model,那么它是不是 input?

从 PyTorch 函数调用形式看,它确实是 forward 的参数。

但从机器学习语义看,它仍然属于监督信息,不是推理条件。

原因是训练过程中需要拿它生成带噪动作:

xt=f(A∗,ϵ,t)x_t=f(A^{*},\epsilon,t)xt​=f(A∗,ϵ,t)

而在真正机器人推理时根本没有 A∗A^{*}A∗,只会从随机噪声开始逐步生成动作。

所以应当区分:

  • 条件输入(Conditioning Input) :图像、语言、state;
  • 训练监督(Training Supervision) :expert actions;
  • 训练辅助随机变量(Training Auxiliary Variables) :noise、flow time;
  • 实际回归目标(Optimization Target) :velocity。

4.3 loss 层

这里的 label 已经不一定是 A∗A^{*}A∗ 本身。

对于 flow matching:

A∗→加入随机噪声→xtA^{*}\rightarrow\text{加入随机噪声}\rightarrow x_tA∗→加入随机噪声→xt​

同时构造:

A∗,ϵ→v∗A^{*},\epsilon\rightarrow v^{*}A∗,ϵ→v∗

模型预测:

vθ(xt,t∣I,s,l)v_\theta(x_t,t\mid I,s,l)vθ​(xt​,t∣I,s,l)

最后优化:

L=∥vθ−v∗∥2\mathcal L=\|v_\theta-v^{*}\|^2L=∥vθ​−v∗∥2

所以:

数据库里的 label 是 action,而送进 MSE 的 target 是 velocity。

下面用 RLinf 两个具体实现证明这一点。


5. Evo-1:RLinf 中最清楚的一套具身 SFT 实现

Evo-1 是目前非常适合拿来理解 RLinf SFT 的实例,因为它的数据、batch 和 loss 都在 RLinf 代码里暴露得非常直接。

Evo-1 本身约为 1B 参数,使用 InternVL3-1B 作为视觉语言 backbone,再连接基于 DiT 的 流匹配动作头(Flow-Matching Action Head) 。RLinf 已经提供 Evo-1 全参数 SFT 配置,并说明官方 recipe 使用 AdamW、带 warmup 的 cosine schedule 和 flow-matching MSE。


6. Evo-1 的训练数据组织

RLinf 的 Evo-1 SFT 数据读取不是简单指定一个 .json 文件。

data.train_data_paths 指向的是一个 Evo-1 dataset configuration YAML,然后由 Evo-1 自己的 LeRobot dataset 实现加载机器人数据。这个 YAML 可以定义多个 data group、最大 action/state 维度、最大相机 view 数等。 turn474000view5

其数据 pipeline 大致是:

LeRobot Dataset
      ↓
Evo-1 dataset config YAML
      ↓
LeRobotDataset
      ↓
DistributedSampler
      ↓
StatefulDataLoader
      ↓
evo1_sft_collate_fn
      ↓
training batch

RLinf 使用 DistributedSampler 支持多 GPU 数据切分,并用 StatefulDataLoader 支持恢复训练时的数据迭代位置。 turn474000view6


7. Evo-1 一个 batch 中究竟有什么?

evo1_sft_collate_fn 最终组织出的主要字段包括:

{
   
   
    "prompts": ...,
    "images": ..
NERO 双臂05:《RLinf + Isaac Lab + π0.5 双 NERO 仿真训练【纯仿真|SFT + PPO + Reward + Checkpoint + Evaluation】》 步骤属性:不需要操作的步骤(核心 Contract)。 阅读详情

相关推荐

NERO 单臂 π0.5 VLA / DreamZero WAM + Isaac Lab + RLinf + LeRobot v3:SFT、RL、Sim-to-Real 完整闭环实施方案

步骤属性:需要操作的步骤。ANDAND∥pcube−ptray∥20.03∥pcube​−ptray​∥2​0.03并满足 Cube 高度接近 tray。步骤属性:需要操作的步骤。delay;

u013250861的博客 138

2026 具身智能 VLA/WAM 全栈学习与训练路线:从动作建模、SFT、RL 到世界模型的 RTX PRO 6000 96GB 单卡实战指南

我会把这张表做成“”而不是只列论文名:先核对每个模型截至的公开代码、训练目标和数据接口,再单独给你一套。对于没有公开、只有推理代码或训练细节不完整的模型,我会明确标出来,避免把“论文里提到”误写成“可复现”。目前有一个重要更新:。截至今天 NVIDIA 官方开源主线已经是换成 Cosmos-Reason2-2B/Qwen3-VL 架构,动作端仍是连续路线,而且官方明确给出单卡微调时默认只训练,峰值显存约。所以你的 96GB 单卡对 GR00T SFT 非常宽裕。可以。下面我按,把它整理成一张真正面向“

u013250861的博客 428

RLinf:面向具身智能的生产级强化学习基础设施

强化学习(RL)作为智能体自主决策的核心范式,其落地瓶颈长期不在算法本身,而在工程基础设施——环境兼容性差、真机部署难、多模态协同弱、分布式训练不稳定。RLinf以‘Macro-to-Micro Flow Transformation’为设计内核,将仿真与真机、VLA大模型与底层控制、FSDP与Megatron后端统一抽象为可编排的数据流系统,显著降低具身智能从数字孪生到物理执行的迁移成本。它支持ManiSkill/IsaacLab等主流仿真器与Franka/ZED等真实硬件无缝对接,并原生集成World

weixin_30878501的博客 417

2026 具身智能 VLA/WAM 全栈学习与单卡训练路线:从 SFT、RL 到 World Model 的实战指南

我会把这张表做成“”而不是只列论文名:先核对每个模型截至的公开代码、训练目标和数据接口,再单独给你一套。对于没有公开 RL recipe、只有推理代码或训练细节不完整的模型,我会明确标出来,避免把“论文里提到”误写成“可复现”。。截至今天 NVIDIA 官方开源主线已经是。

u013250861的博客 351

测试s-or-weir

测试s-or-weir测试s-or-weir测试s-or-weir测试s-or-weir。

u013250861的博客 19

UPF2.1进阶指南:如何优雅地处理Hard Macro与Top-Level Port的电源意图

本文深入解析UPF2.1在复杂SoC设计中的高级电源意图建模,重点探讨Hard Macro与顶层端口的电源管理实战技巧。通过`power_model`和`set_port_attribute`的高级应用,解决第三方硬核IP电源建模不透明、顶层端口电源属性定义不当等工程难题,提供可靠的电源管理方案,确保芯片设计性能与功耗的精确控制。

weixin_30443747的博客 166

手把手式介绍 ADNI 影像数据下载

1.搜索 1.1登录 打开ADNI的官网:http://adni.loni.usc.edu/,进入下面的界面。 点击 DATA&SMPLES 下的 ACCESS DATA AND SAMPLES,如下图。 页面跳转以后点击中间的“LOGIN”,这时会跳出一个新的界面,然后在右上角输入自己的帐号、密码即可。如果没有权限可以跳转到第2部分看看如何申请权限。 登录以后选择DOWNLOAD下的 Image Collections就是搜索下载影像数据,其他还有一些学习测试数据和遗传数据。 1.2 sea

永远想不起来更新的博客 1万+

FileZilla Server 1.2.0 TLS证书过期问题

FileZilla Server TLS证书过期后重新生成

Wigle的备忘录 7512

SystemVerilog学习总结

因为选择的offer是IC验证,以前学的是设计,所以只能再学systemverilog(SV)和UVM了。在学习SV和UVM之前,我认为需要学习以下几个部分:数字电路、c++和verilog。因为IC验证确实有不少别的专业之前没学过数字电路和Verilog,所以还是最好先学习一下。 知识点的总结主要是通过systemverilog验证-测试平台编写指南这本书进行的,所以请看书。通过对这本书的目录进行重点的划分,然后再进行相关知识点的总结。最后,给出自己收集的别的博主IC EDA环境的虚拟机,以及使用虚拟机需

博主毕竟还是人,肯定会有错误,各位看的时候发现错误提出来就好 1万+

SRRC型号核准的模块豁免规则解析——如何利用完整型模块简化设备认证流程

本文详细解析了SRRC型号核准中模块豁免规则的应用,重点介绍了完整型模块的技术定义、豁免条件及实际应用场景。通过合理利用完整型模块,企业可显著简化设备认证流程,缩短上市周期并降低成本。文章还提供了模块选型指南和常见问题解决方案,帮助工程师高效应对SRRC认证挑战。

weixin_29306011的博客 917

Nginx&&Keepalived(一)Keepalived介绍

一、背景: 案例1:如现有服务my-service-demo,希望实现高可用和负载均衡: 首先,my-service-demo服务部署在两台机器上,通过nginx去代理这两个节点,负载均衡就实现了。如果只有一个nginx,这台nginx机器一旦宕机,访问nginx会报错。这时候在另外一台机器nginx2上也安装nginx,并配置同样的代理,可以解决上述问题,但是暴露给用户的只有一个域名(或ip),不可能给用户提供两个域名,域名1(nginx机器1)访问不了了再让用户访问域名2(nginx机器2),这

w_t_y_y的博客 2875

pandas教程:2012 Federal Election Commission Database 2012联邦选举委员会数据库

里面包含了支持者的名字,职业和雇主,地址,赞助金额。我们可以已经能想到如何切割、整理数据,来提取赞助者的统计数据,或提取宣传活动的模式,这里我们展示一些不同的分析方法。可以看到有些职业是同一种工作类型,指代的是同一个东西。这两个连续操作是分别独立执行的,一个结束后,另一个才开始。上,这里我是把数据集压缩成了ZIP格式,解压后能正常导入)。我觉得也有必要好好了解一下,这个网站做了很好的讲解,),所以我们最好添加这样的信息。这样的情况,即把两个索引操作连在一起。,发现映射关系被正常执行了,所以这里的。

Cachel Wood的博客 344

CAPL如何设置或修改CANoe TCP/IP协议栈的底层配置

MSS = MTU - tcpHeader - ipHeader,也就是MTU = MSS(1360) + tcpHeader(20) + ipHeader(20) = 1400,说明CAPL是可以动态设置网络底层配置参数的!然后在CAPL中设置此网卡MTU值为1400,然后创建UDP套接字,一次性发送2000个字节,在Trace窗口看看首帧报文二层Data的长度。所以我们还不能用UDP协议来验,应该用TCP协议来验,也就是在TCP三次握手时通过Tester的MSS值推导出自己的MTU值。

jasonj333 987

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: π0.5 总体训练配方:预训练【所有任务都转化成离散 token,执行 text、object location 和 FAST action token 的下一Token预测】
下一篇: Sparsh:用于基于视觉的触觉感知的自监督触觉表征【传感器:带标记点的 GelSight 2017、无标记点的 DIGIT】
u013250861
博客等级 码龄13年 1万+粉丝 5750原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值