RTC(Real-Time Chunking)#

RTC(Real-Time Chunking)通过在去噪过程中引入已知动作前缀,减少相邻 action chunk 之间的不一致,在异步执行场景下提升轨迹连续性。

Training-time RTC#

方法#

Training-time RTC 在训练和推理阶段采用一致的前缀条件机制:

  • 训练阶段:在已知前缀约束下学习未来动作预测。

  • 推理阶段:通过前缀锁定保持跨 chunk 的连续性。

本文中,Training-time RTC 指”训练阶段引入前缀条件 + 推理阶段采用 prefix 模式”的完整方案。

配置#

训练侧配置#

rtc_training_config 的放置位置取决于模型架构:

GR00T (FlowMatchingHead) — 在 model.vla_head 下添加:

model = dict(
    vla_head=dict(
        rtc_training_config=dict(
            enabled=True,
            max_delay=7,
            distribution='exponential',  # 'exponential'(推荐)或 'uniform'
        )))

PI0 (PI0FlowMatching) — 直接在 model 下添加:

model = dict(
    type='PI0FlowMatching',
    rtc_training_config=dict(
        enabled=True,
        max_delay=7,
        distribution='exponential',  # 'exponential'(推荐)或 'uniform'
    ))

注意:PI0.5(PI05FlowMatching)不支持 Training-time RTC。

工作机制:对每个 batch 元素随机采样延迟 d [0, max_delay);将前 d 个动作步设为 clean time(无噪声已知状态),并在 loss 计算中屏蔽这些位置。

推理侧配置#

rtc_config 中使用 prefix 模式,并保持 async_execution=True

inference = dict(
    type='AlohaRTCInferenceRunner',
    async_execution=True,
    execute_horizon=10,
    rtc_config=dict(
        enabled=True,
        method='prefix',
        prefix_len=5,
    ))

完整示例#

以下示例以 GR00T 在 ALOHA 上部署为例。

_base_ = './gr00t/gr00t_eagle_3b_aloha_full_finetune.py'

# 训练:启用 RTC 前缀条件
model = dict(
    vla_head=dict(
        rtc_training_config=dict(
            enabled=True,
            max_delay=7,
            distribution='exponential',
        )))

# 可选:基于预训练 checkpoint 继续微调
runner = dict(max_epochs=1)

# 推理:使用 prefix 模式,并开启 async_execution
inference = dict(
    type='AlohaRTCInferenceRunner',
    async_execution=True,
    execute_horizon=10,
    rtc_config=dict(
        enabled=True,
        method='prefix',
        prefix_len=5,
    ))

Test-time RTC#

方法#

Test-time RTC 是仅在推理阶段生效的 guidance 方案:

  • 训练阶段保持不变。

  • 推理阶段通过 guidance 引导去噪轨迹,使其更符合已知前缀。

  • 适用场景:训练时未引入 RTC 前缀条件。

本文中,Test-time RTC 指”仅推理阶段使用 guidance”的方案。

配置#

rtc_config 中设置 guidance 模式(并保持 async_execution=True):

inference = dict(
    type='AlohaRTCInferenceRunner',
    async_execution=True,
    execute_horizon=10,
    rtc_config=dict(
        enabled=True,
        method='guidance',
        prefix_len=5,
        decay_end=10,
        schedule='exp',
        max_guidance_weight=5.0,
        use_vjp=False,
    ))

与 Training-time RTC 的区别#

  • Training-time RTC:会修改训练方式,推理时使用 method='prefix'

  • Test-time RTC:不修改训练方式,推理时使用 method='guidance'

  • 在一次推理中,prefixguidance 通常作为互斥选项使用。

测试#

仓库提供 scripts/test_rtc.py 用于 RTC 推理行为测试与可视化。该脚本会:

  • 从 config + checkpoint 加载模型;

  • 从训练数据中取一个 batch;

  • 使用 GT 动作序列模拟 prev_actions(即本测试中的前缀来源);

  • 运行选定的 RTC 模式(可通过 --modes 配置);

  • 输出各维度去噪过程图和模式对比图。

可用模式:no_rtcprefixguidanceguidance_vjp。默认运行全部模式。

使用 GT 作为前缀来源,是为了在前缀可控的条件下,更清晰地比较不同 RTC 方法的行为差异。

示例命令:

# GR00T / PI0 — 运行全部模式(默认)
python scripts/test_rtc.py \
    --config configs/gr00t/gr00t_eagle_3b_aloha_full_finetune.py \
    --checkpoint /path/to/checkpoint.pt \
    --prefix_len 5 \
    --output_dir work_dirs/rtc_test

# PI0.5 — 跳过 prefix 模式(不支持)
python scripts/test_rtc.py \
    --config configs/pi05/pi05_paligemma_aloha_full_finetune.py \
    --checkpoint /path/to/checkpoint.pt \
    --prefix_len 5 \
    --modes no_rtc guidance guidance_vjp

测试可视化#

下图为使用内部模型与数据运行测试脚本得到的示例结果。

RTC 对比结果(prefix_len=5)

该图对比了 no RTCprefixguidanceguidance+vjp 四种轨迹。 阴影区域表示 RTC 推理中使用的已知前缀区间。

定性解读:

  • 在这张图中,GT 同时作为参考轨迹与 RTC 的模拟前缀来源。

  • no RTC 曲线可视为无约束基线。

  • prefix 模式(Training-time RTC 路径)在前缀窗口之后通常会与 no RTC 呈现不同的轨迹走向,体现更强的前缀条件延续。

  • guidance 模式(Test-time RTC 路径,含 guidanceguidance+vjp)在后段通常更接近 no RTC 基线,但会在前缀到生成段的过渡处提供更平滑的衔接。

该图可用于定性观察 Training-time RTC 与 Test-time RTC 在前缀窗口之后的轨迹演化差异。

支持模型#

模型

Training-time RTC

Test-time RTC

FlowMatchingHead (GR00T)

PI0FlowMatching (PI0)

PI05FlowMatching (PI0.5)

注意:PI0.5 不支持 Training-time RTC——其架构无法在不修改模型的情况下注入 per-position 时间步。