架构概览¶
UniLab 是一个 contract 驱动的机器人学习基础设施仓库。其核心规则是:在拥有该 契约的 owner 层修复行为。
运行时模型¶
异步路径采用从 CPU 仿真到加速器 learner 的流水线:
CPU physics backend -> collector / IPC -> learner
MuJoCo or Motrix shared memory torch
PPO 是同步路径:默认单进程,也可在单机上按一卡一进程运行 RSL-RL 数据并行;
每个 rank 独立持有 env/rollout,RSL-RL 在每个 mini-batch 后平均梯度。APPO 与
off-policy 算法则使用异步 runner、共享缓冲区,以及位于 uni_rl.ipc (unilab-rl repo) 与
uni_rl (unilab-rl repo) 下的权重同步原语。
分层边界¶
层 |
路径 |
拥有 |
|---|---|---|
Backend |
|
|
Env |
|
MDP 语义、观测、奖励、reset |
Config 与 registry |
|
Schema、owner YAML、env/backend 注册 |
算法与 IPC |
|
Learner、runner、buffer、权重同步 |
Scripts |
|
轻量装配与 CLI 路由 |
设计规则¶
将 backend 差异保留在 backend 实现、env 适配层与 owner YAML 中。
使用
uv run train --algo <algo> --task <task> --sim <backend>或uv run eval ...来选择对外的算法/任务/backend 路由。这些 flag 会 compose 出匹配的 owner YAML;training.sim_backend只是一个身份字段。优先用 config 表达,而不是分支。任何扩展的优先级顺序是:config schema -> registry -> env/backend 适配层 -> 最后才是脚本分支。
不要在
step、reset或 interval domain randomization 等热路径中解析 XML 或 资源。如果共享的 env 代码需要某个 backend 操作,先将其加入
SimBackend,再使用。使用证据等级的表述。例如
Registered、Configured、Tested、Benchmarked或Recommended;没有仓库内证据就不要声称稳定支持。上浮可复用原语。通用逻辑放在其 owner package,或放在共享基础设施
src/unilab/base/;不要在多个 workflow 中复制粘贴。新的 owner 逻辑不放进 过渡期的src/unilab/utils/。在最接近风险的边界处进行验证:Hydra 改动用 config 测试,观测/reset 改动用 env 测试,runner 改动用 IPC 测试。
验证¶
在贴近风险处验证。顶层 smoke run 只能补充、不能替代对改动真正触及边界的验证。
改动类型 |
最少验证 |
|---|---|
仅文档 |
|
Hydra / task / reward 配置 |
|
Env contract / 观测 |
|
Runner / IPC |
|
Backend 路径 |
对应 backend 的 smoke run,必要时补 slow test |
训练入口 |
相关测试加 1 iteration smoke run |
快速路径用 make test;提 PR 前用 make test-all(make check、
make test-cov 与 make test-benchmark-smoke)。
评审清单¶
这次改动触及了哪个 contract?
这个问题是否应该在更低层解决?
backend 或 task 行为是通过 config 表达的,还是被脚本特判掩盖了?
support 声明是否有 registry / config / test / benchmark 证据?
验证是否发生在最接近风险的边界?
关键文件¶
src/unilab/scripts/train_rsl_rl.pysrc/unilab/scripts/train_appo.pysrc/unilab/scripts/train_sac.pysrc/unilab/scripts/train_td3.pysrc/unilab/scripts/train_flashsac.pysrc/unilab/base/np_env.pyunisim.backend.basesrc/unilab/base/registry.pyuni_rl.ipc.async_runner(unilab-rl repo)src/unilab/training/run.py