# PARL **Repository Path**: mirrors_PaddlePaddle/PARL ## Basic Information - **Project Name**: PARL - **Description**: A high-performance distributed training framework for Reinforcement Learning - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-11-23 - **Last Updated**: 2026-03-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
PARL的目标是构建一个可以完成复杂任务的智能体。以下是用户在逐步构建一个智能体的过程中需要了解到的结构:
### Model
`Model` 用来定义前向 (`Forward`)网络,这通常是一个策略网络 (`Policy Network`)或者一个值函数网络 (`Value Function`),输入是当前环境状态 (`State`)。
### Algorithm
`Algorithm` 定义了具体的算法来更新前向网络 (`Model`),也就是通过定义损失函数来更新`Model`。一个`Algorithm`包含至少一个`Model`。
### Agent
`Agent` 负责算法与环境的交互,在交互过程中把生成的数据提供给`Algorithm`来更新模型 (`Model`),数据的预处理流程也一般定义在这里。
提示: 请访问[教程](https://parl.readthedocs.io/zh_CN/latest/tutorial/getting_started.html) and [API 文档](https://parl.readthedocs.io/zh_CN/latest/apis/model.html)以获取更多关于基础类的信息。
## 简易高效的并行接口
在PARL中,一个**修饰符**(parl.remote_class)就可以帮助用户实现自己的并行算法。
以下我们通过`Hello World`的例子来说明如何简单地通过PARL来调度外部的计算资源实现并行计算。 请访问我们的[教程文档](https://parl.readthedocs.io/zh_CN/latest/parallel_training/setup.html)以获取更多的并行训练信息。
```python
#============Agent.py=================
@parl.remote_class
class Agent(object):
def say_hello(self):
print("Hello World!")
def sum(self, a, b):
return a+b
parl.connect('localhost:8037')
agent = Agent()
agent.say_hello()
ans = agent.sum(1,5) # run remotely and not comsume any local computation resources
```
两步调度外部的计算资源:
1. 使用`parl.remote_class`修饰一个类,之后这个类就被转化为可以运行在其他CPU或者机器上的类。
2. 调用`parl.connect`函数来初始化并行通讯,通过这种方式获取到的实例和原来的类是有同样的函数的。由于这些类是在别的计算资源上运行的,执行这些函数**不再消耗当前线程计算资源**。
如上图所示,真实的actor(橙色圆圈)运行在CPU集群,learner(蓝色圆圈)和remote actor(黄色圆圈)运行在本地的GPU上。对于用户而言,完全可以像写多线程代码一样来实现并行算法,相当简单,但是这些多线程的运算利用了外部的计算资源。我们也提供了并行算法示例,更多细节请参考[IMPALA](benchmark/fluid/IMPALA/), [A2C](examples/A2C/)。
# 安装:
### 依赖
- Python 3.6+. (Python 3.8+ 更适合用于并行训练)
- [paddlepaddle>=2.3.1](https://github.com/PaddlePaddle/Paddle) (**非必须的**,如果你只用并行部分的接口不需要安装paddle)
```
pip install parl
```
[详细安装说明 (持续更新)](docs/installation_guide_cn.md)
# 快速开始
请查看一下几个教程帮助您快速上手PARL:
- [教程](https://parl.readthedocs.io/zh_CN/latest/tutorial/getting_started.html) : 解决经典的 CartPole 问题。
- [Xparl用法](https://parl.readthedocs.io/zh_CN/latest/parallel_training/setup.html) : 如何使用`xparl`设置集群,实现并行运算。
- [进阶教程](https://parl.readthedocs.io/zh_CN/latest/implementations/new_alg.html) : 自定义新算法。
- [API 文档](https://parl.readthedocs.io/zh_CN/latest/apis/model.html)
同时,我们还为零基础开发者提供强化学习入门课程 : ( [视频](https://www.bilibili.com/video/BV1yv411i7xd) | [代码](examples/tutorials/) )
# 算法示例
- [QuickStart](examples/QuickStart/)
- [DQN](examples/DQN/)
- [ES](examples/ES/)
- [DDPG](examples/DDPG/)
- [A2C](examples/A2C/)
- [TD3](examples/TD3/)
- [SAC](examples/SAC/)
- [QMIX](examples/QMIX/)
- [MADDPG](examples/MADDPG/)
- [PPO](examples/PPO/)
- [CQL](examples/CQL/)
- [IMPALA](examples/IMPALA)
- [冠军解决方案:NIPS2018强化学习假肢挑战赛](examples/NeurIPS2018-AI-for-Prosthetics-Challenge/)
- [冠军解决方案:NIPS2019强化学习仿生人控制赛事](examples/NeurIPS2019-Learn-to-Move-Challenge/)
- [冠军解决方案:NIPS2020强化学习电网调度赛事](examples/NeurIPS2020-Learning-to-Run-a-Power-Network-Challenge/)
# Waymax-RL(2025 Update, GPU-RL 自动驾驶)
- 基于waymax仿真的端到端GPU RL自动驾驶训练框架
Full documentation and instructions: [waymax_rl/README_cn.md](./waymax_rl/README_cn.md)
# xparl 安全说明
`xparl` 提供了跨多机集群的多进程并行功能,类似于 Python 自带的单机多进程。这意味着在某个客户端上编写代码后,可以在集群内的任意机器上执行任意代码,例如获取其他机器上的数据、增删文件等。
这是设计的初衷,因为强化学习环境多种多样,`env_wrapper` 需要具备执行各种可能操作的能力。`xparl` 使用了 `pickle` 实现这一功能(类似于 `ray`)。与大多数情况下将 `pickle` 视为可注入代码的漏洞不同,这里使用 `pickle` 是一种特性。
## 安全性注意事项
由于支持任意代码执行,用户需要确保集群环境是安全的:
- **不要允许不信任的机器加入集群。**
- **不要让不信任的用户访问集群,例如不要将 `xparl` 的端口暴露在公网。**
- **不要在集群上执行不信任的代码。**