知行编程网知行编程网  2022-06-01 17:00 知行编程网 隐藏边栏 |   抢沙发  139 
文章评分 0 次,平均分 0.0

目前最好用的大规模强化学习算法训练库是什么?

来自 | 知乎   作者 | fmxFranky
https://www.zhihu.com/question/377263715/answer/1120555103
编辑 | 深度学习这件小事
本文仅作学术分享,著作权归作者所有,如有侵权,请联系删除
目前最好用的大规模强化学习算法训练库是什么?


paper方面我调研过Scalable/Distributed RL的相关的算法(Ape-X,R2D2,IMPALA,A3C,G-A3C,SEED_RL,Agent57等);框架库方面我因为项目需要也做过一定的调研,也基于很多轮子进行了一些使用。因此我觉得我应该可以分享一些经验


我觉得一开始题主要明确两个问题:“大规模/分布式”对与你来说具体指哪方面?你需要的大规模/分布式到什么程度?然后需要基于上面的结论根据你做的research或者项目来思考:“我需要做到什么程度的框架”。我们来依次讨论这两方面的问题


我了解的大规模/分布式目前主要有三方面:
1. 环境的并行:这里我特指单机条件下使用wrapper对环境进行封装,使得可以同时运行很多环境,打batch使用网络进行inference。当然这个其实不怎么算大规模,不过一般的Research我觉得可能环境并行就差不多了,上升不到真正的大规模
2. Actor的并行:这里主要是值Ape-X、A3C等Scalable RL算法中的Actor,其作用主要是在每个机器/线程上运行一个Actor同若干数量的envs进行交互来收集数据
3. Learner并行:这里主要是类似分布式深度学习,基于单机多卡或者多机多卡进行大batch的训练
大规模强化学习我觉得本质上首先需要在工程上解决“高效快速收集大规模数据”的问题,然后才是从算法角度解决“基于大规模数据进行高效神经网络训练”。下面说一下支持上面三种层面我推荐的相关库

环境并行

环境并行:环境的并行一般来说取决于你做的问题:假如你做的是Atari、Mujoco这种,其实绝大多数库都提供了相关的wrapper,一般是基于多进程/线程来同时跑若干个环境,最后提供一个vector_envs;如果你只是觉得DQN类算法基于一个环境交互训练太慢需要多几个环境同时交互那我觉得大多数框架基本上都可以满足需求。也就说如果你就是要在在单机多核单卡的机器上跑rl算法,更加需要关注的反而是这个框架有没有实现你想看想改的算法,复现了之后能不能打平paper里面的benchmark。这里我推荐几个repo,基本上复现的算法不少,效果有一定保证。


openai的baselines,还有第三方复现的stable baselines:优点是经典RL算法均有复现,是很多Research跑benchmark都使用的repo;缺点是太工程化,套娃严重,想读懂需要话很长时间,修改的话也比较费事,而且据我周围的人说貌似openai复现的dqn效果不是特别好


openai的spinningup:里面提供了经典Policy-based算法的复现,优点是写的通俗易懂上手简单,并且效果有保障,而且同时tf和Pytorch的支持;缺点是没有value-based的算法,做DQN系列的就没办法了


Intel AI LAB的Coach:这是一个基于tf1.14的rl库,实现了经典RL算法,甚至有一些上面两个没实现的算法它也实现了。优点我觉得是他对RL Framework的设计很模块化,比如整体流程,算法模块定义,网络定义,探索策略定义等等,把常见的算法全部分成相互独立的模块拼接到一起,让研究人员可以高效的focus到要修改的地方而不需要考虑其他部分。建议题主可以看一下他的design doc看看适不适合你的需求,同时也支持分布式和AWS训练等,支持绝大多数游戏环境;缺点的话可能是模块化的有点死,看代码学习结构的时候有点不太友好


Google的dopamine,实现了Distributional DQN的一系列算法,其他算法没有


UCB两个大佬开源的rlpyt:专门基于pytorch实现的rl框架,有单机/多机分配资源的黑科技,挂arxiv的paper里面介绍的也效果也不错。contributor以前也写过如何加速DQN训练的调参方法


Kei Ohta开源tf2rl:感觉和上面这个差不太多,基于的是tf2.0。我只看过里面实现的Ape-x,所以不过多介绍


Actor并行和Learner并行

Actor并行和Learner并行:如果你要做的算法就是类似Scalable RL topic的新算法,或者你使用的环境有运行限制(比如一台机器只能运行一个环境,我真的遇到过这种……),或者你的机器是单机多卡核数不多导致并行效率很慢但是你有其他的多CPU机器可以单独进行数据收集,那这种情况下你需要考虑的就是怎么在多机多核环境下并行运行很多环境,然后把分布式的数据收集起来。这个领域目前通用性高一些的据我了解主要是ray还有这两年在NIPS仿生骨骼人挑战上蝉联冠军的PARL。这些环境都可以单机多核和多机多核方便的拓展

Ray(含RLlib,tune)是UCB基于通用RL框架设计的框架,优点是涵盖了你能想到的一切有关RL可能用到的东西,包括使用redis进行Remote Procedure Call,distributed tf/pytorch,超参搜索调优,自定义trainer/environment/optimizer/policy。里面复现了Ape-X,D4PG,A3C,IMPALA,APPO,MADDPG,ES等算法(Scalable RL+Multi-Agent),效果也有保障,你只要学会了其实现思路分布式算法它都能搞定;缺点就是因为太大太general导致上手很困难,我看了rllib部分的源码

PARL:百度出品,基于PaddlePaddle的RL框架,其核心卖点一是使用了黑科技可以消除python多线程GIL锁的限制,使得可以高效利用多核CPU来环境并行。本质是还是基于RPC那一套让环境和agent step可以在远程集群上运行从而不使用本地资源。经过测试PARL的吞吐效率是比Ray高一些的,可能得益于其黑科技外加简易RPC流程(PARL使用的是zmq+pyarrow序列化简单object,ray可以序列化更加复杂的object),另外PARL里面也定义了Agent、Model、Algorithm类让研究人员高效修改算法。核心卖点二是PARL里面复现的算法是100%保证和paper里面的数值差不多的,这点其实我觉得大多数repo并不能做到这一点,恰恰对修改经典算法做Research来说这点反而额外重要;至于缺点可能就是要学PaddlePaddle,虽然目前里面增加了pytorch但是复现的算法还很少

在一些项目里面其实可能需要的是ray/PARL里面提供的远程通讯轮子而非全部,大规模并行的收集数据可能算法研发更加重要(纯属个人观点)

其他大规模分布式repo

其他大规模分布式repo:按照我调研过的Scalable RL算法来看,目前业界主流使用的基本都是基于Apex-X、R2D2的Actor-Learner-Buffer框架或者是类似IMPALA的框架,因此其实有很多repo都基于这两个两个算法进行复现,也就是说是没有其他算法就只有R2D2或者IMPALA,我也给题主推荐几个我调研过的repo,首先声明这两个我没有具体跑过,只是看了一下arxiv挂的paper,感觉还不错^_^,至少大厂出品品质有保证

Google Research的SEED_RL:ICLR2020 google的提出的分布式框架,在repo中基于Atari,google-football,DM Lab环境复现了R2D2和IMPALA,而且耗时更短,主要原因是他们让环境集中step,基于gRPC每次返回很大batch的state,然后把inference和training都放在TPU上面(详情可以去读他们的paper)


Facebok AI Research的TorchBeast:也挂了arxiv,主要是基于python pytorch复现了IMPALA,支持单机和多机,通信部分和batch 打包部分是基于C++写的,他们的目标是让研究者只需要关注python算法部分


Facebook AI Research的ELF(pytorch官方也实现了一个简易版只针对围棋的ELF):田渊栋大神的代表作之一,适用于RTS的分布式训练框架。具体可以看repo里面的tutorial


另外额外提一个repo,NVIDIA Lab的CuLE:把Atari全部放到了GPU上面,一块卡可以跑上千个环境,官方提供了一些examples,其中基于CuLE的A2C+VTrace,一块卡,在Pong游戏上3min跑到19分。如果是做Atari的话可以考虑一下这个(详情见repo中提到的paper)

总结

总结一下,没有所谓的“最好的大规模强化学习框架”,只能说基于题主你的需求来选框架,你需要什么程度的并行,然后希望框架做到什么程度,甚至可能出现市面上开源框架都不符合你要求的情况,这种情况可能就只能基于RPC通讯的轮子自己造框架的了。比如近几年几家大厂(OpenAI,DeepMind,腾讯等)在现实游戏(Dota2,SC2,王者荣耀等)上面的进展,都是肯定要自研框架的。题主如果是偏Research的话可能要根据研究的topic,使用的环境等方面来选择框架;如果是有很多机器来完成一些项目的话可能需要根据项目的实际情况来确定并行程度再来看市面上的框架有没有适合的。当然我上面提到的RL框架一定是不全的,只是基于我的调研给题主进行的推荐,而且其实还有很多个人实现的repo但是我发现都没有什么可复现性保证和比较广的算法覆盖范围所以就没推荐了,可能会有更好的框架,如果题主发现了记得告诉我一下~

<pre style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><p style="max-width: 100%;letter-spacing: 0.544px;white-space: normal;color: rgb(0, 0, 0);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;widows: 1;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;box-sizing: border-box !important;overflow-wrap: break-word !important;">—</span></strong>完<strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;box-sizing: border-box !important;overflow-wrap: break-word !important;">—</span></strong></span></strong></span></strong></p><section style="max-width: 100%;letter-spacing: 0.544px;white-space: normal;font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;widows: 1;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section><p style="margin-bottom: 15px;padding-right: 0em;padding-left: 0em;max-width: 100%;color: rgb(127, 127, 127);font-size: 12px;font-family: sans-serif;line-height: 25.5938px;letter-spacing: 3px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;color: rgb(0, 0, 0);box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 16px;font-family: 微软雅黑;caret-color: red;box-sizing: border-box !important;overflow-wrap: break-word !important;">为您推荐</span></strong></span></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;">有你的学校吗?2020软科中国大学排名发布!</p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="font-size: 14px;">GitHub重大更新:在线开发上线,是时候卸载IDE了</span></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;">「最全」实至名归,NumPy 官方早有中文教程</span><br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"  /></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="color: rgb(87, 107, 149);-webkit-tap-highlight-color: rgba(0, 0, 0, 0);cursor: pointer;max-width: 100%;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;">史上最烂的项目:苦撑12年,600多万行代码...</span></p><p style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;">一文概览2D人体姿态估计</p></section></section></section></section></section></section></section></section>
目前最好用的大规模强化学习算法训练库是什么?

本篇文章来源于: 深度学习这件小事

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享