APPO¶
APPO 是 UniLab 的异步 PPO 路径。它使用 src/unilab/scripts/train_appo.py、
src/unilab/conf/appo/config.yaml 以及 uni_rl.algos.appo (unilab-rl repo) 下的运行时。该配置暴露
了 algo.steps_per_env、training.collector_device 和
training.replay_queue_size;算法配置中包含 V-trace 裁剪字段。
快速开始¶
uv run train --algo appo --task go2_joystick_flat --sim mujoco
uv run train --algo appo --task g1_motion_tracking --sim motrix training.no_play=true
常用 Override¶
uv run train --algo appo --task go2_joystick_flat --sim mujoco \
algo.num_envs=2048 \
algo.max_iterations=300 \
training.replay_queue_size=2
回放与检查点选择使用 uv run eval:
uv run eval --algo appo --task go2_joystick_flat --sim mujoco --load-run -1
运行模型¶
collector 负责 CPU 仿真,learner 负责 GPU 训练。
rollout 会先进入 replay queue,再由 learner 消费。
APPO 内部带 V-trace importance-sampling 修正,更新语义不同于同步 PPO。
collector / learner 流水线由一个 4 槽 ring buffer 支撑。
单次迭代的计时时序(各指标含义见日志页):
gantt
title 一次 Learner 迭代的时间线(APPO)
dateFormat x
axisFormat %S
section Collector(进程)
rollout N · env interaction(mlp_infer + env_step)×steps_per_env :active, c0, 0, 12000
rollout N+1(与 learner 并行采集) :active, c1, 13000, 30000
section Ring Buffer(4 槽)
rollout N 就绪 :milestone, r0, 12000, 12000
rollout N+1 就绪 :milestone, r1, 30000, 30000
section Learner(GPU)
Collector Wait(缓冲满则约 0) :done, l0, 12000, 13000
Replay Stage(ring 进 staging) : l1, 13000, 15500
Replay Sample(组合 batch view) : l2, 15500, 16000
Train(V-trace + PPO SGD) :active, l3, 16000, 28000
Weight Publish 写回 collector :crit, l4, 28000, 30000
section Iter Wall
perf/iter_ms(仅 learner 这圈) : l5, 12000, 30000
横轴为示意相对时长(非真实 ms 比例)。collector 子进程经 4 槽 ring buffer 与 learner 并行产出 rollout,稳态下 Collector Wait ≈ 0。
perf/iter_ms仅计 learner 这一圈(含 Collector Wait,但不含 collector 的并行采集计算);红色 Weight Publish 标志该轮迭代结束、向 collector 发布新权重。各字段含义见日志页。
关键字段¶
algo.steps_per_env:单个环境的 rollout 长度。training.replay_queue_size:learner 侧缓存深度。training.collector_device:collector 设备;默认跟随 learner。algo.save_interval:checkpoint 保存间隔。
默认日志根目录为 logs/appo/<task>/,来自 src/unilab/conf/appo/config.yaml 中的
algo.algo_log_name=appo。