PARL Logo
latest

概览

  • 特点
  • 框架结构
  • 简易高效的并行接口

安装

  • 安装

教程

  • 快速入门:解决CartPole问题
  • 子模块说明
  • 自定义新算法
  • 模型参数管理
  • 绘制训练曲线
  • 表格输出实验数据

算法接口文档

  • Policy Gradient
  • DQN
  • DDPG
  • DDQN
  • OAC
  • A2C
  • TD3
  • QMIX
  • SAC
  • PPO
  • MADDPG

简易高效的并行接口

  • Xparl并行概览
  • 使用教程
  • 加速案例
  • 加速案例(后台模式)
  • GPU Cluster
  • 如何debug
  • 分发本地文件
  • 序列化加速(非必须)

APIs

  • parl.Model
  • parl.Algorithm
  • parl.Agent
  • parl.remote_class
  • parl.connect

Frequently Asked Questions

  • xparl questions
  • RL questions

EvoKit

  • 简介
  • 入门案例
  • 产业级线上案例
PARL
  • 加速案例
  • Edit on GitHub

加速案例¶

../_images/poster.png
这个教程展示了如何通过并行修饰符 @parl.remote_class ,使用python的 多线程 也能够实现并行计算。
众所周知,python 的多线程并发性能并不好,很难达到传统的编程语言比如C++或者JAVA这种加速效果,主要的原因是python 有全局锁(GIL)的限制,使得其最多只能运用单核来记性运算。

下面我们通过一个简单的例子来看下GIL对于python的影响。首先,我们跑下这段代码:

class A(object):
    def run(self):
        ans = 0
        for i in range(100000000):
            ans += i
a = A()
for _ in range(5):
    a.run()
这段代码需要 17.46秒 的时间来计算5次的从1累加到1亿。
接下来我们通过python的原生多线程库改造下上面的代码,让它可以多线程跑起来。
import threading

class A(object):
    def run(self):
        ans = 0
        for i in range(100000000):
            ans += i
threads = []
for _ in range(5):
    a = A()
    th = threading.Thread(target=a.run)
    th.start()
    threads.append(th)
for th in threads:
    th.join()
运行这段代码之后,居然需要 41.35秒 ,比刚才的串行运算速度更慢。主要的原因是GIL限制了python只能单核运算,使用了多线程运算之后,触发了多线程竞争CPU的问题,反而延长了计算时间。
最后,我们尝试使用PARL:
import threading
import parl

@parl.remote_class
class A(object):
    def run(self):
        ans = 0
        for i in range(100000000):
            ans += i
threads = []
parl.connect("localhost:6006")
for _ in range(5):
    a = A()
    th = threading.Thread(target=a.run)
    th.start()
    threads.append(th)
for th in threads:
    th.join()
../_images/elapsed_time.jpg
这段代码只需要 4.3秒 就能跑完!PARL在这里做的改动只有两行代码,但是我们却看到了运算速度的极大提升,具体的效果对比可以看下图。
在我们下一个教程中,我们将会展示如何在不使用多线程的情况下实现并行计算。
Previous Next

© 版权所有 2021, nlp-ol@baidu.com. Revision 1fc50bf5.

Built with Sphinx using a theme provided by Read the Docs.