PaddlePaddle/PARL

纵然是瞬间 提交于 2020-04-16 11:35:24

【推荐阅读】微服务还能火多久?>>>

PARL

English | 简体中文
文档

PARL 是一个高性能、灵活的强化学习框架。

特点

可复现性保证。我们提供了高质量的主流强化学习算法实现,严格地复现了论文对应的指标。

大规模并行支持。框架最高可支持上万个CPU的同时并发计算,并且支持多GPU强化学习模型的训练。

可复用性强。用户无需自己重新实现算法,通过复用框架提供的算法可以轻松地把经典强化学习算法应用到具体的场景中。

良好扩展性。当用户想调研新的算法时,可以通过继承我们提供的基类可以快速实现自己的强化学习算法。

框架结构

abstractions PARL的目标是构建一个可以完整复杂任务的智能体。以下是用户在逐步构建一个智能体的过程中需要了解到的结构:

Model

Model 用来定义前向(Forward)网络,这通常是一个策略网络(Policy Network)或者一个值函数网络(Value Function),输入是当前环境状态(State)。

Algorithm

Algorithm 定义了具体的算法来更新前向网络(Model),也就是通过定义损失函数来更新Model。一个Algorithm包含至少一个Model

Agent

Agent 负责算法与环境的交互,在交互过程中把生成的数据提供给Algorithm来更新模型(Model),数据的预处理流程也一般定义在这里。

提示: 请访问教程 and API 文档以获取更多关于基础类的信息。

简易高效的并行接口

在PARL中,一个修饰符(parl.remote_class)就可以帮助用户实现自己的并行算法。 以下我们通过Hello World的例子来说明如何简单地通过PARL来调度外部的计算资源实现并行计算。 请访问我们的教程文档以获取更多的并行训练信息。

#============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函数来初始化并行通讯,通过这种方式获取到的实例和原来的类是有同样的函数的。由于这些类是在别的计算资源上运行的,执行这些函数不再消耗当前线程计算资源
PARL

如上图所示,真实的actor(橙色圆圈)运行在CPU集群,learner(蓝色圆圈)和remote actor(黄色圆圈)运行在本地的GPU上。对于用户而言,完全可以像写多线程代码一样来实现并行算法,相当简单,但是这些多线程的运算利用了外部的计算资源。我们也提供了并行算法示例,更多细节请参考IMPALA, A2C and GA3C

安装:

依赖

  • Python 2.7 or 3.5+.
  • paddlepaddle>=1.6.1 (非必须的,如果你只用并行部分的接口不需要安装paddle)
pip install parl

算法示例

NeurlIPS2018Half-CheetahBreakout
NeurlIPS2018

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!