CleanRL PPO-Atari-LSTM 运行时间基准:Runtimes 数据解读与复现指南

发布时间:2026/9/15 15:03:26
CleanRL PPO-Atari-LSTM 运行时间基准:Runtimes 数据解读与复现指南 CleanRL PPO-Atari-LSTM 运行时间基准Runtimes 数据解读与复现指南【免费下载链接】cleanrlHigh-quality single file implementation of Deep Reinforcement Learning algorithms with research-friendly features (PPO, DQN, C51, DDPG, TD3, SAC, PPG)项目地址: https://gitcode.com/GitHub_Trending/cl/cleanrlPPO-Atari-LSTM 是 CleanRL 在 Atari 环境中引入循环状态LSTM的 PPO 变体实现本文聚焦docs/benchmark/ppo_atari_lstm_runtimes.md记录的运行时间runtimes基准数据结合仓库中的benchmark/ppo.sh复现脚本与cleanrl/ppo_atari_lstm.py源码逐项解读三个 Atari 环境的耗时表现、与标准 PPO-Atari 及 EnvPool 加速版本的横向对比并给出可落地的本地复现方法。读完本文你将能看懂 CleanRL 基准页中的 runtimes 表格含义并能在自己的 GPU 环境上跑出可对照的耗时数据。运行时间基准数据总览docs/benchmark/ppo_atari_lstm_runtimes.md记录的是 PPO-Atari-LSTM 在三个经典 Atari 环境上的运行时间基准数据来源于 openrlbenchmark 仓库的openrlbenchmark/cleanrl/ppo_atari_lstm数据集标签为pr-424环境 IDPPO-Atari-LSTM 运行时间pr-424PongNoFrameskip-v4317.607BeamRiderNoFrameskip-v4314.864BreakoutNoFrameskip-v4383.724可以从数据中读出两个直接规律三个环境的运行时间数值非常接近314.864 ~ 383.724说明在相同的训练配置默认total-timesteps10000000见下文源码分析下LSTM 版本的训练耗时对不同游戏画面内容并不敏感主要开销集中在固定的神经网络前向/反向与 LSTM 时序展开上BreakoutNoFrameskip-v4 是三者中耗时最高的一个383.724较最低的 BeamRiderNoFrameskip-v4 高出约 22%这与 Breakout 画面复杂度更高、有效帧更多有关。需要说明的是原文档为自动生成的基准数据页未注明该指标的具体计量单位与统计口径该数值与训练吞吐/耗时相关具体口径以 openrlbenchmark 的数据约定为准。因此本文聚焦于数值本身与各版本之间的相对对比关系不做单位层面的臆断。与标准 PPO-Atari 的对比循环状态带来的额外开销docs/benchmark/ppo_atari_runtimes.md记录了同标签pr-424下标准 PPO-AtariCNN 前馈网络无 LSTM的运行时间环境 IDPPO-Atari 运行时间pr-424PongNoFrameskip-v4281.071BeamRiderNoFrameskip-v4284.941BreakoutNoFrameskip-v4264.077将两张表放在一起对比环境 IDPPO-AtariPPO-Atari-LSTM差异LSTM 相对开销PongNoFrameskip-v4281.071317.60713.0%BeamRiderNoFrameskip-v4284.941314.86410.5%BreakoutNoFrameskip-v4264.077383.72445.3%这组对比清晰地量化了LSTM 循环结构带来的计算代价在 Pong、BeamRider 上约 10%~13% 的额外耗时而在 Breakout 上达到约 45%。从 cleanrl/ppo_atari_lstm.py 的get_states实现可以找到原因——每一时间步都需要将 CNN 提取的特征按 batch 维度 reshape 后送入nn.LSTM进行时序展开并维护隐藏态与细胞态这部分串行递归计算在帧率高、画面变化快的环境下占比被放大。与 EnvPool 加速版本的对比向量化环境带来的差距仓库还提供了基于 EnvPool 向量化环境的运行时间基准记录于 docs/benchmark/ppo_atari_envpool_runtimes.md。注意该基准使用的是-v5系列环境如Pong-v5与-v4系列不能完全等同但横向数值仍然有参考意义环境 IDPPO-Atari-EnvPoolpr-424PPO-Ataripr-424Pong-v5178.375281.071BeamRider-v5182.944284.941Breakout-v5151.384264.077EnvPool 版本在三项上均比标准版低了约 35%~43%说明环境采样与包装开销在标准 Gym 版本中占据了相当比重。这也是 CleanRL 在 docs/benchmark/ppo_atari_envpool.md 中单独维护 EnvPool 基准的原因——吞吐优化是 Atari 训练提效的重要方向。如何在本地复现该运行时间基准docs/benchmark/ppo_atari_lstm_runtimes.md本身没有给出复现步骤但其数据对应的可复现命令完整保存在 benchmark/ppo.sh 中uv pip install .[atari] OMP_NUM_THREADS1 xvfb-run -a uv run python -m cleanrl_utils.benchmark \ --env-ids PongNoFrameskip-v4 BeamRiderNoFrameskip-v4 BreakoutNoFrameskip-v4 \ --command uv run python cleanrl/ppo_atari_lstm.py --track --capture_video \ --num-seeds 3 \ --workers 9 \ --slurm-gpus-per-task 1 \ --slurm-ntasks 1 \ --slurm-total-cpus 10 \ --slurm-template-path benchmark/cleanrl_1gpu.slurm_template各参数含义如下参数定义见 cleanrl_utils/benchmark.py 的Args--env-ids待测环境 ID 列表逐环境生成训练任务--command实际执行的训练命令模板cleanrl_utils.benchmark会为每个环境与每个 seed 追加--env-id env --seed n见 benchmark.py--num-seeds 3每个环境运行 3 个随机种子start-seed默认从 1 开始--workers 9并发 worker 数当与--slurm-template-path同时使用时控制 SLURM 任务数组的并发上限模板中替换为0-{N}%{workers}见 benchmark.py--slurm-gpus-per-task 1/--slurm-ntasks 1/--slurm-total-cpus 10SLURM 单任务 GPU 数、任务数、每任务 CPU 数共同决定cpus-per-gpu的分配见 benchmark.py--slurm-template-path benchmark/cleanrl_1gpu.slurm_template单 GPU SLURM 任务模板文件模板内的{{array}}、{{command}}、{{gpus_per_task}}等占位符由 benchmark 工具自动替换。复现前提说明依赖安装使用uv pip install .[atari]对应依赖清单见 requirements/requirements-atari.txtxvfb-run -a用于在无显示环境下为--capture_video提供虚拟屏幕若本机没有 SLURM可将--slurm-template-path去掉并将--workers设为大于 0 的正整数benchmark 工具会退化为本地线程池并发执行见 benchmark.py此时仅打印所有待运行命令而不真正调度。源码级支撑ppo_atari_lstm.py 的关键设计核心超参数运行时间基准的默认配置定义在 cleanrl/ppo_atari_lstm.py 的Args数据类中与基准数据直接相关的关键项参数默认值作用env_idBreakoutNoFrameskip-v4环境 ID基准中逐环境替换total_timesteps10000000总训练步数直接决定单个任务的总耗时num_envs8并行环境数影响吞吐num_steps128每轮 rollout 的步数learning_rate2.5e-4优化器学习率默认随进度线性退火num_minibatches4mini-batch 切分数batch_size/minibatch_size/num_iterations运行时计算由num_envs * num_steps、batch_size // num_minibatches、total_timesteps // batch_size推出见 ppo_atari_lstm.py据此可算出batch_size 8 × 128 1024minibatch_size 256num_iterations 10000000 // 1024 ≈ 9765。训练主循环对每个 iteration 执行 128 步 rolloutglobal_step每步累加num_envs见 ppo_atari_lstm.py并通过start_time统计墙钟时间。LSTM 状态管理与标准 PPO-Atari 的关键差异在于循环状态的处理初始化时维护next_lstm_state形状为(num_layers, num_envs, hidden_size)的隐藏态与细胞态二元组见 ppo_atari_lstm.py每个 iteration 开始时克隆initial_lstm_state保证时序逻辑从头展开每个环境 step 内通过get_states将 CNN 特征 reshape 为(seq, batch, input_size)送入 LSTM并按done掩码重置已终止序列的状态见 ppo_atari_lstm.py。这种按帧串行调用 LSTM 的方式正是该版本相比前馈版本耗时更高的直接原因也为上文runtimes表中约 10%~45% 的开销提供了实现层面的解释。运行时间基准的注意事项与延伸阅读指标口径原文档是数据页未给出单位说明引用时建议同时注明来源标签pr-424不要直接与其他数据集的数值混用训练结果对照运行时间之外同标签下的训练回报returns记录在 docs/benchmark/ppo_atari_lstm.mdPongNoFrameskip-v4 为19.81 ± 0.62BeamRiderNoFrameskip-v4 为1299.25 ± 509.90BreakoutNoFrameskip-v4 为113.42 ± 5.85。评估吞吐的同时应结合回报判断算法质量算法训练曲线PPO-Atari-LSTM 在三个环境上的训练曲线可参考 docs/rl-algorithms/ppo/lstm/ 目录 下的图片与 docs/rl-algorithms/ppo/lstm 页面说明。多环境横向对比若要进一步了解 EnvPool / JAX 等更高吞吐版本可继续阅读 docs/benchmark/ppo_atari_envpool.md 与其 runtimes 数据 docs/benchmark/ppo_atari_envpool_runtimes.md。综上docs/benchmark/ppo_atari_lstm_runtimes.md虽然只是一张精简的数据表但结合 benchmark/ppo.sh 的复现命令与 cleanrl/ppo_atari_lstm.py 的源码实现即可将其解读为一条完整、可验证的 PPO-Atari-LSTM 性能基线LSTM 在带来时序记忆能力如 Breakout 上 113.42 的回报的同时也付出了约 10%~45% 的运行时间代价这一代价可以通过 EnvPool 等向量化采样方案部分对冲。【免费下载链接】cleanrlHigh-quality single file implementation of Deep Reinforcement Learning algorithms with research-friendly features (PPO, DQN, C51, DDPG, TD3, SAC, PPG)项目地址: https://gitcode.com/GitHub_Trending/cl/cleanrl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考