Project Icon

rl_games

强化学习框架支持多环境及算法的高性能实现

rl_games是一个高性能强化学习库,实现了PPO、A2C等算法,支持NVIDIA Isaac Gym、Brax等环境的GPU加速训练。该库具备异步actor-critic、多智能体训练、自对弈等功能,可在多GPU上并行。rl_games提供Colab notebook示例便于快速上手,在多个基准测试中表现出色。作为一个功能丰富的强化学习工具,rl_games兼具高性能和易用性。

RL Games: 高性能强化学习库

Discord频道链接

论文和相关链接

在不同环境中的一些结果

蚂蚁奔跑 人形机器人奔跑

Allegro手400 Shadow手OpenAI

Allegro手真实世界

AllegroKuka

Pytorch实现:

  • PPO,支持非对称演员-评论家变体
  • 支持与Isaac Gym和Brax的端到端GPU加速训练流程
  • 支持掩码动作
  • 多智能体训练,去中心化和中心化评论家变体
  • 自我对弈

Tensorflow 1.x实现(在此版本中已移除):

  • Rainbow DQN
  • A2C
  • PPO

快速开始: 云端Colab

在Colab笔记本中快速轻松地探索RL Games:

安装

为获得最大的训练性能,强烈建议预先安装Pytorch 2.2或更新版本,以及CUDA 12.1或更新版本:

conda install pytorch torchvision pytorch-cuda=12.1 -c pytorch -c nvidia 或: pip install pip3 install torch torchvision

然后:

pip install rl-games

要运行基于CPU的环境,需要安装Ray或envpool pip install envpoolpip install ray 要运行Mujoco、Atari游戏或基于Box2d的环境训练,需要分别额外安装 pip install gym[mujoco]pip install gym[atari]pip install gym[box2d]

要运行Atari还需要 pip install opencv-python。此外,强烈建议安装envpool以获得Mujoco和Atari环境的最大模拟和训练性能: pip install envpool

引用

如果您在研究中使用rl-games,请使用以下引用:

@misc{rl-games2021,
title = {rl-games: A High-performance Framework for Reinforcement Learning},
author = {Makoviichuk, Denys and Makoviychuk, Viktor},
month = {May},
year = {2021},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/Denys88/rl_games}},
}

开发设置

poetry install
# 安装cuda相关依赖
poetry run pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html

训练

NVIDIA Isaac Gym

下载并按照Isaac Gym的安装说明进行操作: https://developer.nvidia.com/isaac-gym
以及IsaacGymEnvs: https://github.com/NVIDIA-Omniverse/IsaacGymEnvs

蚂蚁

python train.py task=Ant headless=True python train.py task=Ant test=True checkpoint=nn/Ant.pth num_envs=100

人形机器人

python train.py task=Humanoid headless=True python train.py task=Humanoid test=True checkpoint=nn/Humanoid.pth num_envs=100

Shadow Hand方块定向任务

python train.py task=ShadowHand headless=True python train.py task=ShadowHand test=True checkpoint=nn/ShadowHand.pth num_envs=100

其他

Atari 乒乓

poetry install -E atari
poetry run python runner.py --train --file rl_games/configs/atari/ppo_pong.yaml
poetry run python runner.py --play --file rl_games/configs/atari/ppo_pong.yaml --checkpoint nn/PongNoFrameskip.pth

Brax蚂蚁

poetry install -E brax
poetry run pip install --upgrade "jax[cuda]==0.3.13" -f https://storage.googleapis.com/jax-releases/jax_releases.html
poetry run python runner.py --train --file rl_games/configs/brax/ppo_ant.yaml
poetry run python runner.py --play --file rl_games/configs/brax/ppo_ant.yaml --checkpoint runs/Ant_brax/nn/Ant_brax.pth

实验追踪

rl_games支持使用Weights and Biases进行实验追踪。

poetry install -E atari
poetry run python runner.py --train --file rl_games/configs/atari/ppo_breakout_torch.yaml --track
WANDB_API_KEY=xxxx poetry run python runner.py --train --file rl_games/configs/atari/ppo_breakout_torch.yaml --track
poetry run python runner.py --train --file rl_games/configs/atari/ppo_breakout_torch.yaml --wandb-project-name rl-games-special-test --track
poetry run python runner.py --train --file rl_games/configs/atari/ppo_breakout_torch.yaml --wandb-project-name rl-games-special-test -wandb-entity openrlbenchmark --track

多GPU

我们使用torchrun来协调任何多GPU运行。

torchrun --standalone --nnodes=1 --nproc_per_node=2 runner.py --train --file rl_games/configs/ppo_cartpole.yaml

配置参数

字段示例值默认值描述
seed8PyTorch、NumPy等的随机种子
algo算法块
namea2c_continuous算法名称。可能的值有:sac、a2c_discrete、a2c_continuous
model模型块
namecontinuous_a2c_logstd可能的值:continuous_a2c(期望sigma为(0, +inf))、continuous_a2c_logstd(期望sigma为(-inf, +inf))、a2c_discrete、a2c_multi_discrete
network网络描述
nameactor_critic可能的值:actor_critic 或 soft_actor_critic
separateFalse是否为评论家使用具有相同架构的独立网络。在几乎所有情况下,如果你标准化值,最好将其设为False
space网络空间
continuous连续或离散
mu_activationNonemu的激活函数。在几乎所有情况下,None效果最佳,但我们可以尝试tanh
sigma_activationNonesigma的激活函数。根据模型的不同,将被视为log(sigma)或sigma
mu_initmu的初始化器
namedefault
sigma_initsigma的初始化器。如果使用logstd模型,好的值是0
nameconst_initializer
val0
fixed_sigmaTrue如果为真,则sigma向量不依赖于输入
cnn卷积块
typeconv2d类型:目前支持两种类型:conv2d或conv1d
activationelu卷积层之间的激活函数
initializer初始化器。我从tensorflow中借用了一些名称
nameglorot_normal_initializer初始化器名称
gain1.4142附加参数
convs卷积层。参数与torch中的相同
filters32过滤器数量
kernel_size8核大小
strides4步长
padding0填充
filters64下一个卷积层信息
kernel_size4
strides2
padding0
filters64
kernel_size3
strides1
padding0
mlpMLP块。也支持卷积。请参见其他配置示例
unitsMLP层的大小数组,例如:[512, 256, 128]
d2rlFalse使用来自https://arxiv.org/abs/2010.09163的d2rl架构
activationelu密集层之间的激活函数
initializer初始化器
namedefault初始化器名称
rnnRNN块
namelstmRNN层名称。支持lstm和gru
units256单元数量
layers1层数
before_mlpFalseFalse是否在mlp块之前应用rnn
configRL配置块
reward_shaper奖励整形器。可以应用简单的变换
min_val-1你可以应用min_val、max_val、scale和shift
scale_value0.11
normalize_advantageTrueTrue标准化优势
gamma0.995奖励折扣
tau0.95GAE的lambda值。很久以前误称为tau,因为lambda是python的关键字:(
learning_rate3e-4学习率
namewalker将在tensorboard中使用的名称
save_best_after10等待多少个epoch后开始保存最佳分数的检查点
score_to_win300如果分数>=该值,则训练将停止
grad_norm1.5梯度范数。如果truncate_grads为True则应用。好的值在(1.0, 10.0)之间
entropy_coef0熵系数。连续空间的好值是0。离散空间是0.02
truncate_gradsTrue是否应用截断梯度。它可以稳定训练
env_nameBipedalWalker-v3环境名称
e_clip0.2ppo损失的裁剪参数
clip_valueFalse是否对值损失应用裁剪。如果使用normalize_value,则不需要
num_actors16运行的actor/环境数量
horizon_length4096每个actor的视野长度。总步数将是num_actorshorizon_lengthnum_agents(如果环境不是多智能体,num_agents==1)
minibatch_size8192小批量大小。总步数必须能被小批量大小整除
minibatch_size_per_env8每个环境的小批量大小。如果指定,将用minibatch_size_per_env * nume_envs的值覆盖默认的小批量大小
mini_epochs4小epoch数。好的值在[1,10]之间
critic_coef2评论家系数。默认情况下,critic_loss = critic_coef * 1/2 * MSE
lr_scheduleadaptiveNone调度器类型。可以是None、linear或adaptive。adaptive对连续控制任务最好。每个小epoch都会改变学习率
kl_threshold0.008自适应调度的KL阈值。如果KL < kl_threshold/2,则lr = lr * 1.5,反之亦然
normalize_inputTrue对输入应用运行平均标准差
bounds_loss_coef0.0连续空间辅助损失的系数
max_epochs10000运行的最大周期数。
max_frames5000000运行的最大帧数(环境步骤)。
normalize_valueTrue使用值运行平均标准归一化。
use_diagnosticsTrue在tensorboard中添加更多信息。
value_bootstrapTrue在情节结束时引导值。对不同的运动环境非常有用。
bound_loss_typeregularisationNone为连续情况添加辅助损失。'regularisation'是平方动作的总和。'bound'是大于1.1的动作总和。
bounds_loss_coef0.00050正则化系数
use_smooth_clampFalse使用平滑夹持代替常规裁剪
zero_rnn_on_doneFalseTrue如果为False,当环境重置时RNN内部状态不会重置(设为0)。在某些情况下可能改善训练,例如当开启域随机化时
player玩家配置块。
renderTrueFalse渲染环境
deterministicTrueTrue使用确定性策略(argmax或mu)还是随机策略。
use_vecenvTrueFalse使用vecenv为玩家创建环境
games_num200在玩家模式下运行的游戏数量。
env_config环境配置块。它直接应用于环境。这个例子取自我的Atari包装器。
skip4跳过的帧数
nameBreakoutNoFrameskip-v4(Atari)gym环境的确切名称。这是一个例子,根据训练环境的不同,这些参数可能会有所不同。
evaluationTrueFalse在训练时启用评估功能进行推理。
update_checkpoint_freq100100查找新检查点的步骤频率。
dir_to_monitor评估期间搜索检查点的目录。

自定义网络示例:

[简单测试网络](https://github.com/Denys88/rl_games/blob/master/rl_games/envs/test_network.py 该网络接受字典形式的观察值。 要注册它,你可以在你的 init.py 中添加如下代码:

from rl_games.envs.test_network import TestNetBuilder 
from rl_games.algos_torch import model_builder
model_builder.register_network('testnet', TestNetBuilder)

[简单测试环境](https://github.com/Denys88/rl_games/blob/master/rl_games/envs/test/rnn_env.py [示例环境](https://github.com/Denys88/rl_games/blob/master/rl_games/envs/test/example_env.py

环境支持的额外属性和函数

字段默认值描述
use_central_valueFalse如果为真,则返回的观察值预期是包含'obs'和'state'的字典
value_size1返回奖励的形状。网络将自动支持多头值函数。
concat_infosFalse默认vecenv是否应将字典列表转换为列表字典。如果要使用值提升非常有用。在这种情况下,你需要始终从环境返回'time_outs':True或False。
get_number_of_agents(self)1返回环境中的智能体数量
has_action_mask(self)False如果环境有无效动作掩码则返回True
get_action_mask(self)None如果has_action_mask为真则返回动作掩码。一个很好的例子是[SMAC环境](https://github.com/Denys88/rl_games/blob/master/rl_games/envs/test/smac_env.py

发行说明

1.6.1

  • 修复了在训练多智能体环境时出现的中心值RNN错误。
  • 添加了Deepmind Control PPO基准测试。
  • 添加了几种实验性的值预测训练方法(OneHot、TwoHot编码和交叉熵损失而不是L2)。
  • 新方法尚未实现。目前无法通过yaml文件开启。一旦我们找到一个训练效果更好的环境,就会添加到配置中。
  • 在tensorboard中添加了形状奖励图。
  • 修复了SAC不使用save_frequency保存权重的错误。
  • 为像Isaac Gym这样的GPU加速训练环境添加了多节点训练支持。无需更改训练脚本。感谢@ankurhanda和@ArthurAllshire的实现协助。
  • 添加了训练过程中进行推理的评估功能。启用后,可以自动获取并更新训练过程中的检查点用于推理。
  • 添加了用于运行时更新rl训练参数的get/set API。感谢@ArthurAllshire提供初始版本的快速PBT代码。
  • 修复了SAC加载权重不正确的问题。
  • 移除了不需要的Ray依赖。
  • 为在RNN网络配置中使用已弃用的'seq_len'而不是'seq_length'添加了警告。

1.6.0

  • 为离散和连续动作空间添加了ONNX导出colab示例。对于连续情况,还提供了LSTM策略示例。
  • 改进了连续空间中RNN的训练,添加了zero_rnn_on_done选项。
  • 添加了NVIDIA CuLE支持:https://github.com/NVlabs/cule
  • 添加了player配置覆盖。Vecenv用于推理。
  • 修复了使用中心值的多GPU训练。
  • 修复了max_frames终止条件,以及它与线性学习率的交互:https://github.com/Denys88/rl_games/issues/212
  • 修复了"deterministic"拼写错误问题。
  • 修复了Mujoco和Brax SAC配置。
  • 修复了多智能体环境统计报告。修复了Starcraft2 SMAC环境。

1.5.2

  • 为SAC添加了观察值归一化。
  • 恢复了自适应KL遗留模式。

1.5.1

  • 修复了构建包问题。

1.5.0

  • 添加了wandb支持。
  • 添加了poetry支持。
  • 修复了各种错误。
  • 修复了字典观察值情况下cnn输入未除以255的问题。
  • 添加了更多envpool mujoco和atari训练示例。一些结果:15分钟Mujoco人形机器人训练,2分钟atari乒乓。
  • 添加了Brax和Mujoco colab训练示例。
  • 添加了'seed'命令行参数。如果大于0,将覆盖配置中的种子。
  • 弃用horovod,改用torch.distributed#171)。

1.4.0

1.3.2

  • 添加了'sigma'命令行参数。如果fixed_sigma为True,将覆盖连续空间的sigma。

1.3.1

  • 修复了SAC不工作的问题

1.3.0

  • 简化了rnn实现。运行稍慢但更加稳定。
  • 现在如果策略是rnn,中心值可以不是rnn。
  • 从yaml文件中移除了load_checkpoint。现在--checkpoint适用于训练和播放。

1.2.0

  • 添加了Swish (SILU)和GELU激活函数,可以改善某些Isaac Gym环境的结果。
  • 移除了tensorflow并初步清理了旧的/未使用的代码。
  • 简化了runner。
  • 现在网络在算法中使用load_network方法创建。

1.1.4

  • 修复了当模拟和rl设备不同时,在播放(测试)模式下player崩溃的问题。
  • 修复了各种多GPU错误。

1.1.3

  • 修复了在播放(测试)模式下运行单个Isaac Gym环境时崩溃的问题。
  • 添加了配置参数clip_actions用于关闭内部动作裁剪和重缩放

1.1.0

  • 添加到pypi:pip install rl-games
  • 添加了报告环境(模拟)步骤fps的功能,不包括策略推理。改进了命名。
  • 为提高可读性,在yaml配置中重命名:steps_num改为horizon_length,lr_threshold改为kl_threshold

故障排除

  • 某些支持的环境不随setup.py一起安装,你需要手动安装它们
  • 从rl-games 1.1.0开始,旧的yaml配置将与新版本不兼容:
    • steps_num应更改为horizon_lengthlr_threshold应更改为kl_threshold

已知问题

  • 使用Isaac Gym运行单个环境可能导致崩溃,如果发生这种情况,请切换到至少2个并行模拟的环境
项目侧边栏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

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

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