AICon上海「Agent与多模态解决方案专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

“一键”部署分布式训练,微软“群策 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:121430
用户头像
刘燕 InfoQ高级技术编辑

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

关注

评论

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

Apache DolphinScheduler ASF 孵化器毕业一周年,汇报来了!

白鲸开源

Big Data DolphinScheduler workflow Open Source apache 社区

平安普惠湖北分公司:疫情后来式,复工进行时

科技新消息

web前端培训学习需要掌握哪些 Linux 命令

@零度

前端开发

Jira 云产品宕机多日,业界热议上云如何保障数据安全

万事ONES

Atlassian Jira 研发管理工具 项目管理工具 企业研发管理

从Opentracing、OpenCensus 到 OpenTelemetry,看可观测数据标准演进史

阿里巴巴云原生

今天聊一聊合成数据 (Synthetic Data)

澳鹏Appen

人工智能 数据集 数据标注 数据训练 合成数据

新思科技助力Linux基金会开展最新开源普查项目

InfoQ_434670063458

Linux 开源 新思科技

交易所多种模式开发、各种源码交易

Geek_56201b

交易所开发 区块链应用开发 软件定制

ModStartCMS模块化建站系统 v3.7.0 栏目导航开关,页面样式优化

ModStart开源

周日直播|OpenMLDB Pulsar Connector,高效打通实时数据到特征工程

Apache Pulsar

开源 架构 云原生 Apache Pulsar 消息中间件

大数据培训关于数据采集面试问题分享

@零度

数据采集 面试问题 大数据开发

低代码极简部署

源字节1号

低代码开发

去中心化钱包系统开发app,imtoken钱包平台搭建源码

Geek_56201b

#区块链# 源码搭建 去中心化钱包

EventBridge 特性介绍|以 IaC 的方式使用 EventBridge

阿里巴巴云原生

Docker 实战教程之从入门到提高 (四)

汪子熙

Docker 容器 虚拟化 docker image 4月月更

专车数据层架构进化往事:好的架构是进化来的,不是设计来的

勇哥java实战分享

架构

Android C++系列:C++最佳实践2抽象类

轻口味

c++ android 4月月更

GPU和AT的区别在哪里?GPU与AT有哪些区别?

Finovy Cloud

人工智能 GPU服务器 显卡、gpu GPU算力

平安普惠湖北分公司:齐心抗疫显担当,助力小微迎暖春

科技新消息

如何通过云效Codeup高效落地分支模式,提升开发协作率

阿里云云效

云计算 阿里云 版本管理 分支管理 分支模式

得物App H5秒开优化实战

得物技术

前端 H5 优化 实战 Web H5

【数字底座专题】星环科技春季新品发布周

星环科技

java培训:怎样才能写出一个优秀的对外接口

@零度

JAVA开发 对外接口

选择it资产管理软件要注意什么?

低代码小观

资产管理 企业管理系统 低代码开发 #资产追踪 客户关系管理系统

华为云推出限量NFT云宝,区块链技术为你的数字资产保驾护航

华为云开发者联盟

华为云 NFT 云宝 华为云NFT 华为云数字资产链

jackson学习之九:springboot整合(配置文件)

程序员欣宸

4月月更

TASKCTL服务端字符界面的应用系统安装

敏捷调度TASKCTL

kettle 元数据 ETL 调度任务 大数据运维

TiDB 查询优化及调优系列(一)TiDB 优化器简介

PingCAP

共探开源生态|Apache Pulsar 社区助力 Apache APISIX Summit Asia 2022

Apache Pulsar

开源 架构 云原生 Apache Pulsar Apache Pulsar 社区

web技术支持| 简单实现Vue第一章:模板编译

anyRTC开发者

Vue 前端 Web 音视频 WebRTC

对Indexlookup的理解误区

TiDB 社区干货传送门

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