【Mava】一个分布式多智能体强化学习研究框架

2021-08-10 15:36:20 浏览数 (1)

深度强化学习实验室

官网:http://www.neurondance.com/

论坛:http://deeprl.neurondance.com/

来源:https://github.com/instadeepai/Mava

Mava 是一个用于构建多智能体强化学习 (MARL) 系统的库。Mava 为 MARL 提供了有用的组件、抽象、实用程序和工具,并允许对多进程系统训练和执行进行简单的扩展,同时提供高度的灵活性和可组合性。

注意:我们发布 Mava 的首要目的是使更广泛的社区受益,并使研究人员更容易在 MARL 上工作。但是,我们认为此版本是 Mava 的 Beta 版。与许多框架一样,Mava 是(并且可能永远保持)正在进行中的工作,并且团队旨在在未来的版本中提供和改进更多内容。从结合最新的研究和创新到使框架更加稳定、健壮和经过良好测试。此外,我们承诺并将尽最大努力保持一切正常运行,并尽可能使使用 Mava 的体验愉快。在 Beta 开发期间,可能会发生重大更改以及重大设计更改(如果我们认为这可以大大提高框架的可用性),但这些将在被合并到代码库之前进行清楚地传达。也不可避免地可能存在我们不知道的错误,并且事情可能会不时中断。我们将尽最大努力修复这些错误并尽快解决任何问题。

Systems and the Executor-Trainer Paradigm

Mava 框架的核心是系统的概念。系统是指完整的多智能体强化学习算法,由以下特定组件组成:执行器、训练器和数据集。

“执行器(Executor)”是系统的一部分,它与环境交互,为每个智能体采取行动并观察下一个状态作为观察集合,系统中的每个代理一个。本质上,执行器是 Acme 中 Actor 类的多智能体版本,它们本身是通过向执行器提供策略网络字典来构建的。Trainer 负责从最初从 executor 收集的 Dataset 中采样数据,并更新系统中每个 agent 的参数。因此,Trainers 是 Acme 中 Learner 类的多智能体版本。数据集以字典集合的形式存储了执行者收集的所有信息,用于操作、观察和奖励,并带有与各个智能体 ID 对应的键。基本系统设计如上图左侧所示。可以查看系统实现的几个示例

Distributed System Training

Mava 出于同样的原因分享了 Acme 的大部分设计理念:为新研究(即构建新系统)提供高水平的可组合性,以及使用相同的底层多智能体RL 系统代码。Mava 使用 Launchpad 来创建分布式程序。在 Mava 中,系统执行器(负责数据收集)分布在多个进程中,每个进程都有一个环境副本。每个进程收集和存储数据,训练器使用这些数据来更新每个执行器中使用的所有参与者网络的参数。这种分布式系统训练方法如图所示。

Supported Environments

  • PettingZoo
  • SMAC
  • Flatland
  • 2D RoboCup
  • OpenSpiel

System Implementations

Usage

为了了解如何使用 Mava 系统,我们提供了以下启动分布式 MADQN 系统的简化示例。

代码语言:javascript复制
# Mava imports
from mava.systems.tf import madqn
from mava.components.tf.architectures import DecentralisedPolicyActor
from . import helpers

# Launchpad imports
import launchpad

# Distributed program
program = madqn.MADQN(
    environment_factory=helpers.environment_factory,
    network_factory=helpers.network_factory,
    architecture=DecentralisedPolicyActor,
    num_executors=2,
).build()

# Launch
launchpad.launch(
    program,
    launchpad.LaunchType.LOCAL_MULTI_PROCESSING,
)

程序的前两个参数是环境和网络工厂函数。这些辅助函数负责为系统创建网络,在不同的计算节点上初始化它们的参数,并为每个执行器提供环境的副本。下一个参数 num_executors 设置要运行的执行程序进程数。构建程序后,我们将其提供给 Launchpad 的启动函数并指定启动类型以执行本地多处理,即在单台机器上运行分布式程序。向上或向下扩展只是调整执行程序进程数量的问题。

如需更深入的了解,请查看我们的 examples 子目录中的详细工作代码示例,这些示例展示了如何实例化一些 MARL 系统和环境。

Components

Mava 提供了多个组件来支持 MARL 系统的设计,例如不同的系统架构和模块。您可以更改架构以支持代理之间不同形式的信息共享,或添加模块以增强系统功能。下面给出了一些常见架构的示例。

Installation

已经在 Python 3.6、3.7 和 3.8 上测试了 mava。

Python虚拟环境 如果不使用 docker,我们强烈建议使用 Python 虚拟环境来管理您的依赖项,以避免版本冲突。请注意,由于 Launchpad 仅支持基于 Linux 的操作系统,因此使用 python 虚拟环境仅适用于以下情况

代码语言:javascript复制
python3 -m venv mava
source mava/bin/activate
pip install --upgrade pip setuptools

pip install id-mava
pip install id-mava[reverb]

pip install id-mava[tf]
pip install id-mava[launchpad]

pip install id-mava[envs]
pip install id-mava[flatland]

pip install id-mava[open_spiel]
# 对于星际争霸 II 安装,必须根据您的操作系统单独安装。 要安装星际争霸 II ML 环境和相关包,请按照 PySC2 上的说明安装星际争霸 II 游戏文件。 请确保您在星际争霸 II 地图目录中提取了所需的游戏地图(适用于 PySC2 和 SMAC)。 完成此操作后,您可以为单代理案例 (PySC2) 和多代理案例 (SMAC) 安装软件包。
pip install pysc2
pip install git https://github.com/oxwhirl/smac.git

#对于 2D RoboCup 环境,本地安装仅使用 Ubuntu 18.04 操作系统进行了测试。 可以通过在 Mava python 虚拟环境中运行 RoboCup bash 脚本来执行安装。
./install_robocup.sh

引用

代码语言:javascript复制
@article{pretorius2021mava,
    title={Mava: A Research Framework for Distributed Multi-Agent Reinforcement Learning},
    author={Arnu Pretorius and Kale-ab Tessera and Andries P. Smit and Kevin Eloff
    and Claude Formanek and St John Grimbly and Siphelele Danisa and Lawrence Francis
    and Jonathan Shock and Herman Kamper and Willie Brink and Herman Engelbrecht
    and Alexandre Laterre and Karim Beguir},
    year={2021},
    journal={arXiv preprint arXiv:2107.01460},
    url={https://arxiv.org/pdf/2107.01460.pdf},
}

Github: https://github.com/instadeepai/Mava

0 人点赞