Agent Skills
返回列表
TorchRL PPO 训练实践

TorchRL PPO 训练实践

开发编程 更新于 2026.08.29

将以下提示词粘贴到你的 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 教学实现