强化学习并行算法:决策速度提升

0 前言:为什么要使用并行算法?

在线交互采集样本是个比较耗时的过程。多个环境同时并行采集数据,会加速训练。强化学习在采集样本侧,也就是和仿真环境进行交互部分,需要的更多的是cpu资源,而在训练模型侧,可以利用GPU加速训练,提高训练速度。

1 目前常见的并行算法

Asynchronous reinforcement learning:如A3C,GA3C,IMPALA,seedRL等。

Synchronous reinforcement learning: Synchronous advantage actor critic (A2C),还有OpenAI Baselines里面实现的算法ACKTR, ACER, PPO都是同步的方式的。还有Decentralized distributed PPO (DD-PPO)

RAY框架由于程序内部可以帮你实现了资源的高效利用,而且接口文档和说明也很完善,使用起来也比较便捷,所以业界用的很多,如果用其他方式,那么需要自己编码对计算资源进行调度使用,会稍稍麻烦些。

1.1 A3C 

A3C 首先有一个中心的Shared Model,每一个woker里面都有自己的actor和learner,首先最开始的时候,每一个woker先从Shared Model 拷贝一份参数,此刻每个worker参数是一样的,之后就基本各干各自,例如woker i 使用自己的env,例如每走4steps,采集到数据,使用这些数据和当前learner自身的参数(算梯度的时候一般跟此刻自身的参数是有关的)算出梯度,把梯度上传到Shared Model(注意此时Shared Model的参数可能跟worker i 的learner已经不一样,因为有可能被其他worker的梯度更新了),Shared Model再利用从 worker i 收到的梯度更新自身参数,然后再把自己更新后的参数传递给worker i。 所以就会有前面提到的stale policies的影响和梯度更新不大准的问题了。

1.2 IMPALA

与A3C的区别是每一个worker中只有actor,没有自己独立learner;但会有一个或者多个中心的learner;worker负责采样收集数据到 data queue就行,learner负责训练更新参数就行;然后worker定时从learner中拷贝新的参数来覆盖掉自己的就行。

学习过程:

  • 每个Actor单独定期地从Learner同步参数,然后进行数据收集(s, a, r, s')。
  • 所有Actor收集的数据都会即时存储到数据采样队列(queue)里。
  • 当队列的数据达到mini-batchsize时,Learner开始梯度学习,并更新其参数。
  • Actor与Learner互不干扰,Actor定期从Learner同步参数,Learner定量学习更新参数。
  • Learner也可以是分布式集群,这种情况下,Actor需要从集群同步参数。
  • Actor一般使用CPU,Learner使用GPU。

               图:IMPALA 单 Learner(左图)和多 Learner(右图)下的系统结构拓扑图

作者提出了一种新的分布式强化学习算法,架构上与GA3C和第二种Batched A2C有一些类似之处,该工作最大的创新是提出了V-trace算法,对off-policy现象做了一定的修正。在IMPALA架构中(见下图),每个Actor都拥有一个模型副本,Actor发送训练样本给Learner,Learner更新模型之后,会将新模型发送给Actor。和Batched A2C不同的是,在整个过程中,Actor和Learner一直在异步运行中,即Learner只要收到训练数据就会更新模型,不会等待所有的Actor;而Actor在Learner更新模型时依然在采样,不会等待最新的模型。

数据收集和训练端完全分离,定期从 Learner 到 Actor 传递最新的神经网络模型,而 Actor 在收集到一定量的数据后(即 observations)发送给 Learner。如果有多个 Learner,他们还会定期同步神经网络的梯度(即分布式深度学习中的数据并行模式)。

IMPALA在神经网络模型比较简单的时候性能很好,但当神经网络变得复杂的时候,该架构也有自己的瓶颈。主要的问题有以下几点:

  1. 前向采样放在Actor上执行,因为Actor是运行在CPU上的,所以当神经网络变复杂之后,inference的耗时就会变得很长,影响最终的运行效率
  2. Actor上执行了两种操作,一个是环境的step,另一个是行为策略采样。很多游戏都是单线程实现的,而神经网络的计算则可以使用多线程加速,这两种不同的处理方式整体上会降低CPU的使用率
  3. 当模型很大的时候,模型参数的分发会占用大量的带宽

1.3 GA3C

worker没有自己的actor,只有一个中心的model,线程learner中更新的是这个model的参数,predictor也是使用这个model来给env预测动作。虽然减少了policy lag,更加接近on-policy,但是也存在stale policies

模型架构及学习过程:

  • 整体采用的是批处理策略,即缓存到达batch size后统一处理;
  • 每个Agent(Worker)负责收集数据(s, a, r, s'),注册到队列Training Queue,由Trainer管理供以后训练使用;
  • 但Agent不负责采样本身π(a|s),而是将需求注册到队列Prediction Queue,由Predictor管理;
  • Predictor是个While True Thread,当缓存到达其batch size后,调用GPU上的策略预测网络π(a|s)进行采样;
  • 类似地,Trainer也是个While True Thread,满足batch size后调用GPU进行训练。

1.4 SEED RL

从图中可以看到,这个架构和GA3C非常类似,但是有两点不同

GA3C是一个单节点架构。也就是说在GA3C中,Actor和Learner都是在一台机器上,而在SEED RL中,Actor和Learner分布在不同的节点中,Actor通过gRPC来和Learner进行通信

SEED RL使用了V-Trace来进行off-policy修正。

致力于去优化传输模型的损耗,SEED RL将用于推理产生动作的部分剥离出来,也和训练端放在一起,通过高效的 TPU 间通信技术来更新模型,从而大大减少了 IMPALA 中传递模型的代价,而对于环境和推理 Actor 之间的跨机器通信,SEED RL 使用优化过的gRPC方案来传递 observation 和 action,从而并不会有太大的负担。

以上两种方案并没有绝对的谁优谁劣,关键在于对于一个实际的决策问题,究竟是跨机器传输模型的代价更大,还是跨机器传输 observation 和 action 等数据的代价更大。如果是前者,且有比较好的GPU/TPU 间通信组件,那么 SEED RL 是更好的解决方案;如果是后者,IMPALA是比较稳定的选择。

1.5 Gorila

比较早期的将深度强化学习拓展到大规模并行场景的经典工作之一是2015年DeepMind的《Massively Parallel Methods for Deep Reinforcement Learning》。它将分布式引入强化学习,提出了Gorila (General Reinforcement Learning Architecture)。当时深度强化学习的SOTA还是DQN算法,因此该工作基于DQN提出了变体,拓展到大规模的计算集群。在该架构中,类似分布式监督学习,learner中对于Q网络的参数梯度会发给parameter server。Parameter server收到后以异步SGD的方式更新网络模型。这个模型同步到actor中,actor基于该模型产生动作在环境中执行,产生的经验轨迹发往replay memory。Replay memory中的数据被learner采样拿去学习。另外,每过N步learner还会从parameter server同步最新的Q网络模型参数。在这个闭环中有四个角色:actor, learner, parameter server和replay memory。

Gorila中可以配置多个learner、actor和parameter server,放在多个进程或多台机器上以分布式的方式并行执行。如实验中parameter server使用了31台机器,learner和actor进程都有100个。Parameter server有多个的情况下,模型可被切成不相交的多份,分别放于多台机器上。Replay memory分两种形式:local 模式下就存在actor所在的机器上;而global模式下将所有的经验数据聚合在分布式数据库中,这样的优点是可伸缩性好,缺点是会有额外的通信开销。一种简单的配置是actor,replay memory和learner间为1:1关系,称为bundled mode,也是实验中采用的方式。在分布式环境中,不可避免的就是稳定性问题(比如节点消失、网速变慢或机器变慢)。Gorila中采用了几个策略来解决这个问题,如丢弃过旧的和loss太过偏离均值时的梯度。实验部分与DQN一样基于Atari平台。在使用相同参数的情况下,该框架中的DQN变体在49中的41个游戏中表现好于非并行版本传统DQN,同时训练耗时也有显著减少。

1.6 DPPO

2017年时OpenAI基于TRPO的思想进行改进提出了PPO算法,成为了SOTA,到今天还广泛使用。2017年DeepMind的论文《Emergence of Locomotion Behaviours in Rich Environment》尝试将它应用到大规模问题。我们知道,在运动控制场景中如果要学习复杂的行为,设计回报函数会是一个头疼的问题。而这个工作研究通过丰富的环境来帮助复杂行为的学习。它想证明的是通过在多样化的环境中学习,只要简单的回报就可以学习到鲁棒的策略。另外从易到难,循序渐进(curriculum training)学习可以加快学习速度。随之而来的,为了能在丰富的环境中训练,就需要有可伸缩性强的训练架构支撑。于是这篇文章提出一种policy gradient的变体,称为DPPO(Distributed PPO)。它适合大型分布式的高维连续控制优化问题。该架构中数据采集和梯度的计算被分布式地放到worker上。参数放于parameter server中。这些worker在每步梯度计算中会同步这些参数。文中还通过实验比较了同步和异步方式,发现同步地计算梯度均值和更新有更好的结果。

1.7 CuLE

Nvidia为了进一步在强化学习中推广GPU的应用,在2019年的论文《GPU-Accelerated Atari Emulation for Reinforcement Learning》中将环境执行也用GPU进行了加速。Atari是深度强化学习开山之作DQN算法中的经典实验场景,后面几乎成了所有深度强化学习方法的基础benchmark。Arcade Learning Environment(ALE)是一个构建于Atari模拟器Stella之上的框架。训练的过程中,环境的执行也可能成为瓶颈。传统的框架一般是环境模拟在CPU上跑,而GPU用来做DNN相关操作。这种架构中使用CPU生成数据有几个性能瓶颈:1) CPU无法同时运行大量Atari 2600 simulator,数量难以增加;2)CPU与GPU间存在通信带宽瓶颈,导致总体GPU利用率低。本文实现了Atari环境的CUDA移植,称为CUDA Learning Environment(CuLE),可以扩展到多个GPU的系统。它充分利用GPU的并行能力,并可以同时跑上千个Atari游戏,而且直接通过GPU渲染,省去了CPU和GPU之间的通信开销。CuLE可以通过单GPU产生40M到190M帧每小时的速率。它的局限是在环境数量有限时,CuLE可能不如基于CPU的方案产生数据的效率,因为GPU的利用率不高。但当环境数量足够大时就会有优势。

1.8 PAAC

2017年Norwegian University of Science和Technology & Telenor Research的论文《Efficient Parallel Methods for Deep Reinforcement Learning》中提出了一种可以使深度强化学习算法有效并行化的框架,使算法可以从单个机器中的多个actor进行学习。这个框架可以在GPU上实现,并用于on-policy, off-policy, value based和policy gradient的算法。文中在该框架上基于GPU实现了A2C算法,称为PAAC(Parallel Advantage Actor-Critic)算法。它是on-policy方法并采用同步更新的方式。

架构中有一组环境实例。每步中,由master基于当前策略生成所有环境实例的动作。一组worker将这些动作并行地应用到环境,然后将观察到的经验保存起来。Master根据这些经验进行策略的更新。这种框架允许evaluation和training使用batching,从而有效并行。基于本框架的算法可以从上百个并行的actor进行学习,并和A3C和GA3C算法一样运行在一台机器上。但和A3C与Gorila不同的是,该架构中只会有一份参数的拷贝,因此参数的更新是同步的,从而避免了异步更新带来的问题。本框架与GA3C有不少类似之处。相比下,本框架没有队列,因此可以更简单,计算量也更少,同时允许on-policy学习,收敛速度更快。实验中,PAAC算法在Atari 2600上获得SOTA的效果,且只用了几个小时(GA3C算法耗时的一半,A3C算法耗时的1/8)。

1.9 Ape-X

2018年DeepMind在论文《Distributed Prioritized Experience Replay》中提出了Ape-X。该方法主要通过一个中心式的共享replay memory解耦了acting和learning过程。Actor们基于共享的神经网络与它们各自的环境实例进行交互,然后积累经验放到共享的经验replay memory中。Learner从该replay memory中采样然后更新神经网络。和前面提到的Gorila一样,该架构将深度强化学习分为可以并行执行的两部分:一是acting,即运行环境,评估策略和保存经验;二是learning,即采样经验和更新策略参数。上百个actor运行在CPU上产生数据,一个learner运行在GPU上采样经验进行学习。但和Gorila不同的是,这里用的是共享的,中心式的replay memory。另外它不是均匀采样,而是优先考虑其中的一些样本,从而让算法专注于那些重要的数据。该思想来自2016年Google的论文《Prioritized experience replay》。

结合了经典的强化学习算法,本文提出了Ape-X DQN与Ape-X DPG算法。前者基于DQN以及Rainbow中的一些方法,后者基于DPG和DDPG。在Atari实验环境中,Ape-X DQN的actor用了360个机器。Actor积累一段时间数据以异步方式发送。Learner以异步方式拿数据。实验结果表示Ape-X比DQN,Prioritized DQN,Distributional DQN,Rainbow和Gorila在训练速度和最终得分上都有优势。另外在humanoid和manipulator等连续控制任务中,能达到~14K FPS。

1.10 accel_rl

2018年Berkeley论文《Accelerated Methods for Deep Reinforcement Learning》研究如何在CPU+GPU的单台计算机(8 GPU和40核CPU的DGX-1)上优化现有的深度强化学习算法。 本文构建了一个并行化的统一框架。其中所有的神经网络计算(推理和训练)放在GPU上进行加速。该框架既适用于PG也适用于Q-learning方法。基于该框架,文中展示了A2C, PPO, DQN, Categorical DQN和Rainbow算法的多GPU版本。

本文主要优化点之一在于同步采样以利用GPU善于处理大batch任务的特点。多个simulator以同步方式并行跑在CPU 核上。它们得到的经验会以batch方式给到GPU上做推理。由于是单机内,可以用共享内存作为动作产生与simulator进程间的通信方式。同步的采样会有straggler effect,而且当并行进程数量多时更明显,本文用在每个进程中层叠多个独立的simulator实例来缓解该问题。每个进程内序列化地执行这些simulator。如果simulation和inference的workload差不多时,为了防止空闲,可以分两个组。当一组等待动作时,另一组可以执行环境。这样GPU交替地服务两个组,从而提高硬件利用率。在同步多GPU优化中,所有GPU会维护相同的参数值。每个GPU使用本地收集的样本计算梯度,并通过all-reduce聚合所有GPU上的梯度并更新本地参数。在异步多GPU优化中,每个GPU先本地计算梯度,然后从中央的参数存储(CPU上)拉最新的参数,并用本地计算的梯度更新它,再将更新的参数写回中央的参数存储中。

1.11 D4PG

2018年DeepMind的论文《Distributed Distributional Deterministic Policy Gradients》将distributional RL结合到分布式框架中(注意别把distributional和distributed搞混了),提出一种基于DDPG改进的off-policy AC方法,称为D4PG(Distributed Distributional Deterministic Policy Gradient)算法。D4PG的non-distributional变体称为D3PG。它结合了几种常用的做法,如N-step return和prioritized experience replay。本文主要关注高维状态与动作空间的复杂控制任务 。对于连续控制任务,一种常见的方法是显式地参数化策略,然后直接优化长效累积回报。本方法结合了2017年DeepMind的论文《A Distributional Perspective on Reinforcement Learning》中的方法,使用distributional版本的critic update。它提供了更稳定的学习信号。本文用Ape-X框架并行运行多个独立的actor,它们产生的经验放到一个统一的replay table中。每个actor有网络参数的拷贝。另有一个learner进程负责从replay table中采样,然后基于这些数据进行网络更新。实验中关注指标为perf/wall clock time,用于衡量训练的效率。在一系列较难的连续控制问题(standard control suite,dexterous,parkour)中,D4PG优于PPO,D3PG算法。

1.12 R2D2

2019年DeepMind在论文《Recurrent Experience Replay in Distributed Reinforcement Learning》扩展了Ape-X DQN,提出了Recurrent Replay Distributed DQN(R2D2)算法,它主要特点是结合了recurrent network(在Q-network中使用了LSTM)。 LSTM因为可以学习时间序列下的隐状态,因此在强化学习中可被用于克服部分观察问题。但是引入它也会带来一些挑战。本文主要研究experience replay对于parameter lag的影响,它会导致representational drift和recurrent state staleness。在分布式环境中这个问题更加严重,从而影响训练的稳定性和最终效果。

R2D2和Ape-X类似,也用了dueling network,prioritized distributed replay和n-step double Q-learning。与之相比最大区别是引入了RNN。架构上,由一大堆actor(如256)来生成经验,然后由一个learner学习。网络方面也是用了dueling network架构,但不同的是在卷积后面加了LSTM。为了从经验回放中训练RNN,整个状态和动作的轨迹需要被存于经验数据中。对于从回放经验中训练LSTM,以往的工作中比较了两种策略:一是在采样序列的开始将开始状态置零(即zero start state)来初始化网络,优点是简单;二是回放整个episode的经验轨迹,但会因为轨迹中状态高度关联带来一系列问题。本文认为zero start state策略虽对于完全观察的Atari够用,但会使网络无法学习真正的long-term依赖,如在需要记忆的场景中(如DMLab)。因此,本文提出两种方法来从随机采样的回放序列中训练RNN。1) Stored state:即将recurrent state存在回放数据中,然后在训练时用于初始化网络。但仍会受representational drift的影响,导致recurrent state staleness。2) Burn-in:允许网络有一个burn-in过程。这个过程中使用部分的回放序列数据,只用于unrolling网络,产生start state,然后在剩余的序列上更新网络。Burn-in的好处是防止了一些RNN参数的destructive update(由于不准确的初始值)。两种方法与zero state训练策略相比都有优势。

实验基于Atari-27和DMLab-30与Ape-X和IMPALA做了比较。Atari中R2D2在游戏中所达到的成绩比以往单actor的方法有数量级的提升,是多actor方法Ape-X的四倍,且用了更少的actor。DMLab中R2D2的表现与IMPALA相当。

1.13 DD-PPO

2019年Georgia Institute of Technology和Facebook等机构的论文《DD-PPO: Learning Near-Perfect PointGoal Navigators from 2.5 Billion Frames》提出了DD-PPO(Decentralized Distributed Proximal Policy Optimization)方法。它是一个用于GPU集群的去中心化的分布式框架。另外为了避免stale数据,采用了同步的方式。

一般情况下,仿真环境中的强化学习中的计算任务有四个:simulation, inference, learner和parameter server。同步的分布式强化学习方法会将simulation、inference和learner放到到多个GPU上,然后通过AllReduce同步梯度。这种方式会带来同步和通信开销。而异步的分布式强化学习方法很多使用单个或多个进程执行simulation和inference,另有一个独立的进程以异步方式完成learner和parameter server的角色。如果将这种方式应用到非常耗资源的环境会有些问题:一方面是inference/simulation进程只用CPU的话扛不住,尤其是像本文提到的这种环境执行也用GPU加速的场景。虽然可以用GPU实现,但batch不大的话会导致硬件利用率低。另一方面是单进程的learner/parameter server只能利用单个GPU节点的算力,而为处理高维输入所需的大型网络在计算梯度时需要很高的算力。针对这两个问题,DD-PPO让每个GPU对应一个进程,并将多个环境的观察状态进行batching来做推理。每个worker交替执行两个任务:在GPU加速的仿真环境中收集经验和优化模型。作为去中心化的架构,DD-PPO没有parameter server,每个GPU都计算梯度,因此可以支持更大的网络。Worker之间是同步的,即有一个显式的通信阶段让worker们同步它们的更新到模型。但如同上面提到过的,同步模式会有straggler effect,导致需要等最慢的那个worker完成经验采集。为了减轻这个问题,那些过慢的会被抢占掉。

文中采用的实验环境为Habitat-Sim,是一个室内导航3D的仿真平台。文中的方法也是Habitat Autonomous Navigation Challenge的第一名。在该实验中,DD-PPO能达到近线性的scaling能力 (128 GPU上107x加速)。

1.14 Acme

2020年,来自Google的论文《Acme: A Research Framework for Distributed Reinforcement Learning》提出了Acme框架。Acme是一个用于表示和训练强化学习agent的软件库和轻量框架,还提供了一些agent baseline。它提供多种组件来构建agent,试图用统一的框架解决复杂性和伸缩性问题,适用于分布式与非分布式环境(官方开源的版本貌似还没有分布式的版本)。Acme的设计哲学是在平衡简易性、模块化和规模化。框架可以适用小规模也可以用于大规模场景。为了使相同模块适用于构建小和大规模版本,框架将代码分解成组件。这些组件可以相互组合构建on-policy或者off-policy的算法 。组件有acting, dataset和learning。这里概念上比较绕的是它定义了一种特殊的actor称为agent。它既包含了一个acting组件又包含了一个learning组件。Dataset组件位于actor和learner组件之间,它向learner提供采样的mini-batches。数据集管理使用数据存储系统Reverb。它提供了高效的插入和灵活的采样机制。

在分布式的agent中,Acme将acting, learning和storage组件分离,放在不同的线程或者进程中。这样一方面可以让acting和learning并行,另一方面可以充分利用更多的并行actor。比如每个分布式的agent会有一个data storage进程,一个learner进程和一到多个分布式的actor进程(每个都有environment loop)。Actor中还有子模块负责从learner中pull变量更新。在同步的学习循环中,第一步中acting和learning的比例会对长期的学习效果稳定性产生很影响。但是,让它们独立运行又会使variance变高。这个问题Acme通过Reverb的RateLimiter来缓解。它指定了learning和acting间的期望的相对速率。

实验环境基于DeepMind Control suite,Arcade Learning Environment和Behaviour Suite(bsuite)。性能衡量测度采用actor steps(用于衡量sample efficiency)和learner wall-time(衡量训练速度)。实验在control suite上比较了D4PG、DDPG、DMPO和MPO方法,Atari上比较了DQN、R2D2和IMPALA方法,bsuite上比较了DQN、R2D2、IMPALA和MCTS方法。结果表示从learner wall-time指标上来看分布式的acting有优势。IMPALA学得快但是不稳定,相比而言R2D2学得慢但能得到得好的结果和更小的variance。DQN起步比R2D2更快但最终结果更差。

1.15 Sample Factory

2020年Intel和University of Sourhern Californi的论文《Sample Factory: Egocentric 3D Control From Pixels at 100000 FPS with Asynchronous Reinforcement Learning》提出了Sample Factory,它是为单机设计的高吞吐训练系统,基于APPO(Asynchronous Proximal PolicyOptimization)算法。能在3D控制场景达到100000 FPS。

一个典型的强化学习中有三个主要的计算任务:环境仿真,模型推理和反向传播。设计的原则是让最慢的任务不要等其它的任务,因为系统的吞吐取决于最慢任务的吞吐。每种任务对应一种类型的组件。组件之间通过高速的FIFO队列和共享内存通信。三种组件分别为:1) Rollout worker:每个rollout worker可以有多个环境实例,与这些环境交互采集经验。Rollout worker一方面将经验通过共享内存给policy worker,另一方面通过共享内存给learner。2)Policy worker:收集多个rollout worker来的状态,通过策略得到动作,通过共享内存传回给rollout worker。3)Learner:前面两个一般有多个,只有这个是只有一份的。它通过共享内存从rollout worker拿到经验轨迹,更新策略,然后通过GPU memory(因policy worker与learner都跑在GPU上)发往policy worker。Policy worker就可以用新的策略生成动作了。Rollout worker和policy worker一起称为sampler子系统。为了解决rollout worker等待policy worker返回动作的问题,文中使用了Double-Buffered Sampling的技巧。即在rollout worker上存一组环境 ,并分成两组,通过轮流来提高CPU利用率。

在这个框架中,一次迭代中从并行环境中收集的多个经验轨迹在learner中无法在一次mini-batch中消化掉。这会导致policy lag问题,即behavior policy与target policy的不一致。对PG方法来说这种off-policy学习比较困难。因为policy lag越大,从behavior policy采样来准确估计梯度就越难。减少环境中执行步数或者增大mini-batch size可以减少policy lag。除此之外,有两大技术用来处理off-policy学习:trust region(如PPO clipping)和importance sampling(如V-trace)。两者可以同时使用。Sample Factory中两种都实现了。

实验的机器配置为10核CPU+GTX1080 Ti GPU和36核CPU+RTX 2080 Ti GPU。实验中以training frame rate为指标,在三个仿真器(Atari, VizDoom和DeepMind Lab)上与几个baseline算法 (RLlib、DeepMind和SEED的IMPALA,以及rlpyt的PPO)做了对比,在大多训练场景上超越了它们。

1.15 RAY

除了整体结构的设计和创新,还有很多对于整个训练程序中某一单点模块进行优化的方法,它们主要是针对某一个子问题,进行专门的定制优化,这里介绍一些主要的方法:

Object Store in Ray/RLLib:

对于多进程多机器之间的数据传递,Ray/RLLib中的 Object Store 提供了一种非常便捷高效的方式,任何一个进程,只要知道了这个对象的引用(即reference),就可以通过向 Store 请求获取相应的值,而具体内部的数据传输完全由 Store 进行管理,这样就可以像写本地单进程程序一样,实现一个分布式训练程序。Object Store 的具体实现是结合 redis,plasma和gRPC完成。

2.16 PureJaxRL

Achieving 4000x Speedups and Meta-Evolving Discoveries with PureJaxRL  

paper:https://link.zhihu.com/?target=https%3A//arxiv.org/abs/2210.05639

code:https://https://link.zhihu.com/?target=https%3A//github.com/luchris429/purejaxrl

   在JAX中端到端地进行所有操作有几个优势:    在加速器上的矢量化环境运行速度更快。  通过将计算完全保留在GPU上,可以避免在CPU和GPU之间来回复制数据的开销,通常也是性能的一个关键瓶颈。  通过JIT编译实现,可以避免Python的开销,有时会阻塞发送命令之间的GPU 计算。  JIT 编译通过运算符融合(operator fusion)可以获得显著的加速效果,即优化了GPU上的内存使用。  多线程的并行运行环境很难调试,并且会导致复杂的基础设施。    为了证明这些优势,作者在纯JAX环境中复制了CleanRL的PyTorch PPO基线实现,使用了相同数量的并行环境和相同的超参数设置,并且没有利用海量环境矢量化的优势。

2 总结和未来展望

2.1 总结

在AI这个快速更新与演进的领域,训练效率显得格外重要。更快的训练意味着可以更快地试验和迭代算法,从而提升竞争力。并行化是减少耗时、提高硬件利用率、降低成本的最为有效的手段之一。除了提升性能外,对于强化学习它还能额外带来的好处是训练数据更加多样化,这会使学习出来的策略更加鲁棒,泛化能力更强。从前面可以看到,业界对强化学习并行加速的方案既有单机的也有多机分布式的。前者通过多进程或多线程可达到并行的目的,其好处是通信成本低,可利用共享内存免除拷贝的开销。而后者具有更好的可伸缩性,但缺点是有较高的通信开销,组件间难以同步。

相比监督学习,强化学习很大的一点区别是其数据来源于环境交互,而交互依赖于策略,策略又依赖于交互中产生的经验,形成了闭环。根据环境中生成动作的行为策略与用于评估与学习的目标策略是否相同,衍生出on-policy与off-policy两类方法。On-policy与off-policy方法相比,更稳定也更易于使用,但它要求这个闭环中的各步是同步。而我们知道同步则是并行优化中的最大阻碍之一。理想情况下我们希望各个组件可以独立工作,这样便不会因为有等待而出现硬件空闲导致资源浪费的情况。可以看到,业界的趋势是将框架越来越组件化。即将环境执行、推理、训练等工作任务交由专门的模块执行,并相互解耦。这样它们之间便可以充分并行,并且可以调节数量以达到数据生产与消费之间的平衡。推理与训练这些与网络模型相关的操作倾向交由GPU、AISC这些擅长并行计算的处理器上完成。同时为了提高利用率,会对输入进行batching。为了更高的效率,我们希望充分解耦acting和learning两个任务的组件,但这就会面临它们之间的同步问题。一种方式就是同步模式。它对于算法,尤其是on-policy算法是比较友好的。对于同步所带来的性能影响,需要通过抢占或者分组交替的方式来解决或者缓解。另一类是异步模式。它对off-policy算法的影响会小一些,但对于on-policy算法会有较大影响,会让其训练不稳定。这就需要使用一些像V-trace的技术来做处理。

2.2 展望

目前,分布式强化学习还只是一个新兴的研究子领域,很多情况下会受限于算力和问题环境,仍然存在很多需要被解决的问题:

  1. 缺少统一的 benchmark 来评价分布式强化学习算法和系统的效率;
  2. 目前大部分分布式强化学习方案都只适用于一小部分环境和一部分 RL 算法,距离技术的通用化还有很远的路要走;
  3. 当前的系统优化和 RL 算法本身仍然是隔离的,可以考虑感知 RL 优化需求的系统设计,例如动态资源感知和调度。

3 参考文献

强化学习的并行加速_强化学习的并行训练技术-CSDN博客

https://baijiahao.baidu.com/s?id=1763140078479573273&wfr=spider&for=pc

  • 28
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值