找回密码
 立即注册
查看: 737|回复: 5

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

[复制链接]

1

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2023-5-8 10:02:29 | 显示全部楼层 |阅读模式
比如,撑持灵活的环境定义,模型定义,多机多卡训练,包含多种常见的强化学习算法,样例丰硕等等
回复

使用道具 举报

0

主题

5

回帖

20

积分

新手上路

积分
20
发表于 2023-5-8 10:02:36 | 显示全部楼层
推荐一下Agent Learning Framework(ALF) 不敢说最好用的,不过个人觉得还算比较好用
之前在地平线时参与的项目https://github.com/hobotrl/hobotrl/tree/master/hobotrl 后期变成 Agent Learning Framework https://github.com/HorizonRobotics/alf
ALF由徐伟老师(百度杰出科学家,PaddlePaddle项目的核心创始人和曾经的负责人)亲自操刀。具体支持的算法和特性可以参见页面。一方面,框架的工程实现非常好,容易部署、方便大规模训练。另一方面,框架的抽象非常到位,方便复用算法中的各类组件和快速更改算法。另外,最吸引人的是,该框架囊括了很多具有挑战性的任务,比如导航,抓取和放置物体,踢球,人形机器人的行走等:














我们当时也曾基于hobotrl和ALF做了一些现实性的任务,比如自动驾驶的决策部分、星际争霸(https://github.com/witwolf/pysc2-rl)、打乒乓球、机械臂抓取以及训练的策略在真实机械臂上的执行等一系列任务,发几个手机里还能找到的之前录的视频:

另外我们还做了一个强化学习的模拟器环境SocialRobot ,里面有一系列的任务和不同种类的机器人本体 https://github.com/HorizonRobotics/SocialRobot  其中的大部分任务都有ALF中的训练而来的例子,感兴趣的同学可以关注一下。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

0

主题

1

回帖

2

积分

新手上路

积分
2
发表于 2023-5-8 10:03:23 | 显示全部楼层


日前,清华大学人工智能研究院基础理论研究中心发布了深度强化学习框架“天授”,代码已在GitHub开源(https://github.com/thu-ml/tianshou)。这也是继“珠算”可微分概率编程库之后,该中心推出的又一个面向复杂决策任务的编程库。
天授的核心开发者接受了新智元专访,团队成员着重强调了天授系统的5大技术优势:代码简洁、模块化、可复现性、接口灵活以及训练速度快。相较于其他PyTorch强化学习框架,天授0.2具有结构简单、二次开发友好的特点,整个框架代码1500行左右,支持主流的强化学习算法DQN、A2C等,同时设计了灵活的接口,用户可以定制自己的训练方法。针对现有平台训练速度慢的缺点,天授通过将并行采样与缓存机制相结合提高了采集数据的速度。同时,整个框架基于模块化的原则进行设计,在其上实现常见的强化学习算法仅需不到100行的代码。天授开源后引起很大关注,在GitHub上很快获得超过900个星标




天授和几大主流强化学习框架性能对比
“天授”一词来源于《史记》,意为“取天所授而非学自人类”,刻画了强化学习通过与环境进行交互自主学习,而不需要像监督学习一样需要大量人类标注数据。清华大学团队针对目前多数既有强化学习框架(如RLLib和BaseLine)等无法支持高效、定制化的训练场景的问题,继承了首版TensorFlow“天授0.1”版在模块化等方面的优势,推出了基于PyTorch框架的“天授0.2”版本。
天授团队阎栋博士和翁家翌同学已入驻新智元小程序,欢迎大家点击下方小程序参与互动。
小升初开始写代码,大三进入Bengio实验室

在“天授”0.2的优化设计过程中,清华大学的大四学生翁家翌起到了关键作用。
说起来,翁家翌确实是履历优秀,小升初的暑假就开始写代码。高二作为全国青少年信息学奥林匹克竞赛(NOI)选手进入省队。高中时期就开始钻研微积分、线性代数,大一的基础课程轻车熟路拿高分。
“我高中的时候非常热衷于打竞赛,打竞赛用的是c++,比如说在一个公开的OJ上面刷题,然后我非常热衷于用尽量少的代码写出尽量快的程序,我一直对自己有这种写代码的要求。” 翁家翌谈到自己高中时期的爱好时如是说,正是这种深厚的积累为日后开发天授奠定了基础。
大二上学期翁家翌加入了朱军教授领导的TSAIL实验室,正式开始了RL的漫长征程。大三暑假期间更是去到加拿大图灵奖获得者Bengio教授的实验室,深入开展了RL和NLP的研究。
我的目标就是要实现一下对方教授给的 idea,这个 idea就是有点类似于如何把人的意识给实现出来。这个有点难,其实大家都在做这个东西,只不过看谁先能做出来,虽然离实现还挺遥远,但是我们在努力。” 翁家翌告诉新智元。




翁家翌
大四科研阶段十分辛苦,经常都要忙到很晚。课余时间,翁家翌和所有人一样,喜欢听音乐,上B站看视频刷知乎。
值得一提的是,翁家翌师从的Yoshua Bengio是深度学习三巨头之一,因其在深度神经网络(deep neural network)领域的开创性贡献刚刚获得了ACM 图灵奖。
受困VizDoom,开启强化学习框架的自研之路

在2018年的 IEEE CIG 计算智能与游戏大会上,朱军教授领导的人工智能创新团队 TSAIL 在第一人称射击类游戏《毁灭战士》(Doom)AI 竞赛 VizDoom(Visual Doom AI Competition)上荣获竞赛 Track 1 的预赛和决赛冠军,及 Track 2 预赛冠军、决赛亚军,成为赛事历史上首个中国区冠军。当时翁家翌作为团队核心成员之一也参与其中。




VizDoom AI竞赛
“从17到18年,我们积累了两年的比赛经验,除了成绩上的进步,我们对强化学习算法在实践中的表现,及其背后的数学机制都有了更深入的了解,我们把这些经验和教训放在了天授0.1和0.2里面。”团队成员阎栋博士告诉新智元。“也正是在比赛过程中,我们产生了做天授的动力,我们发现对于这种高度特化的复杂强学习的训练场景,像baseline、RLlib这样现有的框架很难满足我们的要求。”
在老师和同学的评价中,翁家翌不论是在比赛还是天授开发过程中都起到了非常核心的作用。苏航老师评价说,“他是一个科研能力很出色,动手能力很强的学生。”
“我们清华大学TSAIL团队,希望能够在不确定性、不完全信息的决策方面能够做出贡献,推动以强化学习为代表的智能决策方法的发展。” 苏航老师说。




关于未来的工作,团队负责人朱军教授表示,将在既有工作基础上,从三个维度拓展“天授”框架,从算法层面来讲,将对目前主流强化学习算法进行更加全面的支持,包括model-based RL, imitation learning等;从任务层面来讲,将进一步支持包括Atari、VizDoom等复杂任务;从性能上来讲,将进一步提升框架在模型性能、训练速度、鲁棒性等方面的核心指标,更好地为学术界服务。
天授0.1到天授0.2 ,1500行代码实现所有功能

天授从16年开始迭代,2017年底正式开发0.1版本,项目的初衷是发现当时现存的强化学习框架用起来很不方便:不够模块化,很难在其上做修改和二次开发,所以0.1版本开发的核心宗旨是模块化。
“天授0.1的主要工作是将不同论文中共用的infrastructure,比如memory、optimizer,都给抽象出来,在结构设计和工程实践上做了很多考虑,2017年的时候PyTorch还不成熟,所以团队选择的是Tensorflow。” 阎栋说。
强化学习社区是一个非常丰富的社区,他们所要解决的不同任务和场景之间差异巨大,比图像分类等任务要复杂得多,所以说它的模块化更加困难,天授0.1解决了部分挑战,但并没有完全解决。
天授0.1可以同时支持四个算法,它们的核心组件是相同的比如replay memory,以及optimizer。只需给每个算法设置自己的损失函数,然后去指定自己的网络结构就可以了。
开发过程远非一蹴而就,天授0.1的代码编写的过程可谓是“批阅十稿,增删五次”。在之前的天授版本中,实验室成员阎栋、邹昊晟、任桐正都做出了大量贡献,经过多次的删减打磨出了天授0.1。“第1版的时候我提交了17,000行代码,删去了8000多行。” 阎栋表示。最终优化后的天授0.2,1500行代码就实现了现存几乎所有的强化学习的流行的算法。
天授0.2继承了天授0.1的模块化特性。相比之下,最主要的改变是家翌使用了PyTorch。从去年以来PyTorch底层框架逐渐变得非常成熟,它更灵活,跟Python绑定的更多,具有更多动态支持,便于调试,于是他用PyTorch继承了天授0.1的模块化设计,然后在0.2中用PyTorch重新实现了底层的基本组成模块,对replay memory积累数据、多个环境并行训练,以及trainer从环境中采样策略等多个部分都进行了优化。
在所测试的典型任务中,天授平均来说会比其他框架快一个量级。翁家翌凭借着他丰富的实践经验对天授0.1进行了重新设计和实现,使其在训练速度和性能上实现了大幅提升
翁家翌强调,“我借鉴了之前一版天授的设计理念,比如说把各种replay buffer全部并成一起,还有比如用collector来统一各个数据,各个策略跟环境交互的过程等等。这些给我开发天授第2版带来了很大的启发,让我少走很多弯路。”
说到AI方向的理想,翁家翌说,“我想在计算机领域多实现一些能够改变我们日常生活方式的一些项目,然后真正能够应用到千家万户。” 目前他已经收到卡内基梅隆大学(CMU)的录取通知书。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

1

主题

3

回帖

17

积分

新手上路

积分
17
发表于 2023-5-8 10:04:21 | 显示全部楼层
以下回答纯属个人认知,欢迎交流讨论~
paper方面我调研过Scalable/Distributed RL的相关的算法(Ape-X,R2D2,IMPALA,A3C,G-A3C,SEED_RL,Agent57等);框架库方面我因为项目需要也做过一定的调研,也基于很多轮子进行了一些使用。因此我觉得我应该可以给题主分享一些经验
我觉得一开始题主要明确两个问题:“大规模/分布式”对与你来说具体指哪方面?你需要的大规模/分布式到什么程度?然后需要基于上面的结论根据你做的research或者项目来思考:“我需要做到什么程度的框架”。我们来依次讨论这两方面的问题
我了解的大规模/分布式目前主要有三方面:

  • 环境的并行:这里我特指单机条件下使用wrapper对环境进行封装,使得可以同时运行很多环境,打batch使用网络进行inference。当然这个其实不怎么算大规模,不过一般的Research我觉得可能环境并行就差不多了,上升不到真正的大规模
  • Actor的并行:这里主要是值Ape-X、A3C等Scalable RL算法中的Actor,其作用主要是在每个机器/线程上运行一个Actor同若干数量的envs进行交互来收集数据
  • 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并行:如果你要做的算法就是类似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:按照我调研过的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但是我发现都没有什么可复现性保证和比较广的算法覆盖范围所以就没推荐了,可能会有更好的框架,如果题主发现了记得告诉我一下~
回复

使用道具 举报

0

主题

1

回帖

8

积分

新手上路

积分
8
发表于 2023-5-8 10:05:09 | 显示全部楼层
本科毕设中期之前摸鱼凑数的成果,自卖自夸一波:
https://github.com/thu-ml/tianshou这个小轮子代码少(目前除去atari和mujoco的wrapper之后,7个算法加上replay buffer在符合pep8规范下一共1100行),实现简单,速度还挺快,平均10秒内一个PG/DQN/A2C在CartPole,反观某些平台代码又臭又长100万step花一个小时还train不出来(狗头保命
下图是一个三秒在我自己笔记本上用PG train出来的CartPole,其实还有更快的(有1.6s一个DQN的)但就这样吧,再录一次屏幕有些麻烦:(正式训练之前等待大概三秒我测了测是net.to('cuda')要申请一堆内存所花的时间)


说一下其他框架我认为的不足之处:(反正我今后再也不发RL的paper,直接在这里开始喷了

  • OpenAI Baselines: 代码写的和***一样早有听人耳闻,各种不遵守规范乱来,函数调来调去也就算了,我train一个DQN都很难train上去……大概是我太菜了8
  • rllib:不得不说是一个很好的框架,但是包的也太heavy了,class一层包一层,果然是Google的风格和TensorFlow有的一拼,想要更改某一个算法的某一个地方要读一圈代码+费好大劲才能改……大概还是我太菜了8
这两个应该是RL平台star最多的两个了,其他比如Spinning up支持的算法有限(只有Policy-based一块的),Dopamine 好像只有DQN那一个family的。
只针对PyTorch的:PyTorch目前的RL实现还没做到像rllib那么成熟,有几个分散的实现但我觉得不是太好,而且没有做到真正模块化。其实用PyTorch写RL代码真的要比Tensorflow少太太太太太太太多了!

  • PyTorch DRL 是GitHub我找了一圈之后PyTorch RL平台Star最多的,侧重于实现hierarchical RL的算法,但是代码emmm和baseline好像几乎是同一个风格……还难改!(2.3K star我真的不知道怎么来的,可能就是时间早?
  • rlpyt是PyTorch RL star第二多的,目前(15000行)实现的功能和我没到1500行代码实现的功能几乎一样,代码也是一层包一层,继承了一堆theano的历史代码,文档不全,我想改example跑gym的cartpole都跑不起来……用户体验不太行,但也至少比上面那个好一些。
剩下的就没对比了,结果在这里:


Tianshou的优势:

  • 实现简洁,不拖泥带水,是一看就懂的那种轻量级框架,方便修改来实现idea水paper和Berkeley争抢一席之地(x
  • 速度快,在已有的toy scenarios上面完胜所有其他平台,夸张到比如3秒一个Policy Gradient连我自己第一次跑出来都不敢相信
  • 模块化,把所有policy都拆成4个模块,只要完善了这些给定的接口就能在100行之内完整实现一个强化学习算法
  • 可复现性:我把GitHub Actions给用起来了,每一次单元测试除了基本功能的测试之外,还包括针对所有算法的完整训练过程,也就是说一旦有一个算法没办法train出来,单元测试不给过。据我所知,目前RL平台应该没一个敢这么干的(因为都太慢了
  • 接口灵活:用户可以定制各种各样的training方法,而且没几行就能实现,可以参考这里
欢迎大家使用天授这个小轮子,它会近期(<del>等我先水过0331毕设中期答辩之后</del>已经划水飘过了)完善所有文档和教程,增加更多的example(比如更大规模的atari),目前虽然只实现了model-free,但是一些诸如Multi-agent的功能也会添加(<del>因为这是我毕设一定要搞的东西……搞不出来就GG</del>)和导师商量了下可以all in tianshou了!
最后如果您觉得它好用,给个GitHub star如何?别光点赞,谢谢各位大哥大姐(鞠躬
也许Tianshou还不是最好用的那个,但是它会朝着这个方向前进。以及顺带感谢学弟 @张鸣昊 帮忙写了些example和上手测评了一下。
看机器之心下面有人对project名称有误会……是这样的:百度百科 - 天授,取天授的意思是没有“老师”来教,而是自己通过跟环境交互学习的。
完整版故事在这里:https://mp.weixin.qq.com/s/68r8evMK2t1zE-qs81WVGQ,其实也就是评论区内容...
update:marl已加,今天下午(7.22)发新版本0.2.5
自定义环境请先阅读这个:https://tianshou.readthedocs.io/en/stable/tutorials/cheatsheet.html#user-defined-environment-and-different-state-representation

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

0

主题

1

回帖

16

积分

新手上路

积分
16
发表于 2023-5-8 10:05:44 | 显示全部楼层
强烈不推荐openAI的codebase
Github上写得清晰的baseline多起来了就应该淘汰根本没有可用性的轮子。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|T9AI - 深度人工智能平台 ( 沪ICP备2023010006号 )

GMT+8, 2024-9-20 01:11 , Processed in 0.066106 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表