文章目录
前言
MARL的一个根本问题就是agent倾向于过拟合其他players,导致算法很难实现鲁棒的表现。与异构agents或多样策略的co-players交互是解决问题的必由之路,可行的方法包括基于群的训练、fictitious self-play、meta-game analysis,以及本文关注的基于群的多智能体强化学习 (Population-based multi-agent reinforcement learning, PB-MARL)
PB-MARL 算法结合了深度强化学习 (DRL) 和动态种群选择方法(例如,博弈论、演化策略)来生成自动课程,产生出现自耦合的群动态的自生成任务序列,通过利用自动课程来诱导一系列不同的应急策略,从而不断产生高级智能,并在一些非平凡的任务中取得了令人瞩目的成功。然而,由于多智能体和群体交互产生的内在动态,这些算法具有错综复杂的嵌套结构,并且非常需要数据,需要灵活且可扩展的训练框架来保证其有效性。
PB-MARL 的部署与传统 (MA)RL 共享一些通用过程,但仍然存在许多挑战,包括自动课程学习过程和指数的组成抽样。PB-MARL 固有地包含异构任务,包括模拟、策略推理、策略训练和策略支持扩大。所有这些任务都与底层的可变策略组合相关联,这进一步使 PB-MARL 复杂化。
上图展示了 PB-MARL 中的一个典型案例,这里可以合并 Double Oracle 或 Policy Space Response Oracle (PSRO) 方法的学习过程。例如,在 PSRO 的每次迭代中,算法都会生成一些策略组合,并对每个agent执行独立地学习。这样一个嵌套的学习过程包括逐一地rollout、训练、评估,并循环工作,直到算法找到估计的纳什均衡。这些子任务执行高度异构,即底层策略组合因agent而异。此外,评估阶段涉及跨快速增长的联合策略集的大量模拟。因此,这些要求使得对于实现高执行效率,分布式计算是不可避免的。
在深度学习中,有大量工作将分布式计算技术集成到其架构中。Pytorch 和 Horovod 等框架在 MPI 上实现了它们的分布式训练逻辑。通用分布式工具如 Ray 和 Fiber 提供了用于构建分布式应用程序的通用 API,从而将用户从 MPI 和 OpenMP 等并行编程中解放出来。也有一些工作专注于 MARL 的实现和抽象,但其中大部分都过于狭窄,专注于特定领域,无法适应一般的 MARL 任务。
对于DRL,高吞吐量可以让算法实现更快的收敛速度和高数据效率。在单智能体 DRL 中,为了满足分布式计算的要求,也出现了大量分布式框架来解决数据处理问题,例如 RLlib、SEED RL、Sample-Factory和 Acme。其中,一个标准的实现是在完全分布式控制中设计训练和rollout worker,即 Actor-Learner 模型。尽管单智能体 RL 方法也可以作为 independent learners 应用于多智能体设置,但更有效的训练模式,如集中训练和分布式执行,self-play、基于群的学习等要求训练以非独立的方式进行。显然,单智能体学习模式需要大量的努力来处理这样的交互需求,并对现有的分布式强化学习框架提出了新的挑战。RLlib 通过在 Ray 之上构建 DRL 框架解决了这个问题,以逻辑上集中的控制方式工作。此外,这些框架中 MARL 任务的解决方案是将 MARL 任务建模为单智能体任务,这降低了更一般的 MARL 设置中的计算效率,因为它在训练过程中需要异构智能体/策略交互。尽管像 OpenSpiel 这样的作品已经尝试支持OpenSpiel和 PSRO,但他们只是考虑了良好的 PB-MARL 抽象和可扩展性。因此,作者认为现有框架不能完全满足 PB-MARL 带来的新要求。
作者总结了 MARL 分布式框架的基本要素应该:
- 提供一种高效的控制机制,以支持 PB-MARL 中的自监督自动课程训练和异构策略交互;
- 提供对 MARL 训练模式的高级抽象以简化实现,和统一且可扩展的训练标准。
综上,尽管分布式 RL 框架的现有技术非常出色,但由于涉及异构策略交互的采样、训练和评估之间的多个嵌套工作负载的额外复杂性,PB-MARL 对并行化训练框架提出了新的挑战。
为了满足 PB-MARL 的分布式计算需求,作者在 Ray 之上构建了MALib,并提供了一个可扩展且高效的训练框架。上表从三个维度展示了 MALib 与现有分布式强化学习框架的比较,即单智能体 RL 支持、多智能体 RL 支持和种群管理。尽管其中一些支持多智能体 RL 算法,但它们本质上是independent learning的,或者需要 3 个用户的额外努力才能在其他训练范式中实现算法。此外,PB-MARL 的一个关键维度是种群管理,即为每个智能体维护一个策略池,支持策略扩展,更新自动课程学习中的策略分配等。MALib 考虑了这些需求并给出了相应的实现,其由三个关键组件组成:
- 集中式任务调度模型 (CTD),支持自生成任务和具有异构策略组合的可扩展训练;
- 一种名为Actor-Evaluator-Learner的编程架构,实现了训练和采样的高度并行,满足了自动课程学习的评估需求;
- 对MARL训练范式的更高层次抽象,实现了在不同分布式计算范式上的高效代码重用和灵活部署。
作者的贡献主要为:
- 为 PB-MARL 提出了一种集中式任务调度模型,它在自动课程策略组合的训练任务中实现了高度的灵活性。
- 提出了一个独立的程序设计模型Actor-Evaluator-Learner,以提高数据处理和异步执行的效率。
- 抽象了MARL训练模式,提高异构MARL算法的代码重用性和兼容性,这也弥合了单点和多点优化之间的差距。
- 提供主流的MARL算法实现,并使用不同系统设置在MALib上验证系统性能和算法性能,包括单机和集群。
在多智能体 Atari Games 等一系列复杂任务上的实验表明,MALib 在 32 个 CPU 内核的单机上实现了高于 40K FPS 的吞吐量;在多智能体训练任务中,速度比 RLlib 快 5 倍,比 OpenSpiel 至少快 3 倍。
代码:https://github.com/sjtu-marl/malib
Parallel Programming Abstractions for PB-MARL
Centralized Task Dispatching Model
之前工作中 RL 的并行化可以大致分为完全分布式控制 (FDC) 和分层并行任务 (HPT) 模型,固定了训练任务流和策略交互方式。虽然这些框架对 RL 任务有抽象,但 MARL 训练模式的特殊类型限制了它们的性能,因此用户必须额外努力进行定制。此外,诸如 PSRO 和 AlpahRank 之类的 PB-MARL 算法需要在策略组合中变异和在自动课程中策略空间的扩大,而这些在以前的框架中被忽略。
上图展示了之前的并行控制模型和 CTD 模型之间的比较。与 RLlib 相同,CTD 模型在 Ray 之上实现,它允许 Python 实现的任务自然地分布在一个大型集群上。
CTD 模型同时考虑了 FDC 和 HPT 模型的优点。具体来说,CTD 有一个集中控制器 D,用于迭代更新底层策略组合的描述并生成新的学习任务,然后将它们分派到工作进程(A、B 和 C)。CTD 中的工作流程独立工作,但不像 FTD 中那样相互协调。此外,工作过程也以半被动的方式工作,即在完成任务后会向 D 发送任务请求,这与工作过程完全被动的 HPT 模型不同。事实上,半被动执行可以是高性能的,因为工作进程不会一直处理集中控制器,因此 D 可以高度并行地工作以处理更多任务,以确保系统高效运行,特别是对于Python,它有一个GIL。作者将 D 建模为 Coordinator Server,工作流程 A、B 和 C 可以是 Actors、Learners 和解耦数据服务器。
Defining the Task Graph
CTD模型的执行逻辑可以表述为PB-MARL的闭环任务图。
一开始,给每个agent初始化一组策略池 P = { P i ∣ i = 1 , ⋯ , M } P = \{P_i | i = 1,\cdots,M\} P={ Pi∣i=1,⋯,M},同时其中一些可以共享相同的策略池。
然后,环境中的每个agent { a j ∣ j = 1 , ⋯ , N } \{a_j | j = 1,\cdots,N\} { aj∣j=1,