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'。在一次推理中,
prefix与guidance通常作为互斥选项使用。
测试#
仓库提供 scripts/test_rtc.py 用于 RTC 推理行为测试与可视化。该脚本会:
从 config + checkpoint 加载模型;
从训练数据中取一个 batch;
使用 GT 动作序列模拟
prev_actions(即本测试中的前缀来源);运行选定的 RTC 模式(可通过
--modes配置);输出各维度去噪过程图和模式对比图。
可用模式:no_rtc、prefix、guidance、guidance_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
测试可视化#
下图为使用内部模型与数据运行测试脚本得到的示例结果。
该图对比了 no RTC、prefix、guidance、guidance+vjp 四种轨迹。
阴影区域表示 RTC 推理中使用的已知前缀区间。
定性解读:
在这张图中,GT 同时作为参考轨迹与 RTC 的模拟前缀来源。
no RTC曲线可视为无约束基线。prefix模式(Training-time RTC 路径)在前缀窗口之后通常会与no RTC呈现不同的轨迹走向,体现更强的前缀条件延续。guidance模式(Test-time RTC 路径,含guidance与guidance+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 时间步。