【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

PaddlePARL 1.1:一个修饰符,实现并行强化学习算法

  • 2019-04-25
  • 本文字数:2079 字

    阅读完需:约 7 分钟

PaddlePARL 1.1:一个修饰符,实现并行强化学习算法

强化学习是近年来机器学习领域的研究热点,在游戏操作、围棋对弈、多智能体控制等场景取得了不少令人瞩目的进展。在逐步挑战这些难题的同时,训练强化学习模型的计算力要求也在大幅度提升。虽然显卡设备经历了 K40/P40/V100 等提升,CPU 主频也在不断提升,但是大规模的并行化仍然是提供巨大算力的主要手段。在并行化这个问题上,python 由于其全局锁的存在使得自身的多线程在计算密集型任务上显得鸡肋。多进程虽然可以绕开全局锁问题,但是进程间通讯会提升开发复杂度,并且性能提升空间受限于机器的 CPU 数量。本篇文章为大家带来 PARL 在并行算法优化方面的最新进展。

PARL1.1

PARL 是一款基于百度 PaddlePaddle 打造的深度强化学习框架,继 1.0 版本开源了 NeurIPS 2018 假肢挑战赛冠军训练代码以及主流强化学习模型后,我们发布了聚焦于并行的 1.1 版本。PARL1.1 新增支持高质量的并行算法,包括 IMPALA、GA3C、A2C,并提供了高性能的并行开发接口。以通过 PARL 实现的 IMPALA 算法的评估结果为例,在雅达利这个经典评测环境中 ,pong 游戏最快可在 7 分钟内达到 20 分,breakout 游戏在 25 分钟达到 400 分(1 个 P40GPU +32CPU)


并行修饰符

PARL1.1 通过一个简单的修饰符(@parl.remote_class)即可实现并行化。数据预处理以及 simulator 仿真等计算密集型的任务经过这个修饰符之后,会自动部署到用户指定的计算资源上运行,不再占用主线程的计算资源。下面我们先通过一个简单的 Hello World 程序来了解这种设计的简单易用之处。



并行化改造:单看 Agent 的定义是一个很普通的 python 类定义,但是通过 @parl.remote_class 修饰之后,Agent 就完成了并行化的改造。


Server 端获取计算资源:通过把 Agent 类部署到别的机器上或者 CPU 集群中,Server 这端通过 RemoteManager 就可以获取到远端的 Agent 类,此后在 Server 这边可以通过获取到的 Agent 执行任何函数。


远端计算资源调用:但与没有修饰符的 Agent 不同的是,并行化后的 Agent 执行所有函数时不再占用当前线程的计算资源,Server 这边只需要执行 Agent 的计算函数,等待部署在其他计算资源上的 Agent 计算完成之后返回结果。


从这个简单的例子可以看出,用户实现单机到多机并行的改造成本相当低——利用修饰符来 Wrap 一个需要在远端调起的类。在 Server 端可以通过相应接口获取远端的对象,通过执行该对象的函数就可以实现远端计算资源的调用。

新增并行算法示例:IMPALA

PARL1.1 新增了对 IMPALA、A2C、GA3C 等并行算法的支持,下面以实现难度最大的 IMPALA 算法为例,介绍下如何通过并行修饰符轻松实现这个算法。IMPALA 是强化学习领域目前引用数量最多的并行算法,相对之前主流的 A3C 算法拥有更高的数据吞吐量以及收敛速度。IMPALA 算法为了实现性能的最大化,将整个实现分为 Actor/Learner 两个部分:Actor 负责与 simulator 交互,生成数据提供给 Learner;Learner 负责收集数据来进行训练,同时把最新的模型推送给 Actor。



在 IMPALA 算法这种 Actor 与 Learner 的组成结构中,Actor 与 Learner 间需要进行两种数据交互:训练数据传输以及模型传输。如果用传统的多进程实现这种数据交互的话,用户需要维护两个单独的进程间队列来进行数据传输,开发成本相当高。


在 PARL 中,我们通过 parl.remote_class 对 Actor 进行并行化改造,就可以像在本地操作一样对 Actor 进行操作,比如 Leaner 需要给 Actor 传输参数,只需要在 Learner 端执行 actor.set_param(params)函数即可。从这里可以看出,在实际的编码过程中,用户不需要关心数据是如何通过网络传输过去的,也不需要维护多线程队列这些数据结构来实现数据的同步,用户写并行代码和写多线程代码一样简单,十分容易上手。



目前,IMPALA 算法的实现已经完整开源在 PARL 仓库中,相关的性能指标见下图。



值得一提的是,PARL 继续保持着 1.0 版本的高复用性,用户如果想在别的环境中尝试 IMPALA 算法只需要定义自己的 model(前向网络),然后需要复用 algorithms 下的 IMPALA 算法即可。

性能对比

为了让用户更好地了解 PARL 的并行性能,我们将 PARL 与基于 Ray 实现的强化学习并行框架 Rllib 进行对比。Rllib 是伯克利开源的分布式强化学习框架,是目前开源社区中对于分布式强化学习训练支持最好的框架之一。在强化学习框架中,最为重要的一个指标是单位时间内的数据吞吐量,也就是在同等计算资源下对比不同框架实现同样的算法后的数据收集速度。为此,我们对比了 PARL 以及 Rllib 实现的 IMPALA 算法在雅达利游戏上的数据吞吐量(1 P40 GPU+32CPU):



可以看到,PARL 在单位时间内的数据收集量相对于 Rllib 提升了 159.4%,这说明 PARL 在并行性能上达到了业界领先的水准。


第二个对比的指标是收敛速度,这里我们着重对比了在一小时内两个框架在多个 Benchmark 上的收敛效果见下图。



表格中的数据体现了,在 4 个 Benchmark 上跑多次实验的整体指标比 Rllib 更高。

结束语

可以看到,PARL 1.1 的并行设计非常简单易于上手,而在并行性能方面也具有很大的优势。希望为广大强化学习的研究者提供更好的支持和帮助。


项目地址:https://github.com/PaddlePaddle/PARL


2019-04-25 11:133756

评论

发布
暂无评论
发现更多内容

Mac 和 Windows 共享一套鼠标键盘

TroyLiu

效率 Mac windows sharemouse 共享键鼠

#JiraHero:Soumen Deb——重塑 Jira Software 中的 Bug 工作流,提高可见性、简化开发流程

Atlassian

DevOps 敏捷 工作流 Atlassian Jira

毕业总结:

Geek_59dec2

毕业总结

在线CSS美化格式化工具

入门小站

工具

架构训练营-模块一

流火

绝悟AI再次亮相GDC,展示人机协作与AI内容生成能力

科技热闻

并发与多线程之线程安全篇

Linux服务器开发

线程 多线程 并发 后端开发 Linux后台开发

NFT数字藏品NFT交易系统平台开发

薇電13242772558

NFT

【直播预告】「不确定性局势下的金融安全保障」,拒绝纸上谈兵,破局合规挑战

FinClip

安全 金融 数据安全 合规性

在线HTML5,CSS3,VueJS,jQuery运行测试练习工具

入门小站

工具

C语言总结_格式化打印函数、字符串、运算符

DS小龙哥

3月月更

Prometheus搭乘华为云GaussDB(for Influx):让监控数据更安全

华为云开发者联盟

安全 Prometheus 华为云 GaussDB(for Influx) 监控数据

一个编译问题带你了解 Flutter Web 的打包构建和分包实现

CRMEB

加密项目必修科目:代币经济学

CECBC

特性更新!DistSQL 集群治理能力详解

SphereEx

Apache 数据库 ShardingSphere SphereEx

不想业务被中断?快来解锁华为云RDS for MySQL新特性

华为云开发者联盟

MySQL 事务 华为云RDS for MySQL 应用无损透明 业务中断

模块一:作业

本人法海

「架构实战营」

写作一

ASCE

【架构实战营】-模块一作业

,lazy

「架构实战营」

Linux之nohup命令

入门小站

Linux

黄金排障场景之Coredump

焦振清

稳定性 稳定性治理 coredump 故障复盘 90-2-5-10

该怎么认识数字藏品

CECBC

高并发场景下优化加锁方式:线程等待与通知机制

华为云开发者联盟

线程 高并发 死锁 加锁 互斥锁

【架构学习06】——拆分电商系统为微服务

tiger

架构实战营

测试开发【Mock平台】03 基础:初识Antd React 开箱即用中台前端框架

MegaQi

React 测试平台开发教程 测试干货

Altium Designer

謓泽

3月月更

模拟小程序电商的微服务拆分

AragornYang

架构训练营 架构实战营

数字经济的重要基石——数据安全

CECBC

3分钟带你搞懂Vue双向绑定原理及问题剖析

Bug终结者

CSS JavaScript vue.js

手绘流程图讲解spark是如何实现集群的高可用

华为云开发者联盟

spark 高可用 集群 Worker master

从 0 到 1 建设小程序可观测性

方勇(gopher)

小程序 可观测性 SRE 服务治理 低代码开发

PaddlePARL 1.1:一个修饰符,实现并行强化学习算法_AI&大模型_飞浆_InfoQ精选文章