运行时模型¶
详细的运行时契约见 ADR-0001 Runtime Model And Layer Boundaries 与 Developer 指南。本页将运行时摘要与对应的代码路径放在 一起说明。
两种运行时形态¶
同步 PPO 路径¶
src/unilab/scripts/train_rsl_rl.py 会 compose Hydra config、
调用 registry bootstrap、通过 registry.make(...) 构造 env,并在同一进程内运行
learner。默认配置保持单进程;training.devices 指定多张卡时,父进程通过 PyTorch
elastic launcher 启动本机 worker,worker 再进入同一脚本完成上述构造。RSL-RL 路径
通过 src/unilab/training/rsl_rl.py 适配 NpEnv。
多卡时每个 rank 按配置创建完整的 algo.num_envs、policy copy 与 rollout storage,
数据和 GAE 不跨 rank 交换。RSL-RL 负责 startup model broadcast、adaptive-KL 标量
同步,以及每个 PPO mini-batch 的梯度平均。UniLab 的 launcher 只负责 device/rank、
共享 log dir、seed offset 与进程失败联动,不另建 PPO 同步协议。只有 rank 0 写日志与
checkpoint;normalizer buffer、curriculum 和 episode 统计保持 rank-local。
异步 APPO 与 off-policy 路径¶
APPO 与 off-policy runner 采用 CPU 仿真到 learner 的拆分:
CPU physics env loop -> shared IPC buffer -> learner
^ |
+------------- SharedWeightSync -------+
APPO 使用
APPORunner、RolloutRingBuffer与SharedWeightSync。SAC、TD3 与 FlashSAC 只使用一条 off-policy execution path:
ReplayBuffer提供有界 host ingress,完整 ring 驻留在一个 CUDA/MPS learner device,SharedWeightSync负责发布 actor 权重。uni_rl.ipc.async_runner(unilab-rl repo) 中的AsyncRunner负责 collector 进程启动、 停止信号以及共享资源清理。
边界规则¶
env 保持 numpy/向量化形态,并返回
NpEnvState。GPU tensor 与 optimizer 状态属于 learner 代码,而非 env 代码。
Collector/learner 协议必须复用现有的 IPC 原语,而不是在 scripts 中另起临时的 并行协议。
PPO 多卡必须复用 RSL-RL 的 distributed contract;
algo.num_envs是 per-rank 语义,不能在脚本中静默除以 world size。
仓库中的证据¶
PPO 入口:
src/unilab/scripts/train_rsl_rl.pyAPPO runner:
uni_rl.algos.appo.runner(unilab-rl repo)Off-policy runner:
uni_rl.offpolicy.double_buffer_runner(unilab-rl repo)IPC 原语:
uni_rl.ipc.async_runner(unilab-rl repo)、uni_rl.ipc.rollout_ring_buffer(unilab-rl repo)、uni_rl.ipc.replay_buffer(unilab-rl repo)、uni_rl.ipc.weight_sync(unilab-rl repo)