RLlib:工业级、可扩展的强化学习#
注意
Ray 2.40 默认使用 RLlib 的新 API 栈。Ray 团队已基本完成将算法、示例脚本和文档迁移到新代码库。
如果你仍在使用旧的 API 栈,请参阅新 API 栈迁移指南了解如何迁移的详细信息。

RLlib 是一个用于强化学习(RL)的开源库,为生产级、高度可扩展和容错的 RL 工作负载提供支持,同时为各种行业应用提供简单统一的 API。
无论是在多智能体设置中训练策略、从历史离线数据进行训练,还是使用外部连接的模拟器,RLlib 都为这些自主决策需求提供了简单的解决方案,让你可以在数小时内开始运行实验。
行业领导者在许多不同的垂直领域使用 RLlib 进行生产部署,例如游戏、机器人、金融、气候和工业控制、制造和物流、汽车以及船只设计。
60 秒了解 RLlib#
只需几个步骤,就可以在你的笔记本电脑上运行第一个 RLlib 工作负载。按照如下所示安装 RLlib 和 PyTorch
pip install "ray[rllib]" torch
注意
对于运行 Apple Silicon(如 M1)的计算机上的安装,请按照此处说明进行。
注意
为了能够运行 Atari 或 MuJoCo 示例,你还需要执行
pip install "gymnasium[atari,accept-rom-license,mujoco]"
这就好了,你现在可以开始使用 RLlib 编写代码了。这里有一个在 Taxi 领域运行 PPO 算法的示例。首先,你需要为算法创建一个 config
,它定义了 RL 环境以及其他所需的设置和参数。
from ray.rllib.algorithms.ppo import PPOConfig
from ray.rllib.connectors.env_to_module import FlattenObservations
# Configure the algorithm.
config = (
PPOConfig()
.environment("Taxi-v3")
.env_runners(
num_env_runners=2,
# Observations are discrete (ints) -> We need to flatten (one-hot) them.
env_to_module_connector=lambda env: FlattenObservations(),
)
.evaluation(evaluation_num_env_runners=1)
)
接下来,build
算法并 train
共五次迭代。一次训练迭代包括由 EnvRunner
actor 并行、分布式地收集样本,然后对收集到的数据计算损失,以及模型更新步骤。
from pprint import pprint
# Build the algorithm.
algo = config.build_algo()
# Train it for 5 iterations ...
for _ in range(5):
pprint(algo.train())
在你的脚本结束时,你评估训练好的 Algorithm 并释放其所有资源
# ... and evaluate it.
pprint(algo.evaluate())
# Release the algo's resources (remote actors, like EnvRunners and Learners).
algo.stop()
你可以使用任何 Farama-Foundation Gymnasium 注册的环境作为 env
参数。
在 config.env_runners()
中,你可以指定并行 EnvRunner
actor 的数量(以及其他许多设置)来从环境中收集样本。EnvRunner 这一轴是完全容错的,这意味着你可以针对不稳定或频繁卡顿的自定义环境进行训练,甚至可以将所有的 EnvRunner
actor 放在 spot 机器上。
你还可以通过调整 RLlib 的 DefaultModelConfig
来修改使用的 NN 架构,并通过 config.evaluation()
方法为评估用的 EnvRunner
actor 设置单独的配置。
请看这里,如果你想了解更多关于 RLlib 训练 API 的信息。另外,这里有一个简单的例子,演示了训练后如何编写动作推理循环。
如果你想快速了解 RLlib 支持哪些算法和环境,请点击下面的下拉菜单
为什么选择 RLlib?#
了解更多#
RLlib 核心概念
了解更多关于 RLlib 的核心概念,例如算法、环境、模型和学习器。
RL 环境
开始使用 RLlib 支持的环境,例如 Farama Foundation 的 Gymnasium、Petting Zoo,以及许多用于向量化和多智能体环境的自定义格式。
模型 (RLModule)
了解如何配置 RLlib 的默认模型,以及如何通过 RLModule API 实现你自己的自定义模型。RLModule API 支持使用 PyTorch 构建任意架构、复杂的多种模型设置以及智能体之间共享组件的多智能体模型。
算法
查看 RLlib 支持的众多 RL 算法,包括同策略和异策略训练、离线和基于模型的 RL、多智能体 RL 等等。
定制 RLlib#
RLlib 提供了强大且易于使用的 API,用于定制实验和生产训练工作流的所有方面。例如,你可以使用 Farama Foundation 的 gymnasium 或 DeepMind 的 OpenSpiel 用 Python 编写自己的环境,提供自定义的PyTorch 模型,编写自己的优化器设置和损失定义,或者定义自定义的探索行为。
RLlib 的 API 栈:构建在 Ray 之上,RLlib 提供了现成的、分布式和容错的算法及损失函数、PyTorch 默认模型、多 GPU 训练以及多智能体支持。用户通过继承现有抽象来定制他们的实验。#
引用 RLlib#
如果 RLlib 对你的学术研究有所帮助,Ray RLlib 团队鼓励你引用这些论文
@inproceedings{liang2021rllib,
title={{RLlib} Flow: Distributed Reinforcement Learning is a Dataflow Problem},
author={
Wu, Zhanghao and
Liang, Eric and
Luo, Michael and
Mika, Sven and
Gonzalez, Joseph E. and
Stoica, Ion
},
booktitle={Conference on Neural Information Processing Systems ({NeurIPS})},
year={2021},
url={https://proceedings.neurips.cc/paper/2021/file/2bce32ed409f5ebcee2a7b417ad9beed-Paper.pdf}
}
@inproceedings{liang2018rllib,
title={{RLlib}: Abstractions for Distributed Reinforcement Learning},
author={
Eric Liang and
Richard Liaw and
Robert Nishihara and
Philipp Moritz and
Roy Fox and
Ken Goldberg and
Joseph E. Gonzalez and
Michael I. Jordan and
Ion Stoica,
},
booktitle = {International Conference on Machine Learning ({ICML})},
year={2018},
url={https://arxiv.org/pdf/1712.09381}
}