当前状态(2026-08-24,以下清单为当前权威状态)
MotionCommand 正常 step、runtime-aware chunk tuner、tracking sensor 按需 materialization 当前均未激活,不是 final gate 的前置;仅当 #1263 数据未达已确认门槛且 maintainer 选择继续优化时,再各自拆分 issue。原始 roadmap 规划保留如下,历史状态以本节和 #1263 为准。
Parent: #1042
Evidence subtree: #1253 (含 #1255 、#1256 、#1257 )
Immediate execution children: #1260 、#1261 、#1262
Final acceptance: #1263
Owner summary
Manager-Based API(MBA)是 #1042 已确认的必选 production 模式,direct 只作历史 benchmark baseline。本 roadmap 把性能恢复拆成五条线:证据基线、partial reset、正常 update_state、MuJoCo backend、最终验收。第一波由 #1260 、#1261 、#1262 加现有 #1256 并行推进,分别归 benchmark、command/task、backend/upstream owner;后续 getter、observation、reward、MuJoCo adapter 只在前置数据满足启动条件后建 implementation issue。umbrella 本身零代码,预计 4 个已建 child 加最多 8 个条件 child;不改 MBA 语义、runner/IPC/learner,不新增 direct fallback 或长期性能 CI。所有代码 child 在最终提交本地通过 make test-all 后直接向绑定 dev 分支提 PR,不触发或等待远程 CI。需要 maintainer 决定最终门槛及是否承担上游 BatchEnvPool 能力的维护成本。
只优化必选 MBA production 路径内部的重复计算和 backend 固定成本;不把 direct 变成模式、fallback 或第二条 execution path。
不可变前提
本 roadmap 范围内始终通过现有 MBA factory、ManagerBased env lifecycle、manager terms 与 SimBackend 运行。
community-compatible per-substep action、observation/reward term 顺序、reset/final observation、RNG、task I/O 和 sim2sim contract 必须保持。
main direct SHA 只用于回答“当前 MBA 相对历史 direct 的总差值”,不作为生产候选,也不要求局部 timing 与 direct 同口径。
优化落在 owner layer;benchmark 脚本只组装测量,不承载 task/backend 规则。
建议以 7 个 case 均达到同机 main direct 的 90% 为工作目标;是否成为最终 gate 由 Benchmark: 固化必选 MBA runtime 的可复核 A/B 基线与性能门槛 #1260 后的 maintainer 决定。
已有证据与 tracking 树
执行依赖图
flowchart LR
E55["#1255 reset 归因"] --> R1["#1261 MotionCommand partial-reset"]
E56["#1256 update_state 证据收口"] --> U1["计划 U1: state/getter 单相位复用"]
E57["#1257 MuJoCo dispatch 归因"] --> M0["#1262 upstream 能力决策"]
E53["#1253 branch A/B"] --> B0["#1260 pinned baseline 与门槛"]
R1 -. "obs rebuild 仍主导" .-> R2["计划 R2: partial-reset observation"]
U1 -. "obs 固定管线仍主导" .-> U2["计划 U2: ObservationManager step 管线"]
U1 -. "reward 固定管线仍主导" .-> U3["计划 U3: RewardManager 管线"]
M0 -. "能力可行且获批准" .-> M1["计划 M1a/M1b: upstream + adapter"]
M0 -. "多 dispatch 保留" .-> M2["计划 M2: runtime-aware chunk tuner"]
B0 --> F["#1263 最终验收"]
E56 --> F
M0 --> F
R1 --> F
U1 -. "若激活" .-> F
R2 -. "若激活" .-> F
U2 -. "若激活" .-> F
U3 -. "若激活" .-> F
M1 -. "若激活" .-> F
M2 -. "若激活" .-> F
Loading
实线是硬依赖;虚线是数据满足条件且 maintainer 单独确认后才建立的 child,不是本 umbrella 自动授权的实施项。
分波次并行执行
Wave 1:现在可并行的三条项目线
项目线
Issue
Owner / 主要落点
与其他线的关系
Evidence
#1260 + 现有 #1256
benchmark、临时 profiling;不保留业务代码
与另外两线无代码依赖;正式跑数共享同一机器,必须串行调度
Reset
#1261
command manager + task-owned MotionCommand
只依赖已完成 #1255 ;不等 #1256 /#1262 ,可立即独立开发
MuJoCo
#1262
MuJoCo backend / mujoco_uni_runtime 调查
只依赖已完成 #1257 ;不改 manager,可与 reset/update 线并行
并行要求:#1260 先在任何实现合并前完成 clean baseline;#1261 /#1262 的代码或调查可以同时进行,但不能与正式 benchmark 在同一机器上争用 CPU。每条线保留自己的 before/after,不用跨分支混合数字。
Wave 2:第一波结果出来后可再次并行
计划 U1 — MBA update_state state/getter 单相位复用
计划 R2 — ObservationManager partial-reset 稀疏重建
条件依赖:perf: 限定 MotionCommand partial-reset 的全量重计算范围 #1261 合并后,mba_reset_obs_build_ms 仍是主要剩余热点且预计收益值得维护成本。
主要结果:只为 reset rows 重建 observation/history,不改变正常 step 管线。
Owner:ObservationManager + MBA reset 边界;与 U1、MuJoCo M1 可并行,但不能与 U2 同时实施。
强制确认:现有 observation term 返回 full-batch array;若需 row-aware term/API,这是新的公共 manager lifecycle child,不能用本 roadmap 直接授权。
计划 M1 — 单次 dispatch per-substep control
Wave 3:只按剩余瓶颈启动
计划 U2 — ObservationManager 正常 step 固定管线优化
依赖 U1;若 R2 被激活,还必须等 R2 合并,因为两者共享 observation_manager.py、noise/history/NaN 语义和测试。
只优化 noise、concat、NaN check、copy/clip/scale 等 observation 管线;不同时改 reward。
计划 U3 — RewardManager term 累加管线优化
计划 M2/M3 — MuJoCo 次要项
M2 runtime-aware chunk tuner:仅当 M1 未实施或 residual microbenchmark 证明 tuner 仍有独立收益。
M3 tracking sensor 按需 materialization:仅当 single-dispatch 后 sensor 成本仍显著;不能与 M2/M1b 同时改同一 backend 分支。
tuner 与 sensor 是两个可独立回退的结果,必须分别建 issue/PR。
Wave 4:串行最终验收
#1263 硬依赖 #1260 和所有实际被激活的 implementation child。final SHA 固定后才能运行;验收中不修代码、不改配置、不新增 case。最终由 maintainer 决定 dev → main,而不是由最后一个性能 PR 自动宣称完成。
耦合与合并顺序
必须串行的语义/文件耦合
perf: 限定 MotionCommand partial-reset 的全量重计算范围 #1261 与任何“MotionCommand 正常 step 优化”共享 command term 状态和文件:先 reset,再基于新 baseline 决定 step 优化。
R2 与 U2 都修改 ObservationManager compute/history/noise 路径:先 partial-reset contract,再正常 step 管线,不能并行合并。
U1 定义 state read/cache 失效边界,U2/U3 会消费它:必须先 U1,避免各 manager 私建缓存。
M1a upstream runtime 必须先发布/固定版本,M1b adapter 才能开始;M1b、M2、M3 都碰 MuJoCo backend,按最终选择串行。
可以并行但最终需 rebase/组合验证
共享测量资源耦合
Child issue scope 摘要
已创建、当前可执行或已明确阻塞
条件 child(达到启动条件时再创建)
U1 state/getter 单相位复用。
R2 partial-reset observation 稀疏重建。
M1a upstream runtime + M1b UniLab adapter。
U2 ObservationManager 正常 step 管线。
U3 RewardManager 管线。
M2 chunk tuner、M3 tracking sensor materialization。
这些边界已经划分,但不提前创建空 implementation issue:#1256 /#1261 /#1262 的结果会决定实际 API、收益和 owner;届时每项按一个主要结果、≤15 文件、≤800 行、1 PR 建 issue。
Non-goals
不保留、新增或恢复 direct production runtime、fallback、MBA/direct switch 或平行 env path。
不改 collector、runner、IPC、replay、learner、checkpoint 或训练同步协议。
不改变 action/observation 维度、obs_groups_spec、reward 权重、termination、reset/final observation、RNG 或 sim2sim contract。
不通过 task YAML、control decimation、num_envs、backend identity 或删 case 美化 A/B。
不新增常规 CI、长期 dashboard、自动性能 claim 或专属 evidence system。
不把 dispatch、chunk tuner、sensor、getter cache、observation、reward 合成一个“大优化 PR”。
规模与永久维护成本
Roadmap/测量 issue 零 production code;已创建 4 个直接 child,预计最多再激活 8 个条件 implementation child。
每个 implementation child 默认 Small/Standard:≤15 文件、≤800 行净手写改动、1 个 PR;达到任一上限立即暂停。
owner-layer 去重维护 focused parity/performance tests。
U1 若引入 cache,永久责任是 substep/reset/set_state 的失效规则与测试;R2 若引入 row-aware observation,永久责任是新的 manager lifecycle contract;两者都需单独确认。
M1 若引入 upstream 能力,永久责任是依赖版本、API compatibility、adapter failure 和两种调用模式测试。
不新增长期 benchmark 服务;Benchmark: 固化必选 MBA runtime 的可复核 A/B 基线与性能门槛 #1260 /Benchmark: 完成必选 MBA runtime 的最终 7-case 性能验收 #1263 原始结果作为一次性 issue 证据。
开发分支与 PR Gate(#1259 child 的显式例外)
Umbrella acceptance criteria
Stop conditions
任何方案需要绕过 manager、恢复 direct env、增加 MBA/direct 配置或改变 community-compatible MBA 语义。
需要新增公共 contract、env/manager lifecycle、SimBackend 方法、runner/IPC 路径或常规 CI,而 child 未单独获批。
一个 backend 的需求向 task、manager、runner 或 learner 扩散。
child 达到 15 文件、800 行、一个 PR 上限,或出现第二个可独立交付结果。
重复运行波动无法区分收益,或收益不足以覆盖 cache/upstream/API 的永久维护成本。
并行分支发生语义耦合,无法通过机械 rebase 与组合验证隔离;此时停止并改为串行。
授权边界
批准本 roadmap 和创建 sub-issue 只授权规划与 tracking。开始开发仍只授权 maintainer 明确确认的当前第一个 Small/Standard implementation issue;完成后不自动进入下一个。#1260 /#1256 的测量和 #1262 的调查也不能被解释为已批准 M1/U1/R2 等 production 改动。
当前状态(2026-08-24,以下清单为当前权威状态)
MotionCommand 正常 step、runtime-aware chunk tuner、tracking sensor 按需 materialization 当前均未激活,不是 final gate 的前置;仅当 #1263 数据未达已确认门槛且 maintainer 选择继续优化时,再各自拆分 issue。原始 roadmap 规划保留如下,历史状态以本节和 #1263 为准。
Parent: #1042
Evidence subtree: #1253(含 #1255、#1256、#1257)
Immediate execution children: #1260、#1261、#1262
Final acceptance: #1263
Owner summary
Manager-Based API(MBA)是 #1042 已确认的必选 production 模式,direct 只作历史 benchmark baseline。本 roadmap 把性能恢复拆成五条线:证据基线、partial reset、正常 update_state、MuJoCo backend、最终验收。第一波由 #1260、#1261、#1262 加现有 #1256 并行推进,分别归 benchmark、command/task、backend/upstream owner;后续 getter、observation、reward、MuJoCo adapter 只在前置数据满足启动条件后建 implementation issue。umbrella 本身零代码,预计 4 个已建 child 加最多 8 个条件 child;不改 MBA 语义、runner/IPC/learner,不新增 direct fallback 或长期性能 CI。所有代码 child 在最终提交本地通过
make test-all后直接向绑定 dev 分支提 PR,不触发或等待远程 CI。需要 maintainer 决定最终门槛及是否承担上游 BatchEnvPool 能力的维护成本。不可变前提
SimBackend运行。已有证据与 tracking 树
执行依赖图
flowchart LR E55["#1255 reset 归因"] --> R1["#1261 MotionCommand partial-reset"] E56["#1256 update_state 证据收口"] --> U1["计划 U1: state/getter 单相位复用"] E57["#1257 MuJoCo dispatch 归因"] --> M0["#1262 upstream 能力决策"] E53["#1253 branch A/B"] --> B0["#1260 pinned baseline 与门槛"] R1 -. "obs rebuild 仍主导" .-> R2["计划 R2: partial-reset observation"] U1 -. "obs 固定管线仍主导" .-> U2["计划 U2: ObservationManager step 管线"] U1 -. "reward 固定管线仍主导" .-> U3["计划 U3: RewardManager 管线"] M0 -. "能力可行且获批准" .-> M1["计划 M1a/M1b: upstream + adapter"] M0 -. "多 dispatch 保留" .-> M2["计划 M2: runtime-aware chunk tuner"] B0 --> F["#1263 最终验收"] E56 --> F M0 --> F R1 --> F U1 -. "若激活" .-> F R2 -. "若激活" .-> F U2 -. "若激活" .-> F U3 -. "若激活" .-> F M1 -. "若激活" .-> F M2 -. "若激活" .-> F实线是硬依赖;虚线是数据满足条件且 maintainer 单独确认后才建立的 child,不是本 umbrella 自动授权的实施项。
分波次并行执行
Wave 1:现在可并行的三条项目线
并行要求:#1260 先在任何实现合并前完成 clean baseline;#1261/#1262 的代码或调查可以同时进行,但不能与正式 benchmark 在同一机器上争用 CPU。每条线保留自己的 before/after,不用跨分支混合数字。
Wave 2:第一波结果出来后可再次并行
计划 U1 — MBA update_state state/getter 单相位复用
EntityData/ manager env state-read boundary;预计 Standard,≤15 文件/800 行/1 PR。计划 R2 — ObservationManager partial-reset 稀疏重建
mba_reset_obs_build_ms仍是主要剩余热点且预计收益值得维护成本。计划 M1 — 单次 dispatch per-substep control
SimBackend方法则停止并另做公共 contract 决策。Wave 3:只按剩余瓶颈启动
计划 U2 — ObservationManager 正常 step 固定管线优化
observation_manager.py、noise/history/NaN 语义和测试。计划 U3 — RewardManager term 累加管线优化
计划 M2/M3 — MuJoCo 次要项
Wave 4:串行最终验收
#1263 硬依赖 #1260 和所有实际被激活的 implementation child。final SHA 固定后才能运行;验收中不修代码、不改配置、不新增 case。最终由 maintainer 决定 dev → main,而不是由最后一个性能 PR 自动宣称完成。
耦合与合并顺序
必须串行的语义/文件耦合
可以并行但最终需 rebase/组合验证
manager_based_rl_env.py,后合并者只做机械 rebase,不把两个主要结果塞进一个 PR。共享测量资源耦合
Child issue scope 摘要
已创建、当前可执行或已明确阻塞
条件 child(达到启动条件时再创建)
这些边界已经划分,但不提前创建空 implementation issue:#1256/#1261/#1262 的结果会决定实际 API、收益和 owner;届时每项按一个主要结果、≤15 文件、≤800 行、1 PR 建 issue。
Non-goals
obs_groups_spec、reward 权重、termination、reset/final observation、RNG 或 sim2sim contract。规模与永久维护成本
开发分支与 PR Gate(#1259 child 的显式例外)
dev/issue-1042-manager-based-api。每个 implementation child 从最新 dev 建独立分支,一个 child、一个分支、一个 PR;PR base 必须是该 dev 分支,禁止直接提交实现到 dev。make test-all,随后确认git status --short --branch工作树干净。make test-all未通过且 maintainer 没有明确 override 时,不得创建或更新 PR。make test-all结果、适用 benchmark 以及 MuJoCo/Motrix 行为影响。make test-all。Umbrella acceptance criteria
make test-all后直接投向绑定 dev,不运行或等待远程 CI;最终 dev → main 仍按仓库完整 PR gate。Stop conditions
授权边界
批准本 roadmap 和创建 sub-issue 只授权规划与 tracking。开始开发仍只授权 maintainer 明确确认的当前第一个 Small/Standard implementation issue;完成后不自动进入下一个。#1260/#1256 的测量和 #1262 的调查也不能被解释为已批准 M1/U1/R2 等 production 改动。