引言
近年来,强化学习(Reinforcement Learning, RL)在机器人、游戏、自动驾驶等领域取得了令人瞩目的突破。随着算法复杂度的提升和应用场景的多样化,高质量、易用且灵活的开源 RL 库 成为研究人员和开发者不可或缺的工具。
今天我们要介绍的 skrl 是一个较新的开源强化学习库,它由 Mondragon Unibertsitatea 和 Aalborg University 的研究团队开发,专注于可读性、模块化和透明性。本文基于该团队发表的论文《skrl: Modular and Flexible Library for Reinforcement Learning》,带你深入解析 skrl 的设计哲学、核心特性及其在实际环境中的表现。
一、为什么需要 skrl?
在 skrl 出现之前,已经存在大量优秀的 RL 库,如 Stable-Baselines3、RLlib、CleanRL、Tonic 等。然而,作者指出现有库普遍存在以下几点不足:
- 模块化不足:许多库虽然提供组件,但继承层次复杂、命名不一致,难以灵活组合。
- 可读性差:高性能库(如 RLlib)为了分布式执行封装过深,新手或研究者难以理解代码细节,复现结果困难。
- 对新仿真平台支持有限 :NVIDIA 推出的 Isaac Gym 和 Omniverse Isaac Gym 基于 GPU 并行仿真,支持数千个环境同时运行。大多数现有库未原生支持这些平台,或仅支持旧版本。
- 并行学习能力受限 :虽然支持多环境并行,但 多智能体/多策略 在同一运行中按不同环境子集同时训练的功能较为欠缺。
skrl 正是为解决上述问题而设计。
二、skrl 的核心设计理念
skrl 的设计围绕四个核心原则展开:
- 模块化:每个组件(环境、记忆、模型、噪声、学习率调度器、智能体、训练器)独立且可互换,便于构建复杂系统。
- 可读性与透明性:算法实现清晰、注释完整,每个文件专注于单一功能,减少黑盒封装。
- 多接口支持:统一封装 OpenAI Gym、DeepMind 环境接口,并原生支持 Isaac Gym(preview 2~4)和 Omniverse Isaac Gym。
- 范围(Scope)并行训练:在同一运行中,可将全部并行环境划分为多个子集,每个子集由一个独立的智能体控制,实现多智能体或多超参的同步对比。
三、架构与组件详解
skrl 的文件组织结构清晰,共分为 7 大组件 + 实用工具:
| 组件 | 功能 | 示例 |
|---|---|---|
envs |
环境加载器与封装器 | OpenAI Gym、DeepMind、Isaac Gym 的统一封装 |
memories |
存储经验数据 | 可作 rollout buffer 或 experience replay |
models |
构建神经网络模型的辅助类 | 不提供固定策略类,用户自己定义网络结构 |
noises |
探索阶段用的噪声 | 高斯噪声、OU 噪声等 |
learning rate schedulers |
自定义学习率调度 | 阶梯衰减、余弦退火等 |
agents |
RL 算法的实现(_update 函数) |
PPO、SAC、TD3、DQN、DDPG、TRPO 等 |
trainers |
管理智能体与环境的交互循环 | 支持同步并行训练 |
亮点:模型组件的设计哲学
在其他库中,常常预定义 Policy 类,封装了网络结构和动作采样逻辑。skrl 却刻意不提供固定的策略类,而是提供构建连续/离散策略的辅助函数。这样用户的自由度更高,不会被库的设计限制。研究人员可以完全控制网络输入输出,易于调试和定制。
亮点:Wrapper 接口统一
skrl 将所有环境封装为统一的接口,基于 OpenAI Gym 的 step() / reset() 模式,并增加了两个重要属性:
num_envs:并行环境的数量device:仿真运行的设备(CPU / GPU)
这使得训练器可以无差别地处理不同来源的环境。
四、特色功能:Isaac Gym 与 Omniverse Isaac Gym 的深度集成
Isaac Gym 是 NVIDIA 推出的 GPU 加速物理仿真平台,可同时运行数万个环境,大幅提升训练效率。skrl 对 Isaac Gym 的支持是其主要卖点之一:
- 提供一行代码加载 Isaac Gym 环境的功能,自动处理命令行参数或字典配置。
- 完整支持 preview 2、3、4 以及 Omniverse Isaac Gym,而不仅仅是某个旧版本。
- 与 Isaac Gym 内置的
rl_pytorch以及rl_games库相比,skrl 更注重代码的可读性和灵活定制。
范围 (Scope) 训练:同一时间多智能体并行
这是 skrl 独有的强大特性。假设我们在一台 GPU 上运行 512 个并行的 CartPole 环境。传统做法是一个智能体控制全部 512 个环境。但在 skrl 中,我们可以这样做:
- 将 512 个环境划分为三个范围:
- 范围 0:环境 0~169 → 由 DDPG 智能体控制
- 范围 1:环境 170~339 → 由 TD3 智能体控制
- 范围 2:环境 340~511 → 由 SAC 智能体控制
在每个时间步,训练器收集各智能体的动作,合并成单个动作向量发送给仿真器;仿真返回后,再按范围拆分观测、奖励和终止信号,分别传递给对应智能体进行更新。
应用场景:
- 在同一环境中对比多个算法的效果(消除随机种子差异)
- 同时调试不同的超参数组合
- 让不同智能体共享内存(如共用一个经验池)以提升学习效率(论文实验表明共享内存可以改善性能平衡)
五、性能评估
论文作者在多个环境上进行了对比实验,评估 skrl 的训练效率和最终性能。
5.1 OpenAI Gym 倒立摆 (Pendulum-v0)
对比库:stable-baselines3 、RLlib 、skrl
算法:DDPG、TD3、SAC
结果:
- 三个库的平均奖励曲线非常接近,说明 skrl 实现的算法性能可靠。
- 训练速度 (时间步/秒):
- stable-baselines3:DDPG 140, TD3 145, SAC 77
- skrl:DDPG 135, TD3 145, SAC 70
- RLlib(单 worker):DDPG 44, TD3 39, SAC 22
skrl 的速度与 stable-baselines3 相当,而 RLlib 因其设计开销较大明显较慢。
5.2 Isaac Gym 环境(CartPole 和 Ant)
对比库:rl_pytorch (Isaac Gym 自带示例)、rl_games 、skrl
环境:
- CartPole:Isaac Gym preview 4 / Omniverse Isaac Gym,512 个并行环境
- Ant:Isaac Gym preview 2/3,1024 个并行环境
结果:
- 所有库在最终奖励和训练时间上表现接近(CartPole 约 105 步/秒,Ant 约 45 步/秒)。
- skrl 能够统一支持所有预览版本,而 rl_pytorch 仅适用于特定版本。
5.3 范围并行训练实验
在 512 环境的 CartPole 中,分别训练三个智能体(DDPG、TD3、SAC),每个控制不同数量的环境(170, 170, 172)。
- 不共享记忆:各智能体独立收集经验,性能表现一般。
- 共享记忆:三个智能体共用一个经验池,性能更优且曲线更平衡(见论文图 8)。这说明资源共享有助于提升整体学习效果,尤其适合多策略比较场景。
六、与其他主流 RL 库的对比
| 特性 | skrl | Stable-Baselines3 | RLlib | CleanRL |
|---|---|---|---|---|
| 模块化 | ✅ 高 | 中 | 高(但复杂) | 低(单文件) |
| 可读性 | ✅ 高 | 高 | 低 | 极高 |
| Isaac Gym 支持 | ✅ 全版本 | ❌ | ❌ | ❌ |
| 范围并行训练 | ✅ 原生 | ❌ | 部分(多 worker) | ❌ |
| 算法数量 | 10+ | 10+ | 多 | 10+ |
| 内存共享跨智能体 | ✅ | ❌ | ❌ | ❌ |
skrl 在 仿真平台支持 和 多智能体范围训练 方面独具优势,同时保持了优秀的代码可读性。
七、文档与生态
skrl 的官方文档托管在 Read the Docs,包含:
- 详细安装指南
- 每个类的 API 说明(参数、返回值)
- 算法的数学描述与实现细节
- 代码片段与完整用例
- TensorBoard 日志可视化支持
此外,skrl 还提供了实用工具,例如:
- 加载和导出 memory 文件
- 快速构建神经网络模型
- 在 Isaac Gym 中计算机械臂逆运动学
八、总结与展望
skrl 是一个值得关注的开源强化学习库,它的亮点包括:
- 清晰、模块化的代码结构,降低了学习和二次开发的门槛。
- 对 NVIDIA Isaac Gym 的全版本支持,让 GPU 加速仿真 RL 触手可及。
- 独特的范围并行训练机制,支持在同一运行中比较多个算法或超参数,甚至可以共享经验池。
- 性能不妥协:在标准环境和 Isaac Gym 上均达到与主流库相当或更优的效率。
未来,作者计划加入更多算法和组件,进一步丰富库的功能。
如果你是强化学习的研究者或工程师,尤其是在机器人仿真训练领域,skrl 很可能成为你的得力工具。
👉 项目地址 :https://github.com/Toni-SM/skrl