rl_games

rl_games

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

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

RL Games强化学习GPU加速机器人学习多智能体训练Github开源项目

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个并行模拟的环境

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多