首页 > 科技 > 纯Python实现!Facebook发布PyTorch分布式强化学习库

纯Python实现!Facebook发布PyTorch分布式强化学习库

Facebook于近日发布了PyTorch中用于强化学习(RL)研究的平台:TorchBeast。

TorchBeast实现了流行的IMPALA算法的一个版本,用于RL代理的快速、异步、并行训练。

另外,TorchBeast将简单性作为明确的设计目标:提供了纯Python实现(“ MonoBeast”)以及多机高性能版本(“ PolyBeast”)。

在后者中,部分实现是用C ++编写的,但是与机器学习有关的所有部分都使用PyTorch保留在简单的Python中,使用OpenAI Gym接口提供了环境。

这使研究人员可以使用TorchBeast进行可扩展的RL研究,而无需Python和PyTorch之外的任何编程知识。

在论文中,研究人员描述了TorchBeast的设计原理和实现,并证明了它与Atari上的IMPALA表现相当。

TorchBeast是根据Apache 2.0许可以开源软件包的形式发布:

https://github.com/facebookresearch/torchbeast.

近年来,由于深度学习和新型GPU硬件的兴起,强化学习引起了人们的极大兴趣,克服了诸如国际象棋,围棋和其他棋盘游戏的重要挑战,证明了学习视觉输入策略的、处理复杂的战略环境以及多代理设置的能力。

然而,分布式RL架构缺乏编写良好的、高性能的、可伸缩的实现,这阻碍了已发布工作的复制,并在很大程度上限制了新工作的开发。

基于IMPALA代理DBLP的方法已经在诸如《星际争霸2》等领域获得了显著的成就。尽管构建在TensorFlow tensorflow2015-白皮书上的IMPALA代理的权威实现已经作为开源软件发布,但倾向于PyTorch的研究人员的选择较少。

TorchBeast旨在通过IMPALA的简单易读的PyTorch实现来帮助实现公平的竞争环境,该实现从头开始设计为易于使用的,可伸缩的且快速的。

理想情况下,研究人员应该能够快速地原型化他们的想法,而不需要考虑低级语言的脑力开销,也不需要考虑Python的计算开销,因为这会对性能产生巨大的影响。这两个目标之间存在着矛盾。将性能考虑在内的框架构建可能会导致严格的约束,从而降低研究人员实现其想法的速度,甚至影响其研究方向。虽然TorchBeast必然也依赖于工程假设,但Facebook采用了一些设计原则,目的是在实现新想法时为研究人员提供最大的影响力:

TorchBeast不是一个框架

TorchBeast存储库使用IMPALA架构实现了某种类型的代理和环境。它不是作为一个依赖项导入的,而是按照特定研究目标所需的任何方式进行fork和修改。与传统的软件工程相比,研究代码的半衰期较短,使得该方法在深度强化学习领域更加自然。

所有的机器学习代码都是用Python编写

尽管TorchBeast的PolyBeast变体使用c++组件来实现排队和批量处理逻辑,但研究人员通常不需要接触这些组件。在特殊的情况下,必要的更改不应该涉及到在代码库中挖掘许多层的抽象。

一个文件统管所有

虽然没有严格地打包成单个文件,但是TorchBeast试图保持“只有一个文件”的理想状态。以PolyBeast为例,所有的代理代码都存在于PolyBeast .py中,而环境代码则存在于polybeast_env.py中。不需要其他文件来交换代理神经网络模型或用于训练的特定环境。

可适应更复杂变化

一些研究方向有更具体的需求。例如,当使用TorchBeast来训练RL代理进行网络拥塞控制mvfst-rl时,由于环境模拟器的技术限制,客户端和服务器在TorchBeast中的角色需要颠倒。这很容易通过fork TorchBeast存储库和修改“actor pool”逻辑来实现。

另一个涉及在c++中更改逻辑的扩展示例是将rollout逻辑从执行交叉集批转移到填充(通过确保每个批包含最多一个集的数据,这使得使用某些模型(如注意力)更加容易)。然而,尽管这些改变是可以直接完成的,但是我们相信大多数的研究需求并不属于这一类,并且可以通过改变代理参数化和环境来轻松地使用TorchBeast。

TorchBeast有两个变体,被称为“MonoBeast”和“PolyBeast”。

MonoBeast变体的主要目的是方便安装和入门(除了Python和PyTorch外,不需要其他主要依赖项)。

另一方面,PolyBeast利用谷歌的gRPC库gRPC实现进程间和透明的跨机器通信。它还实现了一些重量级的操作,比如作为用c++编写的Python扩展模块进行批处理。这使我们能够实现一些高级特性,比如以更复杂的安装过程为代价的动态批处理。

这两个版本都使用多个进程来解决多线程Python程序的技术限制。

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/kj/148625.html