OpenRL-v0.2.1 更新于 2023年12月20日
main 分支是 OpenRL 的最新版本,正在积极开发中。如果您只是想尝试 OpenRL,可以切换到 stable 分支。
OpenRL 是一个开源的通用强化学习研究框架,支持单智能体、多智能体、离线强化学习、自博弈以及自然语言等多种任务的训练。它基于 PyTorch 开发,目标是成为强化学习研究社区中一个简单易用、灵活高效且可持续的平台。
目前,OpenRL 支持的功能包括:
OpenRL 目前支持的算法(更多详情请参阅 Gallery):
OpenRL 目前支持的环境(更多详情请参阅 Gallery):
该框架已由 OpenRL-Lab 团队经过多次迭代,并应用于学术研究。它现已成为一个成熟的强化学习框架。
OpenRL-Lab 将继续维护和更新 OpenRL,我们欢迎所有人加入我们的开源社区,为强化学习的发展贡献力量。
有关 OpenRL 的更多信息,请参阅文档。
我们在此提供 OpenRL 与现有流行 RL 库的对比表格。OpenRL 采用模块化设计和高层抽象,允许用户通过统一且用户友好的接口完成各种任务的训练。
| 库 | NLP/RLHF | 多智能体 | 自博弈训练 | 离线 RL | DeepSpeed |
|---|---|---|---|---|---|
| OpenRL | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: |
| Stable Baselines3 | :x: | :x: | :x: | :x: | :x: |
| Ray/RLlib | :x: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :x: |
| DI-engine | :x: | :heavy_check_mark: | 不完全支持 | :heavy_check_mark: | :x: |
| Tianshou | :x: | 不完全支持 | 不完全支持 | :heavy_check_mark: | :x: |
| MARLlib | :x: | :heavy_check_mark: | 不完全支持 | :x: | :x: |
| MAPPO Benchmark | :x: | :heavy_check_mark: | :x: | :x: | :x: |
| RL4LMs | :heavy_check_mark: | :x: | :x: | :x: | :x: |
| trlx | :heavy_check_mark: | :x: | :x: | :x: | :heavy_check_mark: |
| trl | :heavy_check_mark: | :x: | :x: | :x: | :heavy_check_mark: |
| TimeChamber | :x: | :x: | :heavy_check_mark: | :x: | :x: |
用户可以直接通过 pip 安装 OpenRL:
pip install openrl
如果用户使用 Anaconda 或 Miniconda,也可以通过 conda 安装 OpenRL:
conda install -c openrl openrl
想要修改源代码的用户也可以从源码安装 OpenRL:
git clone https://github.com/OpenRL-Lab/openrl.git && cd openrl
pip install -e .
安装完成后,用户可以通过命令行检查 OpenRL 的版本:
openrl --version
OpenRL 目前提供支持 GPU 和不支持 GPU 的 Docker 镜像。
如果用户的计算机没有 NVIDIA GPU,可以使用以下命令获取不带 GPU 插件的镜像:
sudo docker pull openrllab/openrl-cpu
如果用户希望使用 GPU 加速训练,可以使用以下命令获取镜像:
sudo docker pull openrllab/openrl
成功拉取镜像后,用户可以使用以下命令运行 OpenRL 的 Docker 镜像:
# 无 GPU 加速
sudo docker run -it openrllab/openrl-cpu
# 有 GPU 加速
sudo docker run -it --gpus all --net host openrllab/openrl
进入 Docker 容器后,用户可以检查 OpenRL 的版本,然后使用以下命令运行测试用例:
# 在 Docker 容器中检查 OpenRL 版本
openrl --version
# 运行测试用例
openrl --mode train --env CartPole-v1
OpenRL 为强化学习初学者提供了一个简单易用的接口。
以下是一个使用 PPO 算法训练 CartPole 环境的示例:
# train_ppo.py
from openrl.envs.common import make
from openrl.modules.common import PPONet as Net
from openrl.runners.common import PPOAgent as Agent
env = make("CartPole-v1", env_num=9) # 创建环境,并设置环境并行数为 9。
net = Net(env) # 创建神经网络。
agent = Agent(net) # 初始化智能体。
agent.train(
total_time_steps=20000) # 开始训练,并设置环境运行总步数为 20,000。
使用 OpenRL 训练智能体只需要四个简单的步骤:
创建环境 => 初始化模型 => 初始化智能体 => 开始训练!
对于训练好的智能体,用户也可以轻松地进行测试:
# train_ppo.py
from openrl.envs.common import make
from openrl.modules.common import PPONet as Net
from openrl.runners.common import PPOAgent as Agent
agent = Agent(Net(make("CartPole-v1", env_num=9))) # 初始化训练器。
agent.train(total_time_steps=20000)
# 创建测试环境,设置环境并行数为 9,渲染模式为 group_human。
env = make("CartPole-v1", env_num=9, render_mode="group_human")
agent.set_env(env) # 智能体需要一个交互环境。
obs, info = env.reset() # 初始化环境,获取初始观测和环境信息。
while True:
action, _ = agent.act(obs) # 智能体根据环境观测预测下一个动作。
# 环境根据动作执行一步,获取下一个观测、奖励、是否结束和环境信息。
obs, r, done, info = env.step(action)
if any(done): break
env.close() # 关闭测试环境
在普通笔记本电脑上执行上述代码只需几秒钟即可完成训练。下图展示了智能体的可视化效果:
提示:用户也可以通过终端执行命令行来快速训练 CartPole 环境。
openrl --mode train --env CartPole-v1
对于多智能体和自然语言处理等训练任务,OpenRL 也提供了类似简单易用的接口。
关于如何进行多智能体训练、设置训练超参数、加载训练配置、使用 wandb、保存 GIF 动画等信息,请参阅:
关于自然语言任务训练、加载 Hugging Face 上的模型/数据集