
第二章 RLinf + OpenVLA-OFT 中 OPD 的完整源码机制:Action Token、Teacher Rescoring 与三个 LogProb1. RLinf 当前 OPD Recipe 的基本结构1.1 官方示例RLinf 当前 OPD 文档提供的是:Environment:LIBERO-Spatial;Student:OpenVLA-OFT;Teacher:OpenVLA-OFT;Hardware:1 node × 8 GPUs;Algorithm:OPD。最核心的一句话是:Student 是唯一与环境交互的策略;Teacher 不在 rollout 时生成动作,而是在 rollout 之后,对 Student 已保存的forward_inputs.action_tokens计算 dense token-level log probability。这一点必须牢牢记住。很多后面的源码问题,都可以从这句话推出来。2. 原论文 OPD 与 RLinf Recipe 不能完全混为一谈VLA-OPD 原论文实验 Teacher 是 SimpleVLA-RL 等 expert policy,Student 使用 OpenVLA-OFT initialization;论文 LIBERO 主实验使用 batch size 64、group size 8。RLinf 当前示例则使用:Student checkpoint:RLinf/RLinf-OpenVLAOFT-LIBERO-130-Base-LoraTeacher checkpoint:RLinf/RLinf-OpenVLAOFT-LIBERO-130并要求二者使用同一个:libero_130_no_noops_trajall作为unnorm_key。所以应该区分:原论文:证明算法思想。RLinf:提供一套具体工程实现。3. OpenVLA-OFT 的 Action 到底是不是离散 Token3.1 不能简单说“OpenVLA-OFT 就是离散动作模型”OpenVLA-OFT 原论文实际上强调 continuous action representation、parallel decoding 和 L1 regression。citeturn975741academia80所以不能泛化成:所有 OpenVLA-OFT 都只使用离散 action token。3.2 但 RLinf 当前 OPD 路径确实使用 Action Token Probability在 RLinf 当前 OPD/RL interface 中,OpenVLA-OFT 会输出:Z∈RB×Naction×VZ\in\mathbb R^{B\times N_{action}\times V}Z∈RB×Naction×V其中:BBB:batch size;NactionN_{action}Naction:action token positions;VVV:vocabulary size。然后对每个 action position 进行 categorical sampling。源码直接使用:torch.multinomial。turn110452view3所以:RLinf当前OPD概率空间中的Action是离散Token\boxed{\text{RLinf 当前 OPD 概率空间中的 Action 是离散 Token}}RLinf当前OPD概率空间中的Action是离散Token4. 为什么环境最终执行的却还是连续动作Action Token 只是概率建模表示。例如 Student 采到:yj=31980y_j=31980yj=31980这个数字不是机械臂真实控制值。源码随后把 token 映射到 action bin,再映射到 normalized continuous value,最后根据 dataset statistics 反归一化。可以理解为:阶段 2:Token 到连续动作阶段 1:离散动作采样阶段 0:模型输出数据模块:Action-Slot LogitsShape: [B, N_action, V]随机模块:Categorical Action Sampling数据模块:Action Token IDsShape: [B, N_action]操作模块:Token-to-Bin Mapping数据模块:Discretized Action Bin操作模块:Bin-Center Lookup数据模块:Normalized Continuous Action