TorchRL PPO 训练实践
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_095bfc26/torchrl-ppo。
技能介绍
要解决什么问题
手写 PPO 时,clipped surrogate loss、log-prob 比值、rollout buffer 和 GAE 很容易在细节里出错,而且观测、动作、奖励若散落在 Python 列表里,训练循环也难维护。本技能的核心立场是:优先用 TorchRL 原语拼管线,除非用户明确要求「从零实现」的教学版,否则不要重复造轮子。
技能如何组织 PPO
模块之间通过 TensorDict 传递数据,需显式声明 in_keys / out_keys(通常读 observation,写出分布参数、action 与 sample_log_prob)。标准训练链路大致为:
- 用
GymEnv等包装器 +TransformedEnv(Compose(...))处理观测(连续控制可配合ObservationNorm,小离散环境常用DoubleToFloat()、StepCounter()) - 策略侧:
TensorDictModule→ 连续动作TanhNormal(loc, scale),离散动作OneHotCategorical(logits),再包成ProbabilisticActor(..., return_log_prob=True) - 价值侧:
ValueOperator作为 critic - 数据:
SyncDataCollector采集;每批 on-policy 用ReplayBuffer+LazyTensorStorage+SamplerWithoutReplacement;GAE算优势后喂给ClipPPOLoss - 外层以 collector 为循环;每个 PPO epoch 重算 advantage(critic 在优化中会变)
边界与注意点
- 安装版本可能与旧教程参数名不一致(如
entropy_coef/critic_coef);不确定时用inspect.signature(ClipPPOLoss)、inspect.signature(TanhNormal)核对 - 入 buffer 前对 rollout 做
.reshape(-1);minibatch 用.to(device)回到训练设备 - 改环境或 transform 后调用
check_env_specs(env);构造 actor 时用 env 的action_spec - Gym 步进在 CPU 上,即使用 GPU 存 tensor;长跑脚本记得关闭 collector / 环境
使用场景
- 在 Gym 或自定义仿真环境里搭 PPO 训练脚本,希望用 ClipPPOLoss 和 GAE 而不是手写 clipped surrogate 与 advantage 循环
- 连续控制任务需要 TanhNormal 策略、ObservationNorm 与 ValueOperator,并保证 rollout 全程走 TensorDict 的 in_keys/out_keys
- 离散动作环境(如 CartPole)要用 OneHotCategorical 与 ProbabilisticActor 的 sample_log_prob,配合 SyncDataCollector 做 on-policy 采集
- 从旧教程迁移 PPO 时参数名对不上(entropy_coef 等),需要按当前 TorchRL 签名重组 Collector、ReplayBuffer 与训练 epoch
适合人员
- 在仿真平台里做策略梯度实验的机器学习工程师,需要可维护的 on-policy 管线而非 scattered Python 列表
- 研究新环境 sample efficiency 的强化学习研究者,希望快速用 TransformedEnv 与 check_env_specs 验证 action/observation 规格
- 做机器人或控制仿真的工程师,要在 CPU Gym 步进与 GPU 训练设备之间正确 reshape buffer 并每 epoch 重算 GAE
- 带学生或同事做 PPO 项目的技术负责人,默认走 TorchRL 原语组合,仅在明确要求时才写 from-scratch 教学实现