Parent: #1259
Depends on: #1261(已合并)
启动条件(#1259 Wave 2 R2):#1261 合并后 mba_reset_obs_build_ms 仍是 reset 路径最大剩余热点 —— 同机 baseline(sac/g1_motion_tracking,8192 envs):MuJoCo 5.67 ms(占 reset total 36%)、Motrix 21.54 ms(58%)。
一句话问题
MBA partial reset 只重置约 251/8192 个 env,但 reset 路径上 ObservationManager 的 compute→noise→clip→scale→NaN→delay/history→concat 管线全程全 batch 计算,env 再切出 reset 行,其余行的计算结果被直接丢弃。相位 profile(8192 envs,MuJoCo)显示管线相位约占 obs build 的 80%,term func 内部的全量 getter 属于 U1 边界,不在本 issue。
最小交付结果
reset 路径(compute(update_history=True, env_ids=...))只为 reset 行执行行独立管线并只返回 reset 行;无 delay/history 的组行级 scoped,有时序 buffer 的组保持全量管线、仅切片最终输出;正常 step 管线不变。
In scope
- 落点限于
src/unilab/managers/observation_manager.py 与 src/unilab/envs/manager_based_rl_env.py 的 reset 调用侧(_map_observations 增加行数校验参数)。
- term func 签名与 full-batch 返回契约不变;noise 保持 full-batch 形状抽取,共享 RNG 流与逐行 noise 值与全量实现逐位一致。
- delay/history buffer 语义不变(backfill 仍 per-row 写入;时序组读出保持全量后切片)。
- 补 manager 级与 env 级 parity 测试(reset 行与全量参考逐位一致、untouched 行不变、RNG 流一致、NaN 诊断报告真实 env id)。
- 用
mba_reset_obs_build_ms 在 MuJoCo/Motrix 做同 commit before/after。
Non-goals
- 不引入 row-aware observation term/API(那是新的公共 manager lifecycle,需单独确认)。
- 不优化 term func 内部的 backend state/getter 全量读取(U1 边界)。
- 不改正常 step 的 observation 管线(U2 边界);不改 reward、termination、reset/final observation、RNG 或 sim2sim contract。
Owner 与预计改动
- Owner:ObservationManager + MBA reset 边界。
- 预计 4–6 个文件、≤400 行净手写改动、1 个 PR。
- 与 U1、MuJoCo M1 可并行;与 U2(ObservationManager 正常 step 管线)共享 owner/file,必须先合并本 issue 再启动 U2。
Acceptance criteria
Stop conditions
- 需要修改公共 term 签名、ObservationManager lifecycle 或新增 SimBackend 方法。
- RNG/数值 parity 只能通过改变 noise、delay/history 或 reset observation 语义维持。
- 重复运行波动无法区分收益,或收益不足以覆盖维护成本。
Parent: #1259
Depends on: #1261(已合并)
启动条件(#1259 Wave 2 R2):#1261 合并后
mba_reset_obs_build_ms仍是 reset 路径最大剩余热点 —— 同机 baseline(sac/g1_motion_tracking,8192 envs):MuJoCo 5.67 ms(占 reset total 36%)、Motrix 21.54 ms(58%)。一句话问题
MBA partial reset 只重置约 251/8192 个 env,但 reset 路径上 ObservationManager 的 compute→noise→clip→scale→NaN→delay/history→concat 管线全程全 batch 计算,env 再切出 reset 行,其余行的计算结果被直接丢弃。相位 profile(8192 envs,MuJoCo)显示管线相位约占 obs build 的 80%,term func 内部的全量 getter 属于 U1 边界,不在本 issue。
最小交付结果
reset 路径(
compute(update_history=True, env_ids=...))只为 reset 行执行行独立管线并只返回 reset 行;无 delay/history 的组行级 scoped,有时序 buffer 的组保持全量管线、仅切片最终输出;正常 step 管线不变。In scope
src/unilab/managers/observation_manager.py与src/unilab/envs/manager_based_rl_env.py的 reset 调用侧(_map_observations增加行数校验参数)。mba_reset_obs_build_ms在 MuJoCo/Motrix 做同 commit before/after。Non-goals
Owner 与预计改动
Acceptance criteria
mba_reset_obs_build_ms相对同 commit baseline 显著下降;collector 吞吐有可重复改善,其他 case 无超出噪声的退化。make test-all通过;按 Roadmap: 优化必选的 Manager-Based runtime collector 吞吐并完成 #1042 性能验收 #1259 例外不等待远程 CI。Stop conditions