Project Icon

sheeprl

基于PyTorch的强化学习框架支持多种算法和环境

SheepRL是一个基于PyTorch和Lightning Fabric的强化学习框架。它支持PPO、SAC、Dreamer等多种算法,以及Atari、MuJoCo、Minecraft等多种环境。该框架易用可扩展,实现了算法与环境的解耦,适用于广泛的强化学习任务。在部分基准测试中,SheepRL展现出与其他框架相当甚至更优的性能,为强化学习研究和开发提供了高效工具。

⚡ SheepRL 🐑

Python 3.8 Python 3.9 Python 3.10 Python 3.11

环境总帧数训练时间测试奖励论文奖励GPU
Crafter1M1天3小时12.111.71-V100
Atari-吃豆人100K14小时154213271-3080
Atari-拳击100K14小时84781-3080
DOA++(无优化)17M18天22小时2726/33282不适用1-3080
Minecraft-导航(无优化)8M16天4小时27% >= 70
14% >= 100
不适用1-V100
  1. 比较:1M帧在优化前需2天7小时,优化后需1天5小时
  2. DIAMBRA排行榜最高分(2023年11月7日)

基准测试

我们的实现与Stable Baselines3的训练时间对比如下:

SheepRL v0.4.0SheepRL v0.4.9SheepRL v0.5.2
(Numpy缓冲区)
SheepRL v0.5.5
(Numpy缓冲区)
StableBaselines31
PPO1个设备192.31秒 ± 1.11138.3秒 ± 0.1680.81秒 ± 0.6881.27秒 ± 0.4777.21秒 ± 0.36
2个设备85.42秒 ± 2.2759.53秒 ± 0.7846.09秒 ± 0.5936.88秒 ± 0.30无数据
A2C1个设备无数据无数据无数据84.76秒 ± 0.3784.22秒 ± 0.99
2个设备无数据无数据无数据28.95秒 ± 0.75无数据
SAC1个设备421.37秒 ± 5.27363.74秒 ± 3.44318.06秒 ± 4.46320.21 ± 6.29336.06秒 ± 12.26
2个设备264.29秒 ± 1.81238.88秒 ± 4.97210.07秒 ± 27225.95 ± 3.65无数据
Dreamer V11个设备4201.23秒无数据2921.38秒2207.13秒无数据
Dreamer V21个设备1874.62秒无数据1148.1秒906.42秒无数据
Dreamer V31个设备2022.99秒无数据1378.01秒1589.30秒无数据

[!注意]

所有实验都在Lightning Studio上使用4个CPU运行。 除了Dreamers的基准测试外,所有基准测试都运行了5次,我们取了运行的平均值和标准差。 我们禁用了测试功能、日志记录和检查点。此外,模型未使用MLFlow进行注册。

Dreamers的基准测试运行了1次,包括日志记录和检查点,但没有运行测试功能。

  1. StableBaselines3的版本是v2.2.1,请使用pip install stable-baselines3==2.2.1安装该包

内容

一个基于PyTorch的易用型强化学习框架,由Lightning Fabric加速。 sheeprl现成提供的算法包括:

算法耦合解耦循环向量观测像素观测状态
A2C:heavy_check_mark::x::x::heavy_check_mark::x::heavy_check_mark:
A3C:heavy_check_mark::x::x::heavy_check_mark::x::construction:
PPO:heavy_check_mark::heavy_check_mark::x::heavy_check_mark::heavy_check_mark::heavy_check_mark:
PPO循环:heavy_check_mark::x::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
SAC:heavy_check_mark::heavy_check_mark::x::heavy_check_mark::x::heavy_check_mark:
SAC-AE:heavy_check_mark::x::x::heavy_check_mark::heavy_check_mark::heavy_check_mark:
DroQ:heavy_check_mark::x::x::heavy_check_mark::x::heavy_check_mark:
Dreamer-V1:heavy_check_mark::x::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Dreamer-V2:heavy_check_mark::x::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Dreamer-V3:heavy_check_mark::x::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Plan2Explore (Dreamer V1):heavy_check_mark::x::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Plan2Explore (Dreamer V2):heavy_check_mark::x::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:
Plan2Explore (Dreamer V3):heavy_check_mark::x::heavy_check_mark::heavy_check_mark::heavy_check_mark::heavy_check_mark:

更多算法即将推出!如果您有任何特殊要求,请提交PR :sheep: sheeprl代理支持的动作类型如下:

算法连续离散多离散
A2C:heavy_check_mark::heavy_check_mark::heavy_check_mark:
A3C:heavy_check_mark::heavy_check_mark::heavy_check_mark:
PPO:heavy_check_mark::heavy_check_mark::heavy_check_mark:
PPO循环:heavy_check_mark::heavy_check_mark::heavy_check_mark:
SAC:heavy_check_mark::x::x:
SAC-AE:heavy_check_mark::x::x:
DroQ:heavy_check_mark::x::x:
Dreamer-V1:heavy_check_mark::heavy_check_mark::heavy_check_mark:
Dreamer-V2:heavy_check_mark::heavy_check_mark::heavy_check_mark:
Dreamer-V3:heavy_check_mark::heavy_check_mark::heavy_check_mark:
Plan2Explore (Dreamer V1):heavy_check_mark::heavy_check_mark::heavy_check_mark:
Plan2Explore (Dreamer V2):heavy_check_mark::heavy_check_mark::heavy_check_mark:
Plan2Explore (Dreamer V3):heavy_check_mark::heavy_check_mark::heavy_check_mark:

sheeprl支持的环境如下:

环境安装命令更多信息状态
经典控制pip install sheeprl:heavy_check_mark:
Box2Dpip install sheeprl[box2d]请先使用 pip install swig 安装 swig:heavy_check_mark:
Mujoco (Gymnasium)pip install sheeprl[mujoco]how_to/mujoco:heavy_check_mark:
Ataripip install sheeprl[atari]how_to/atari:heavy_check_mark:
DeepMind Controlpip install sheeprl[dmc]how_to/dmc:heavy_check_mark:
MineRLpip install sheeprl[minerl]how_to/minerl:heavy_check_mark:
MineDojopip install sheeprl[minedojo]how_to/minedojo:heavy_check_mark:
DIAMBRApip install sheeprl[diambra]how_to/diambra:heavy_check_mark:
Crafterpip install sheeprl[crafter]https://github.com/danijar/crafter:heavy_check_mark:
超级马里奥兄弟pip install sheeprl[supermario]https://github.com/Kautenja/gym-super-mario-bros/tree/master:heavy_check_mark:

为什么

我们希望提供一个既简单又可扩展的强化学习算法框架,这要归功于Lightning Fabric。

此外,在许多强化学习代码库中,强化学习算法与环境紧密耦合,这使得将它们扩展到gym接口之外变得更加困难。我们希望提供一个框架,允许轻松地将强化学习算法与环境解耦,从而可以与任何环境一起使用。

如何使用

安装

安装SheepRL有三种选择

  1. 直接从PyPi索引安装最新版本
  2. 克隆仓库并安装本地版本
  3. 使用GitHub克隆URL通过pip安装框架

以下是三种方法的说明。

从PyPi安装SheepRL

你可以通过以下命令安装SheepRL的最新版本

pip install sheeprl

[!注意]

要安装可选依赖项,可以运行例如 pip install sheeprl[atari,box2d,dev,mujoco,test]

有关可以安装的所有可选依赖项的详细信息,请查看What部分

克隆并安装本地版本

首先,使用以下命令克隆仓库:

git clone https://github.com/Eclectic-Sheep/sheeprl.git
cd sheeprl

在新创建的文件夹内运行

pip install .

[!注意]

要安装可选依赖项,可以运行例如 pip install .[atari,box2d,dev,mujoco,test]

从GitHub仓库安装框架

如果你还没有这样做,请使用venv或conda创建一个环境。

示例将使用Python标准的venv模块,并假设使用macOS或Linux。

# 创建虚拟环境
python3 -m venv .venv

# 激活环境
source .venv/bin/activate

# 如果你不想安装额外的内容,如mujuco、atari,请执行
pip install "sheeprl @ git+https://github.com/Eclectic-Sheep/sheeprl.git"

# 或者,要安装支持atari和mujuco环境,请执行
pip install "sheeprl[atari,mujoco,dev] @ git+https://github.com/Eclectic-Sheep/sheeprl.git"

# 或者,要安装支持box2d环境,请执行
pip install swig
pip install "sheeprl[box2d] @ git+https://github.com/Eclectic-Sheep/sheeprl.git"

# 或者,要安装支持minedojo环境,请执行
pip install "sheeprl[minedojo,dev] @ git+https://github.com/Eclectic-Sheep/sheeprl.git"

# 或者,要安装支持minerl环境,请执行
pip install "sheeprl[minerl,dev] @ git+https://github.com/Eclectic-Sheep/sheeprl.git"

# 或者,要安装支持diambra环境,请执行
pip install "sheeprl[diambra,dev] @ git+https://github.com/Eclectic-Sheep/sheeprl.git"

# 或者,要安装支持超级马里奥兄弟环境,请执行
pip install "sheeprl[supermario,dev] @ git+https://github.com/Eclectic-Sheep/sheeprl.git"

# 或者,要安装所有额外内容,请执行
pip install swig
pip install "sheeprl[box2d,atari,mujoco,minerl,supermario,dev,test] @ git+https://github.com/Eclectic-Sheep/sheeprl.git"

额外说明:在M系列Mac上安装

[!警告]

如果你使用的是M系列Mac,并在安装过程中遇到归因于box2dpy的错误,你需要按照下面的说明安装SWIG。

建议使用homebrew安装SWIG以支持Gym

# 如果需要,安装homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 然后执行
brew install swig

# 然后尝试使用首选方法进行pip安装,例如
pip install "sheeprl[atari,box2d,mujoco,dev,test] @ git+https://github.com/Eclectic-Sheep/sheeprl.git"

额外说明:MineRL和MineDojo

[!注意]

如果你想安装minedojominerl环境支持,需要Java JDK 8:你可以按照此链接的说明进行安装。 [!注意]

MineRLMineDojo 环境的要求存在冲突,因此请勿使用 pip install sheeprl[minerl,minedojo] 命令同时安装它们,而是在运行 MineRL 或 MineDojo 环境的实验之前,分别使用 pip install sheeprl[minerl]pip install sheeprl[minedojo] 命令单独安装

使用 SheepRL 运行实验

现在你可以使用已有的算法之一,或创建自己的算法。 例如,要在 CartPole 环境中训练一个只使用向量类观察的 PPO 代理,只需运行

python sheeprl.py exp=ppo env=gym env.id=CartPole-v1

如果你是从克隆的仓库安装的,或者

sheeprl exp=ppo env=gym env.id=CartPole-v1

如果你是从 PyPi 安装的 SheepRL。

同样,你可以通过以下命令查看所有可用的算法

python sheeprl/available_agents.py

如果你是从克隆的仓库安装的,或者

sheeprl-agents

如果你是从 PyPi 安装的 SheepRL。

使用 SheepRL 训练代理就是这么简单!🎉

在开始使用 SheepRL 框架之前,强烈建议你阅读以下说明文档:

  1. 如何运行实验
  2. 如何修改默认配置
  3. 如何处理步骤
  4. 如何选择观察

此外,howto 文件夹中还有其他有用的文档,这些文档包含了如何正确使用该框架的一些指导。

:chart_with_upwards_trend: 检查你的结果

一旦你训练了一个代理,将会创建一个名为 logs 的新文件夹,其中包含训练的日志。你可以使用 TensorBoard 来可视化它们:

tensorboard --logdir logs

https://github.com/Eclectic-Sheep/sheeprl/assets/7341604/46ad4acd-180d-449d-b46a-25b4a1f038d9

:nerd_face: 更多关于运行算法的信息

你运行的是使用默认配置的 PPO 算法。但你也可以通过向脚本传递参数来更改配置。

例如,在默认配置中,并行环境的数量是 4。让我们尝试通过传递 --num_envs 参数将其更改为 8:

sheeprl exp=ppo env=gym env.id=CartPole-v1 env.num_envs=8

所有可用的参数及其描述都列在 sheeprl/config 目录中。你可以在这里找到更多关于配置层次结构的信息。

使用 Lightning Fabric 运行

要使用 Lightning Fabric 运行算法,你需要通过 CLI 指定 Fabric 参数。例如,要在 2 个节点上使用 4 个并行环境运行 PPO 算法,你可以运行:

sheeprl fabric.accelerator=cpu fabric.strategy=ddp fabric.devices=2 exp=ppo env=gym env.id=CartPole-v1

你可以在这里查看 Lightning Fabric 的可用参数。

评估你的代理

你可以轻松地从检查点评估训练好的代理:训练配置会自动检索。

sheeprl-eval checkpoint_path=/path/to/checkpoint.ckpt fabric.accelerator=gpu env.capture_video=True

有关更多信息,请查看相应的使用说明

:book: 仓库结构

仓库的结构如下:

  • algos:包含算法的实现。每个算法都在一个单独的文件夹中,并(可能)包含以下文件:

    • <algorithm>.py:包含算法的实现。
    • <algorithm>_decoupled.py:包含算法的解耦版本的实现(如果存在)。
    • agent:可选,包含代理的实现。
    • loss.py:包含算法的损失函数的实现。
    • utils.py:包含算法的实用函数。
  • configs:包含算法的默认配置。

  • data:包含数据缓冲区的实现。

  • envs:包含环境包装器的实现。

  • models:包含一些标准模型(构建块)的实现,如多层感知器(MLP)或简单的卷积网络(NatureCNN)

  • utils:包含框架的实用函数。

耦合与解耦

在算法的耦合版本中,代理与环境交互并执行训练循环。

在解耦版本中,一个进程只负责与环境交互,所有其他进程负责执行训练循环。两个进程通过分布式集体,采用 Fabric 的 TorchCollective 提供的抽象进行通信。

耦合

算法在 <algorithm>.py 文件中实现。

这个脚本中有 2 个函数:

  • main():初始化算法的所有组件,并执行与环境的交互。一旦收集了足够的数据,就通过调用 train() 函数执行训练循环。
  • train():执行训练循环。它从缓冲区采样一批数据,计算损失,并更新代理的参数。

解耦

算法的解耦版本在 <algorithm>_decoupled.py 文件中实现。

这个脚本中有 3 个函数:

  • main():初始化算法的所有组件,玩家和训练器之间通信的集体,并调用 player()trainer() 函数。
  • player():执行与环境的交互。它从策略网络采样一个动作,在环境中执行它,并将转换存储在缓冲区中。在与环境进行预定义次数的交互后,玩家将收集的数据随机分成几乎相等的块,并分别发送给训练器。然后等待训练器完成代理更新。
  • trainer():执行训练循环。它从玩家接收一块数据,计算损失,并更新代理的参数。代理更新后,第一个训练器将更新后的代理权重发送回玩家,玩家可以再次与环境交互。

算法实现

你可以查看每个算法文件夹中的 README.md 文件,了解实现的详细信息。

所有算法都尽可能保持简单,采用 CleanRL 的风格。但为了提高灵活性和清晰度,我们尝试抽象出与算法训练循环不直接相关的任何内容。

例如,我们决定创建一个 models 文件夹,其中包含已经制作好的模型,可以组合起来创建代理的模型。

对于每个算法,损失函数都保存在单独的模块中,以便它们的实现清晰,并且可以轻松用于算法的解耦版本或循环版本。

:card_index_dividers: 缓冲区

对于缓冲区的实现,我们选择使用一个包装 Numpy 数组字典的方式。

为了实现一种简单的方式来使用 numpy 内存映射数组,我们实现了 sheeprl.utils.memmap.MemmapArray,这是一个处理内存映射数组的容器。 这种灵活性使得实现变得非常简单,通过使用 ReplayBufferSequentialReplayBufferEpisodeBufferEnvIndependentReplayBuffer 这些类,可以实现所有用于在线策略和离线策略算法所需的缓冲区。

:mag: 技术细节

字典中 Numpy 数组的形状为 (T, B, *),其中 T 是时间步数,B 是并行环境数,* 是数据的形状。

要将 ReplayBuffer 用作 RolloutBuffer,必须指定适当的 buffer_size。例如,对于 PPO 算法,buffer_size 必须是 [T, B],其中 T 是时间步数,B 是并行环境数。

:bow: 贡献

贡献的最佳方式是通过开启一个 issue 来讨论新功能或 bug,或者通过开启一个 PR 来修复 bug 或添加新功能。

:mailbox_with_no_mail: 联系方式

如有任何进一步的问题或讨论,您可以联系我们:

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号