Skip to content

roadmap: Genesis 物理后端接入(遵循现有 UniLab 契约) #1339

Description

@TATP-233

Scope level

roadmap

Work type / area

  • Work type: feature + sim
  • Area: backend / config / env contract
  • Proposed owner: Backend maintainer,协同 Config/Env maintainer(暂不指派)

Owner summary

本 roadmap 只交付 Genesis World 作为 UniLab 一个可选物理后端的正式接入。目标是在不改变现有 NpEnvState、SimBackend、Hydra task owner、registry、env/runner/learner lifecycle 和 checkpoint contract 的前提下,让一个已有 task 能够选择 genesis、完成构造、reset、step,并按已声明的 capability 进行 play/eval。首期只使用现有 g1_walk_flat 作为集成 fixture,不新增 task、不迁移算法、不改其他 backend 的行为。跨物理后端评测、算法/checkpoint 迁移、N-way sim2sim 审计和通用 benchmark/evidence 基础设施是后续独立 roadmap,不属于本 issue。预计 3 个 child issue / PR、约 15–30 个文件、2k–4k 手写 LOC。长期责任是 Genesis adapter、可选依赖与安装诊断、runtime 生命周期、asset/state 映射、能力边界测试和文档。需要 maintainer 确认 Genesis 的支持等级及进程内/隔离进程方案。

推荐方案

采用一个薄的 GenesisBackend 适配层,复用当前 UniLab contract:

  1. Genesis 只作为可选 backend identity:task owner 通过 task={task}/{backend} 选择,training.sim_backend 仍只是 owner YAML 的身份字段。
  2. adapter 位于 src/unilab/base/backend/genesis/,env/manager 只调用正式 SimBackend,不接触 Genesis 私有对象。
  3. Genesis 的 model/asset/name/index 解析只在 init/materialization/cache 完成;step、reset 和 domain randomization 热路径只使用缓存的数值 view。
  4. 需要的能力优先复用 SimBackend 现有方法;若发现必须新增公共方法,先暂停并单独更新 ADR/contract issue,不把公共接口塞进 Genesis child。
  5. 缺失的 sensor、DR、render 或 playback 能力在最近的冷路径显式 NotImplementedError/contract error;不 warning、no-op、返回零值或回退到其他 backend。

Genesis runtime 方案

建议 Child 1 先比较以下选项,默认优先验证 A。UniLab backend identity 是 genesis,上游包名是 genesis-world。

方案 用户价值 规模与长期成本 建议
A. 进程内薄 adapter 与当前 Python 范围重叠,最少改动即可复用现有 env/runner/play 路径 需处理 Genesis/Quadrants 全局生命周期、设备数组与 NumPy 边界、可选依赖体积 首选
B. 独立 worker/subprocess 隔离全局 runtime、依赖冲突和崩溃 新增 IPC schema、worker 生命周期、设备分配和诊断 仅在 A 被证据否决时采用
C. tensor-native 新 env/runner path 可能减少 host 搬运 新增公共 execution path,违反本 issue 的 contract 边界 排除,另立架构 roadmap

问题与仓库证据

  • src/unilab/base/backend/base.py 已定义统一 NumPy SimBackend,涵盖 state、control、sensor、DR、playback 和冷路径 metadata;Genesis 尚未实现该 contract。
  • src/unilab/base/backend/init.py 的 create_backend 目前没有 genesis 分支,src/unilab/base/registry.py 的支持 backend 列表也没有 genesis;因此现有 task owner 不能通过正常 Hydra/registry 路径选择 Genesis。
  • 现有 task owner 约定是 conf/{algo}/task/{task}/{backend}.yaml,不能通过单独 override training.sim_backend 绕过 owner。
  • tests/base/test_backend_conformance.py、tests/base/test_registry.py 和 tests/envs/test_manager_based_rl_env.py 已提供接入后应复用的近风险测试边界。
  • scripts/benchmark/physics/benchmark_physics_step_genesis.py 已能用 uv run --with genesis-world 测量 Genesis scene.step();它只是 Genesis-only physics probe,不等价于 SimBackend、完整 env 或训练支持。已关闭的 benchmark: add cross-backend physics_step throughput coverage for genesis, isaacgym, and mujoco_warp #251 只作为历史 benchmark 记录,不在本 roadmap 重启或扩展。
  • 现有 Genesis benchmark 在 scene 之间显式调用 gs.destroy()/gs.init() 并处理 runtime pool 释放,说明 lifecycle 是 adapter 的必测边界。
  • Genesis World upstream(2026-08-27 检查 main HEAD 46afc00d,package genesis-world 1.3.3;来源 https://github.com/Genesis-Embodied-AI/genesis-world)声明 Python >=3.10,<3.14、Apache-2.0、MJCF/URDF 导入及 batched simulation;其 Quadrants、MuJoCo 和网格/渲染依赖仍须与 UniLab 验证,不能据此直接声称支持。
  • 现有 IsaacGym roadmap roadmap: IsaacGym 后端接入的可行性分析与方案建议 #1332 是独立工作,本 issue 不纳入其他 backend、task 或其 child 的实现。

集成交付结果

完成本 roadmap 后,仓库应能从已有 contract 事实回答:

  • GenesisBackend 实现了哪些现有 SimBackend 方法,哪些能力明确 unsupported;
  • 一个已有 task(首期为 g1_walk_flat)是否能通过正常 owner YAML/registry 路径构造 Genesis env;
  • reset() 是否仍返回 (obs_dict, info_dict),NpEnvState.obs 是否仍为 dict,step 的 action/state/sensor shape 和 dtype 是否稳定;
  • Genesis runtime 缺失、asset 不兼容或能力缺失时,用户是否获得明确的冷路径诊断;
  • 现有 MuJoCo、MJWarp、Motrix、Drake、runner、learner 和 checkpoint 行为没有回归。

这项 roadmap 不回答 Genesis 与其他物理后端谁更快、checkpoint 能否跨后端迁移或任务质量是否相同;这些问题留给后续独立 roadmap。

预期数据流:

CLI --algo/--task/--sim
  -> Hydra task owner YAML
  -> registry
  -> ManagerBasedRlEnv / NpEnvState
  -> SimBackend
  -> GenesisBackend
  -> genesis-world runtime

交付边界

In scope

  • Child 1 对 genesis-world 版本、安装方式、Python/CUDA/设备组合、MJCF/URDF 导入、batch state、actuator/body/sensor 命名和 cleanup 做可复现 feasibility 研究,并形成逐方法 contract matrix。
  • Child 2 实现 src/unilab/base/backend/genesis/ 下的 GenesisBackend,接入现有 factory/registry 和必要的 EnvCfg backend 参数;依赖采用 lazy optional import,不把 Genesis 加入基础安装。
  • Child 2 补 fake/mock runtime 测试、SimBackend conformance 参数化、state/control/ sensor/reset/cleanup 的近风险测试;无 Genesis runtime 的机器必须能清晰 skip 或报可操作安装诊断。
  • Child 3 只为一个已有 task owner(建议 g1_walk_flat)增加 genesis owner 配置并验证 compose、构造、reset、step 和已有 play/eval 生命周期;不新增 task、reward、算法或 scene family。
  • 对现有 Genesis-only physics probe 只做必要的入口/诊断修正;不建设跨 backend benchmark 或新的 evidence/manifest 系统。
  • 增加 Genesis 后端安装/运行边界文档,明确 experimental/configured/tested 状态、不支持能力和复现命令。

Out of scope

  • 跨物理后端性能评测、任务质量对比、sim2sim checkpoint 迁移或算法迁移。
  • N-way sim2sim audit、DENYLIST/WARNING_LIST 重构、通用 benchmark manifest、support evidence 基础设施或新的支持等级。
  • IsaacGym、Isaac Sim、Brax 或其他新 backend 的接入;不重写 roadmap: IsaacGym 后端接入的可行性分析与方案建议 #1332
  • 新增 task、reward、command、terrain、algorithm、policy network 或训练超参数 migration;g1_walk_flat 只作为已有 contract 的 fixture。
  • 新建 tensor-native env/runner、collector/learner、IPC、checkpoint 格式或权重同步协议。
  • Genesis FEM/MPM/粒子多物理、Nyx/其他 renderer、differentiable simulation、全量 camera、完整 DR 或跨平台 production support。
  • 把 physics-only probe、短 smoke 或配置存在写成 production support。
  • 将 Genesis 私有 model/entity/runtime 对象暴露给 env、manager、runner 或 scripts;热路径不解析 asset/model metadata,也不使用 getattr/hasattr 探测能力。

Child issue 与依赖顺序

本次只创建总体 roadmap;child issue 在 maintainer 确认边界后再逐项创建。依赖顺序为 Child 1 → Child 2 → Child 3;不创建其他 backend/task child。

Child 1 — Research: Genesis runtime 与 SimBackend contract feasibility

主要结果:可复现的 capability matrix 和 go/no-go 决策,不注册 production backend。

  • 固定 genesis-world version/commit、安装命令、硬件/驱动/Python 矩阵。
  • 逐项验证现有 SimBackend 的 model、actuator、root state、body/link、sensor、control、set_state、reset、DR、materialize、cleanup 和 playback 边界。
  • 对比进程内 A 与隔离进程 B;测量必要的 Genesis device array ↔ NumPy 拷贝。
  • 明确 MJCF/URDF、keyframe、actuator/body/sensor/index 映射;解析只在冷路径完成。
  • 预计 2–6 个文件、≤600 手写 LOC、1 个 research PR/报告。
  • Stop:需要新增 runner/env/IPC/checkpoint contract、热路径 asset 解析,或 runtime 无法稳定回收;回到 roadmap 由 maintainer 选择 B、缩小范围或 no-go。

Child 2 — Feature: GenesisBackend contract adapter

主要结果:在不改变 SimBackend 公共接口的前提下,Genesis 可由 factory/registry 构造,且无运行时机器仍可测试。

  • 新增 src/unilab/base/backend/genesis/,封装 Genesis import、scene materialize、batch stepping、state/sensor view 和 cleanup。
  • 接入 create_backend、supported backend registry、env_backend_kwargs(仅必要字段)和 lazy optional dependency;不修改其他 backend 的数值路径。
  • mock/fake runtime 覆盖 action/control、state round-trip、shape/dtype/finite、selected reset、lifecycle 和错误诊断;真实 runtime 测试按环境显式标记。
  • 未实现的 capability 在 construction/materialization/playback 最近边界 fail-closed。
  • 预计 10–18 个文件、1,200–2,500 手写 LOC、1 个 feature PR。
  • Scope review:任何新增 SimBackend 方法、公共异常、IPC 或 tensor-native path 必须先拆 contract/ADR issue。

Child 3 — Config/docs: 一个已有 task 的 Genesis owner 验证

主要结果:现有 g1_walk_flat(或 maintainer 指定的单一已有 task)可通过 task={existing_task}/genesis 选择并完成 env smoke;不新增 task。

  • 增加一棵最小 owner YAML,显式声明现有策略 I/O 相关字段;不改算法定义。
  • 验证 Hydra compose、registry lookup、ManagerBasedRlEnv 构造、reset/step 和 NpEnvState/env wrapper contract。
  • 对 play/eval 只验证已有 lifecycle 能安全进入;Genesis 不支持的 render/play 模式明确报错,不添加新的 playback protocol。
  • 更新中英文 backend 文档和必要的支持矩阵现有条目;不建设新的跨 backend 证据系统。
  • 预计 5–10 个文件、400–900 手写 LOC、1 个 config/docs PR。

后续方向(不属于本 issue)

Genesis backend 稳定后,另立总体 roadmap 决定是否开展:

  1. MuJoCo/Motrix/MJWarp/Drake/Genesis 的统一 physics/env/task benchmark;
  2. checkpoint sim2sim 与算法迁移评估;
  3. 多 backend 支持矩阵、manifest 和 N-way contract audit;
  4. 第二个及后续物理 backend。

上述方向不作为本 issue 的 child、验收条件或开发授权。

Roadmap relationship 与 target branch

  • Related architecture roadmap: Roadmap: 将 UniLab 迁移为社区通用的 Manager-Based API #1042
  • Existing independent backend roadmap: roadmap: IsaacGym 后端接入的可行性分析与方案建议 #1332(IsaacGym;不纳入本 issue)
  • ADR 关联:ADR-0002(backend capability/play)、ADR-0003(task owner/config compose)、ADR-0004(registry bootstrap);任何新增公共 contract 需另立 ADR/issue。
  • Declared base branch: dev/issue-1042-manager-based-api
  • Declared base head at proposal time: 59d8251(授权实施前必须重新同步并确认最新 head)
  • Planned integration branch after explicit development authorization: dev/issue-1339-genesis-backend
  • 每个 child 从最新集成分支创建类型化分支,PR base 指向本 roadmap 集成分支。
  • 本 roadmap 最终 PR base 为非 main 的 declared base,因此以最终本地 make test-all + review 为完整 gate;若 declared base 在实施前进入 main,先更新记录再建分支。

规模与 review 计划

子项 文件 手写 LOC Review owner
Genesis feasibility research 2–6 ≤600 Backend/runtime
GenesisBackend adapter 10–18 1,200–2,500 Backend + Env
Existing-task owner/docs smoke 5–10 400–900 Config/Env + docs
合计 约 15–30 约 2k–4k 3 个聚焦 PR

新增公共 SimBackend contract、execution path、IPC 或常规 CI 不计入上述预算,必须单独 issue/ADR 并重新确认范围。

永久维护成本

若 maintainer 将 Genesis 从 experimental/configured 升级为 production,UniLab 将长期承担:

  • GenesisBackend 与锁定的 genesis-world version window、lazy optional dependency、安装诊断和上游升级/下线流程;
  • Genesis/Quadrants 初始化、销毁、device selection、进程/fork 兼容性和资源回收;
  • MJCF/URDF scene、actuator、body、sensor、root state 和 keyframe 的冷路径映射;
  • Genesis device array 与 NumPy SimBackend view 的数据搬运、shape/finite 检查和性能回归;
  • 已支持 task owner 的 compose、conformance、真实 runtime 测试和中英文文档;
  • 明确记录 unsupported capability,不以静默 fallback 维持表面兼容。

本 issue 不承诺常规 GPU CI、全平台支持或跨 backend 维护;若不愿承担上述责任,Genesis 应保持为 research/benchmark adapter,不标 production。

Acceptance criteria

  • Maintainer 确认本 issue 只覆盖 Genesis backend,以及 experimental/configured/ tested/production 中的目标等级。
  • Child 1 形成固定版本和环境下的 contract capability matrix,并作出 A/B go/no-go。
  • 若 go,create_backend("genesis", ...) 通过现有 factory/registry 可用;缺运行时时给出明确、可操作的安装诊断。
  • 一个已有 task(默认 g1_walk_flat)可通过正常 owner YAML 路径选择 genesis,完成构造、materialize、reset、step 和 cleanup;不新增 task。
  • reset()、NpEnvState.obs、action/state/sensor shape/dtype/finite 与现有 contract 保持一致;现有 backend/runner/learner 无回归。
  • Genesis 不支持的 sensor/DR/render/play 能力在最近冷路径 fail-closed。
  • env/manager/runner/scripts 不调用 Genesis 私有对象;热路径不解析 asset/model metadata,不使用 getattr/hasattr 探测 backend 能力。
  • 中英文文档说明安装、运行命令、支持等级和明确的 unsupported 边界。
  • 每个 child 最终 head 运行近风险测试和 make test-all;roadmap 集成 head 再次运行 make test-all。本规划 issue 本身不宣称已通过实现 gate。

Validation plan

  • 规划阶段:核对 SimBackend、factory、registry、owner YAML、conformance 测试、Genesis-only probe 和 upstream version evidence。
  • Child 1:固定 commit、硬件、驱动、seed 和命令,保存 capability matrix 与失败诊断。
  • Child 2:无 Genesis runtime 用 fake/mock 覆盖 contract;有 runtime 再执行真实 materialize/reset/step/cleanup smoke。
  • Child 3:对单一已有 task 验证 Hydra compose、registry lookup、env return contract 和已有 play/eval lifecycle;不进行跨 backend 对比。
  • 本 issue 只做规划和 issue 管理,不修改代码、不创建 production dependency,也不运行或声称通过最终 PR gate。

Dependencies / blockers / scope review

  • genesis-world、Quadrants、PyTorch/CUDA/驱动与现有 UniLab lock/optional extras 的兼容性。
  • Genesis 对现有 task-level MJCF/URDF、actuator、sensor、floating root、keyframe、batch state 和 reset 的真实支持。
  • Genesis runtime 是否可在同一进程稳定 init/destroy;若不可,是否值得承担 worker lifecycle。
  • 可复现实验所需的 Genesis 运行机器;没有 runtime 时必须仍能运行 mock contract tests。

以下发现必须暂停 child 并更新本 roadmap:

  • 需要新的 env/runner/learner execution path、checkpoint/IPC protocol 或公共接口;
  • 需要引入其他 backend、task、algorithm 或第二个 task fixture;
  • 需要跨 backend benchmark、sim2sim、N-way audit、manifest 或常规 GPU CI;
  • adapter 规模或永久维护责任明显超过上表;
  • Genesis upstream 能力不足,或更小的现有 adapter 方案已经足够。

Authorization

当前请求只提供规划授权:收缩并维护本总体 roadmap issue、记录 Genesis 研究边界和拟议 child。它不授权创建 child issue、集成分支、修改仓库、接入其他任务/后端、安装 production dependency 或开始 Genesis adapter 实现。maintainer 确认 scope、支持等级和 runtime 方案后,才按 roadmap 集成分支工作流创建 Child 1。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions