写点什么

“一键”部署分布式训练,微软“群策 MARO”上新集群管理助手

  • 2021-05-14
  • 本文字数:3990 字

    阅读完需:约 13 分钟

“一键”部署分布式训练,微软“群策MARO”上新集群管理助手

来源 | 微软亚洲研究院


2020 年,微软亚洲研究院发布并开源了多智能体资源优化平台“群策 MARO”。为了帮助不同需求的用户进行更加便捷、高效的集群管理,也希望用户可以方便快捷地部署分布式训练任务,微软亚洲研究院的研究员和工程师们基于“群策 MARO”平台搭建了集群管理界面:MARO CLI。本文将为大家详细介绍 MARO CLI 的功能和使用方法。


随着强化学习的不断发展,多种多样的算法、框架层出不穷,对计算资源的要求也与日俱增。为了推动更大规模的训练,也为了获得更高的训练效率,如今对分布式集群的需求也在不断增加。因此,微软亚洲研究院的研究员和工程师们在此前打造的通用资源优化平台群策(Multi-Agent Resource Optimization Platform,MARO)上,构建了一套轻量级的集群管理界面:MARO Command Line Interface(MARO CLI)。


除了提供高效灵活的环境组件、当前主流和前沿的强化学习算法,MARO 平台希望通过 MARO CLI 帮助不同需求的用户进行更加便捷高效的集群管理,也希望用户可以方便快捷地部署分布式训练任务。基于 MARO 平台,作为构建和管理训练用集群的命令行接口,MARO CLI 提供的主要特性包括:


  • 多种方式的集群构建,既可以创建基于 Azure 云服务器或者 AKS 服务的远端集群, 也可以将已有的计算资源整合成本地集群,从而提高计算资源的利用效率。

  • 部署任意的训练任务到指定集群中,并根据每个任务的资源需求和当前集群的空闲资源进行任务分配,从而更合理地利用集群资源。

  • 所有任务均部署在容器中运行,任务之间更加独立,也更方便支持新的强化学习框架和算法,具有更好的扩展性。

  • 提供了配套的可视化界面,包括对硬件、任务、日志的监控。


下面我们将详细介绍一下 MARO CLI 的架构和功能,希望能帮助大家更好地利用 MARO CLI 来进行分布式集群的训练。

MARO Process


为了让开发者能够平缓地从单机模式过渡到分布式集群模式、降低调试成本和开发成本,MARO CLI 提供了 Process mode,如图 1 所示,这是 MARO CLI 中一种比较简单的本地单机管理模式。在这种模式下,MARO CLI 并不会创建真正的分布式集群,而是在本机中通过使用多进程来启动训练任务,模拟真实分布式集群操作。



图 1. MARO Process mode 示意图


通过在单机中模拟分布式场景主要有两个优点:易于调试和开发成本低。与单机环境不同的是,要使任务能顺利地在分步式集群中运行,需要对代码进行一系列修改。使用 MARO Process mode 来测试修改好的代码可以更直接地发现错误,而且不需要真正的分布式集群,这样可以节省一大笔开发成本。麻雀虽小,五脏俱全,在 MARO Process mode 下,使用 Redis 和 MARO 服务也可以做到任务管理和监控。

MARO Grass


Grass mode 是 MARO CLI 中最重要的一部分,如图 2 所示。在这种模式下,MARO CLI 支持三种集群的创建模式:本地单机(grass/local), 本地集群(grass/on-premises) 和 Azure 云集群(grass/azure)。除了 Grass Local 模式外,其他 Grass 模式都会创建并管理真正的分布式集群,正如图 2 所示,在 Grass mode 下,MARO CLI 会通过一系列组件来实现分布式集群管理。



图 2. MARO Grass mode 示意图


与单机模式不同的是,我们将 MARO Grass 集群分为 master 节点和 node 节点。在 master 节点上,我们使用 Redis 作为一个中心化的数据库来储存运行时产生的数据,使用 samba-server 进行整个集群的文件共享,并通过 fluentd 进行整个集群的日志收集。


与此同时,MARO CLI 也会启动 master-agent 服务来进行任务分配和集群状态监控,以及一个 RESTFul server: master-api-server 执行外部的命令,例如任务创建或者集群状态监控。在 node 节点上,则会启动 node-agent 服务不断记录自身节点的状态和任务容器的状态并上传到 master 上的 Redis,也会运行 samber-client 和 RESTFul server: node-api-server 来与 master 节点进行交互。


在 MARO Grass mode 下,与集群的交互都通过 master 节点来进行:可以通过 ssh 进行文件和数据的传输,也可以通过 Web Client 进行集群任务管理和状态监控。出于安全考虑,对于每次 Web Client 的访问我们都会使用 RSA+AES 混合加密,而集群内部的通讯则是不加密的。master 节点收到加密指令后,将执行具体的操作、与 node 节点进行交互、将任务部署到具体某个容器中(可能被分配到不同的 node 节点上)。


下面介绍一下三种集群创建模式的特点:


  • 本地单机(grass/local)


MARO Grass Local 与 MARO Process 类似,都是本地单机的集群模拟,但与之不同的是 MARO Grass Local 会将任务部署在容器内,也允许客户自定义模拟集群或任务的资源大小,更加贴合真实的分布式集群操作。


  • 本地集群(grass/on-premises)


MARO Grass On-Premises 可以利用手边现有的计算资源来快速创建集群,并进行高效便捷的管理。用户可以将在同一局域网内的资源自由加入到创建的 Grass 集群中,并通过 MARO CLI 进行任务分配和集群管理。


  • Azure 云集群(grass/azure)


MARO Grass Azure 是一种分布式集群管理,主要用于基于 Azure 云的远程集群。基于 Azure CLI 的部分接口,MARO CLI 可以实现 Azure 云集群的自定义创建、节点的增减和集群状态监控。

MARO K8S


MARO CLI 同样支持使用 Kubernetes (K8S) 来创建集群,如图 3 所示。Kubernetes 是一个开源的、用于管理云平台中多个主机上的容器化的应用,同时也是一个知名度很高,并被广泛应用的集群管理软件。



图 3. MARO K8S mode 示意图


通过对 Kubernetes 的支持,可以满足用户对 Kubernetes 集群的需求,也更方便那些 Kubernetes 集群用户上手熟悉 MARO CLI。依赖于 Kubernetes 的架构,我们可以轻松地创建拥有数以百计的节点的大型集群,这赋予了 MARO CLI 更好的延展性和更高的稳定性。


在此模式下,我们使用 Azure File Service 在所有 Kubernetes Pods 下进行文件共享,同时所有的任务都会部署在 Kubernetes Pods 中,由 Kubernetes 进行维护。如果需要使用镜像,我们则会使用 Azure Container Registry 来进行镜像管理。

举个“栗子”:从单机到分布式


在 MARO 平台中,我们准备了很多场景和很多算法的示例,对每个示例也分别准备了单机版和分布式版本。通过使用 MARO 平台中的 RL toolkit 和 Communication toolkit,就可以将单机版的训练任务改成分布式版本。


在这里我们使用示例中针对 Container Inventory Management(CIM)问题的 DQN 算法,来说明如何通过 MARO CLI 一步步部署分布式训练任务。


完整示例代码可参考:https://github.com/microsoft/maro/tree/master/examples/cim/dqn


对于每个模式的详细使用说明,请见文末。

使用 MARO Process 模式


在 MARO Process 模式下,首先我们通过 maro process create 命令在本地启动 MARO Process 模式,之后通过 maro process template 命令来生成 MARO 任务模版,如图 4 所示。



图 4. MARO Process mode 创建集群模版


在示例中,我们将 DQN 算法拆成了 actor 和 learner,然后将我们需要的数量和启动命令写到模版的对应位置,再通过 maro process job start 启动任务。我们可以通过 maro process job stop/list/log 命令进行任务管理,也可以在可视化界面查看任务状态。

使用 MARO Grass/Azure 模式


使用 MARO Grass/Azure 模式需要用户具有一定的 Azure 使用经验,因为在创建集群时会对 Azure 有一定的权限要求。与 MARO Process 模式一样的是,我们可以通过 maro grass template 命令来生成集群模版和任务模版,如图 5、图 6 所示。



图 5. MARO Grass mode 创建集群模版



图 6. MARO Grass mode 创建任务模版


首先根据我们的 Azure 账户将集群模版补充完整,然后通过 maro grass create 命令启动所需要的集群,并用 maro grass node scale 来控制集群 node 节点资源。


MARO Grass 下的任务模版与 MARO Process 很不相同,因为会将任务容器化,所以在启动任务之前,需要通过 maro grass image push 命令将需要的镜像文件部署到刚刚创建的集群上,再通过 maro grass data push 将需要用到的文件传送到集群中。


另外,可以给每种组件(component)分配不同的资源,最优化地利用集群资源。在镜像和文件都部署到集群后,我们就可以通过 maro grass job start 将训练任务部署到集群之中了。

一目了然的可视化界面


MARO CLI 提供了一个简洁明了且带有内置命令行终端的可视化界面,方便用户进行集群管理和任务状态查询。在界面中首先显示的是当前集群的资源信息和使用率,同时也会依训练任务状态来展示集群内的任务概览。



图 7. 集群可视化界面



图 8. MARO CLI 结构概览


与其他集群管理平台不同,MARO CLI 并不仅仅支持一种集群,它提供了多种模式来满足用户对集群的不同需求。对于刚刚接触分布式训练的用户来说,我们建议在熟悉了 MARO RL toolkit 和 Communication toolkit 之后,可以使用 MARO CLI 中的 Process 和 Grass Local 模式在单机中模拟集群操作。


而对于手边有空闲计算资源并对分布式集群有一定了解的用户,则可以通过 MARO CLI 中的 Grass On-Premises 模式快速搭建集群,并在集群中部署训练任务。


对于有一定 Azure 云使用经验的用户,可以通过 MARO CLI 中的 Grass Azure 来构建基于 Azure 云的远端集群。如果还有已经使用过 Kubernetes 的用户,MARO CLI 同样也支持搭建 Kubernetes 集群。


MARO CLI 仍是一个正在蓬勃发展的项目,未来将会不断改进,变得更加简单、快速和强大。欢迎大家关注并使用 MARO 平台,也欢迎大家与我们进行技术交流!


MARO CLI 文档


https://maro.readthedocs.io/en/latest/key_components/orchestration.html


MARO CLI 相关模式使用说明:


https://maro.readthedocs.io/en/latest/installation/multi_processes_localhost_provisioning.html


https://maro.readthedocs.io/en/latest/installation/grass_azure_cluster_provisioning.html


https://maro.readthedocs.io/en/latest/installation/grass_on_premises_cluster_provisioning.html


https://maro.readthedocs.io/en/latest/installation/k8s_cluster_provisioning_on_azure.html


MARO GitHub 页面


https://github.com/microsoft/maro


MARO 0.2 版本具体更新历史


https://github.com/microsoft/maro/pull/239


https://github.com/microsoft/maro/pull/297

2021-05-14 10:121322
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 539.8 次阅读, 收获喜欢 1977 次。

关注

评论

发布
暂无评论
发现更多内容

复杂查询so easy ,GaussDB(for Cassandra)推Lucene引擎全新解决方案

华为云开发者联盟

数据库 后端

Binder通信过程

北洋

Andriod 7月月更

一体化实时HTAP数据库StoneDB,如何替换MySQL并实现近百倍分析性能的提升

StoneDB

云原生 #数据库 HTAP 大数据 开源 #开源

让预训练语言模型读懂数字:超对称技术发布 10 亿参数 BigBang Transformer [乾元]金融大规模预训练语言模型

亚马逊云科技 (Amazon Web Services)

架构 数据 模型

建木持续集成平台v2.5.1发布-全面拥抱云原生架构

Jianmu

云原生 k8s 持续集成 CI/CD

面向商业市场,华为式“抢滩登陆”

脑极体

4种Kafka网络中断和网络分区场景分析

华为云开发者联盟

后端 开发 网络 网络中断

编写Dockerfile,让你的程序一键部署

技术小生

Dockerfile 7月月更

oa办公系统都有哪家?

优秀

OA oa办公系统

TDengine 如何进行数据建模?

TDengine

数据库 tdengine 开源

Cgroup Cpuset子系统

总想做点什么

传统企业要为 Web3 和去中心化做的 11 个准备

CECBC

RadonDB MySQL Kubernetes 2.2.0 发布!

RadonDB

MySQL Kubernetes 云原生 容器化 RadonDB

让智慧物联赋能高效生产, AIRIOT助力数字化油田转型升级

AIRIOT

低代码 物联网 低代码,项目开发

开源代码难阅读?几位研发的“妙招”帮你解决

TDengine

数据库 tdengine 开源

清源(CleanSource) SCA推出容器镜像扫描功能

安势信息

容器 安全 SCA 容器镜像 容器镜像Docker

❤️❤️❤️爱了爱了!这样的文字动画让你爱不释手!

岛上码农

flutter ios 前端 安卓开发 7月月更

阿里云架构师唐风:生命科学产业现状及发展趋势分享

阿里云弹性计算

高性能计算 生命科学 AI制药

2种数据库覆盖式数据导入方法介绍

华为云开发者联盟

数据库 大数据 后端

Java 缩小字符串( Compact String)和 压缩字符串(Compressed String)

HoneyMoose

想要治好水,龙王也要拜拜这朵云

白洞计划

Golang生成OpenAPI接口文档

百家饭隐私计算平台创业者

Go OpenAPI

SpringBootAdmin 2.5.5 发布,支持在线重启服务

冉然学Java

编程 springboot 构架 Java’

推理实践丨如何使用MindStudio进行Pytorch模型离线推理

华为云开发者联盟

人工智能

【Unity】绘制阿基米德螺旋线

萧然🐳

Unity 7月月更

Cgroup devices子系统

总想做点什么

企业自己如何快速开发一个简单实用的CRM客户管理系统?

优秀

CRM系统

云原生时代,金融企业如何完成全栈信创改造?

MIAOYUN

云原生 信创 国产化 金融信创 全栈改造

砥砺十年,“信”创未来!亚信科技AntDB数据库产品发布会即将启幕

亚信AntDB数据库

AntDB 国产数据库 亚信科技 产品发布会 数据库·

App Store 的 App 迁移

贾献华

7月月更

值得学习的Python GUI 库 - pyQt5快速入门及精美界面设计体验

迷彩

PyQt5 Qt Designer 7月月更

“一键”部署分布式训练,微软“群策MARO”上新集群管理助手_服务革新_李开琪_InfoQ精选文章