备注

Ray 2.10.0 引入了 RLlib 的“新 API 栈”的 alpha 阶段。Ray 团队计划将算法、示例脚本和文档迁移到新的代码库中,从而在 Ray 3.0 之前的后续小版本中逐步替换“旧 API 栈”(例如,ModelV2、Policy、RolloutWorker)。

然而,请注意,到目前为止,只有 PPO(单代理和多代理)和 SAC(仅单代理)支持“新 API 堆栈”,并且默认情况下继续使用旧 API 运行。您可以继续使用现有的自定义(旧堆栈)类。

请参阅此处 以获取有关如何使用新API堆栈的更多详细信息。

示例#

本页面包含 RLlib 的 示例文件夹 中所有 Python 脚本的索引,展示了该库的不同用例和功能。

备注

RLlib 目前正处于从“旧API堆栈”向“新API堆栈”的过渡状态。这里的一些示例尚未被翻译到新堆栈,并且在顶部标记有以下注释行:# @OldAPIStack。所有示例脚本迁移到“新API堆栈”的工作正在进行中,预计将在2024年底完成。

备注

如果任何新API堆栈示例被破坏,或者如果您想向此页面添加示例,请随时在 RLlib的github仓库 上提出问题。

文件夹结构#

示例文件夹 被结构化为几个子目录,其所有内容将在下面详细描述。

如何运行示例脚本#

大多数示例脚本是自执行的,这意味着你可以直接 cd 进入相应的目录,并使用 python 运行脚本:

$ cd ray/rllib/examples/multi_agent
$ python multi_agent_pendulum.py --enable-new-api-stack --num-agents=2

使用 --help 命令行参数,让每个脚本打印出其支持的命令行选项。

大多数脚本共享一个通用的、普遍适用的命令行参数子集,例如 --num-env-runners--no-tune--wandb-key

所有子文件夹#

算法#

检查点#

连接器#

备注

RLlib 的连接器 API 已为新的 API 堆栈 (new_stack) 从头开始重写。连接器组件和管道现在被称为 ConnectorV2`(相对于仅在旧 API 堆栈 |old_stack| 上继续工作的 ``Connector`)。

  • new_stack 如何堆叠Atari图像观察:

    一个使用Atari帧堆叠的例子,以非常高效的方式进行,不是在环境中(作为 gym.Wrapper),而是通过使用 EnvToModuleLearnerConnector 管道实时堆叠观察结果。这种帧堆叠方法更高效,因为它避免了必须通过网络(ray)发送大的观察张量。

  • new_stack 如何使用均值/标准差过滤观测值:

    一个 ConnectorV2 的示例,它使用简单的均值/标准差过滤器(通过均值平移并除以标准差)过滤来自环境的所有观察值。这个示例展示了有状态的 ConnectorV2 类如何将其状态(这里是个体观察项的均值和标准差)从不同的 EnvRunner 实例中 a) 合并到一个公共状态中,然后 b) 再次广播回远程的 EnvRunner 工作者。

  • new_stack 如何在RLModule输入中包含先前的动作和/或先前的奖励:

    一个 ConnectorV2 的例子,它将前 n 个动作和/或前 m 个奖励添加到 RLModule 的输入字典中(用于执行其前向传递,无论是推理还是训练)。

  • new_stack 如何在嵌套动作空间中训练:

    在任意嵌套的动作空间中学习,使用一个环境,其中动作空间等于观察空间(两者都是复杂、嵌套的字典),策略必须选择与之前看到的观察结果紧密匹配(或相同)的动作。

  • new_stack 如何使用嵌套的观察空间进行训练:

    在任意嵌套的观测空间中学习(使用带有嵌套字典观测空间的 CartPole-v1 变体)。

课程学习#

调试#

环境#

  • new_stack 如何注册一个自定义的gymnasium环境:

    示例展示了如何使用 gymnasium 编写自己的 RL 环境,并将其注册以使用 RLlib 针对此环境训练您的算法。

  • new_stack 如何在训练期间使用 WandB 设置环境的轨迹渲染(和录制):

    示例展示了如何渲染和记录你的gymnasium环境中的剧集轨迹,并将视频记录到WandB。

  • old_stack 如何在本地运行Unity3D多代理环境:

    如何设置一个针对本地运行的 Unity3D 编辑器实例的 RLlib 算法以学习任何 Unity3D 游戏(包括多智能体支持)的示例。使用此示例尝试操作,并在编辑器中实时观看游戏和学习进度。提供一个已编译的游戏,此示例还可以在 num_env_runners > 0 的情况下以分布式方式运行。对于更重量级、分布式、基于云的示例,请参见下面的 Unity3D 客户端/服务器

  • old_stack 如何使用Unity3D客户端/服务器设置运行:

    如何在云中设置 n 个分布式 Unity3D(编译)游戏,这些游戏作为数据收集客户端,针对一个中央 RLlib 策略服务器,学习如何玩游戏。n 个分布式客户端本身可以是外部/人类玩家的服务器,并允许控制完全掌握在 Unity 实体手中,而不是 RLlib。注意:使用 Unity 的 MLAgents SDK(>=1.0),并支持所有提供的 MLAgents 示例游戏和多代理设置。

  • old_stack 如何使用CartPole客户端/服务器设置运行:

    简单 CartPole 策略的预测在线服务示例。

评估#

GPU(用于训练和采样)#

  • new_stack 如何使用分数GPU进行RLModule训练:

    如果你的模型很小,可以轻松地放在单个GPU上,并且你希望因此同时训练其他模型以节省时间和成本,这个脚本展示了如何使用学习者(模型训练)端的部分GPU数量来设置你的RLlib配置。

分层训练#

推理(模型/策略)#

指标#

多智能体强化学习#

离线强化学习#

Ray Serve 和 RLlib#

Ray Tune 和 RLlib#

RLModules#

调整示例#

tuned examples 文件夹包含 python 配置文件(旧 API 堆栈为 yaml 格式),这些文件可以类似地执行此处描述的所有其他示例脚本,以便为不同的算法和不同环境类型运行调整后的学习实验。

例如,请参见这个针对PPO的调整后的Atari示例,它在大约5分钟内学会了解决Pong环境。可以在具有4个GPU和96个CPU的单个g5.24xlarge(或g6.24xlarge)机器上这样运行:

$ cd ray/rllib/tuned_examples/ppo
$ python atari_ppo.py --env ALE/Pong-v5 --num-gpus=4 --num-env-runners=95

请注意,此文件夹中的一些文件也用于 RLlib 的每日或每周发布测试。

社区示例#

  • old_stack Arena AI:

    一个用于单/多智能体智能的通用评估平台和构建工具包,带有由RLlib生成的基线。

  • old_stack CARLA:

    使用 RLlib 和 CARLA 模拟器训练自动驾驶车辆的示例。

  • old_stack 多智能体强化学习中对抗性通信的涌现:

    使用图神经网络和RLlib来训练多个合作和对抗的智能体,以解决“覆盖区域”问题,从而学习如何最好地进行通信(或在对抗情况下如何干扰通信)(代码).

  • old_stack Flatland:

    一个密集交通模拟环境,带有RLlib生成的基线。

  • old_stack GFootball:

    使用 RLlib 设置 GFootball 的多智能体版本的示例。

  • old_stack mobile-env:

    一个开放、极简的 Gymnasium 环境,用于无线移动网络中的自主协调。包含一个使用 Ray RLlib 进行多智能体强化学习的示例笔记本。

  • old_stack Neural MMO:

    一个受大型多人在线(MMO)角色扮演游戏启发的多智能体AI研究环境——自成一体的世界,每个持久宏观宇宙中包含数千个智能体,多样化的技能系统,本地和全球经济,复杂的新兴社会结构,以及临时的高风险单人和团队冲突。

  • old_stack NeuroCuts:

    使用 RLlib / 多智能体在类似强盗的环境中构建数据包分类树的示例。

  • old_stack NeuroVectorizer:

    使用 RLlib 学习 C 和 C++ 代码中循环的最佳 LLVM 向量化编译器杂注的示例。

  • old_stack Roboschool / SageMaker:

    在 SageMaker 中使用 RLlib 训练机器人控制策略的示例。

  • old_stack 顺序社会困境游戏:

    使用多智能体API建模多个 社会困境游戏 的示例。

  • old_stack 使用Ray和RLlib的单个RL的简单自定义环境:

    使用 Ray 2.0 和 Tune 创建自定义环境并训练单个代理的强化学习。

  • old_stack StarCraft2:

    在 StarCraft2 地图上使用 RLlib / 多智能体进行训练的示例。

  • old_stack 交通流量:

    使用 RLlib / 多智能体优化混合自主交通模拟的示例。

博客文章#