续训与检查点¶
检查点选择由算法层面的字段控制。请使用 algo.load_run,而不是
training.load_run。
续训¶
PPO/APPO 直接通过 algo.load_run 续训。使用 run id,或用 -1 表示相关日志目录中最新的一次运行:
uv run train --algo ppo --task go2_joystick_flat --sim mujoco \
algo.load_run=-1 \
training.no_play=true
off-policy 算法(SAC/FlashSAC/WarpSAC)的续训是显式开启的,以避免
algo.load_run=-1 的默认值把全新启动意外变成续训。设置 algo.resume=true,并用
algo.load_run(run id 或 -1 表示最新 run)与可选的 algo.checkpoint
(迭代号或文件名;-1 表示最新 checkpoint)选择检查点:
uv run train --algo flashsac --task g1_motion_tracking --sim mjwarp \
--profile <owner-profile> \
algo.resume=true \
algo.load_run=2026-10-05_14-28-04_mjwarp \
training.no_play=true
off-policy checkpoint 恢复完整的 learner 状态(网络、优化器、调度器、normalizer
与 update count),训练以绝对迭代编号继续(model_32000.pt 从第 32001 次迭代继续,
因此 algo.max_iterations 仍是总预算而不是增量)。replay buffer 不落盘:续训的 run
会从空 buffer 重新经过 train-start 阈值热身,且 RNG 状态不恢复。
检查点格式支持边界¶
PPO/APPO 续训加载的是 UniLab patch 过的 rsl-rl checkpoint。受支持的 checkpoint 必须
携带 unilab_logger_state(logger 的 tot_time / tot_timesteps 计数器,必需),
并且当任务环境发布版本化 training state 时,还需携带对应的
unilab_env_training_state。自 resume-state patch(issue #441,v1.0.0 起发布)以来
UniLab 一直写入这两个键,新保存的 checkpoint 保持不变。
从包含 issue #2416 的 1.3.5 之后的第一个 UniLab 版本起,加载改为 fail closed:
缺少有效
unilab_logger_state的 checkpoint(pre-patch 或原生 rsl-rl checkpoint) 会被拒绝加载,错误信息说明最低支持格式,不再静默地把训练进度从 0 恢复;当环境发布 training state 时,缺少有效版本化
unilab_env_training_state的 checkpoint 同样会被拒绝;没有可导出 training state 的环境不写入占位键,也不要求该键。
不提供兼容窗口、离线迁移工具或 dual-write 路径,该 fail-closed 行为也不会回 port 到 1.3.5 patch release。对于不受支持的 pre-patch checkpoint,请用受支持的 UniLab 版本 重训,或从该版本保存的 checkpoint 续训。
checkpoint 文件是只读加载输入:加载器不会修复、重写或迁移它们。
回放检查点¶
uv run eval --algo ppo --task go2_joystick_flat --sim mujoco --load-run -1
uv run eval --algo sac --task g1_walk_flat --sim mujoco --load-run -1
uv run eval 会将 --load-run 映射到底层的检查点选择器,并设置回放模式:
uv run eval --algo ppo --task go2_joystick_flat --sim mujoco --load-run -1
某些脚本路径接受通过 algo.load_run 传入的检查点路径;统一 CLI 会将 --load-run
校验为一个 run id,且不接受路径分隔符。
随机种子¶
训练种子的解析在 src/unilab/training/seed.py 中实现。仅认可算法级
algo.seed;旧 training.seed fallback 已删除,配置了 training.seed
但缺少 algo.seed 时会 fail closed。在实验跟踪启用时,该辅助逻辑会记录
种子元数据。