“All in Cloud”之后,和你聊聊「云原生DevOps的Kubernetes技巧」 了解详情
写点什么

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

  • 2021 年 5 月 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 年 5 月 14 日 10:12900
用户头像
刘燕 InfoQ记者

发布了 841 篇内容, 共 283.6 次阅读, 收获喜欢 1599 次。

关注

评论

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

开发质量提升系列:日常重视好投产,运维拍肩也不怕

罗小龙

最佳实践 方法论 28天写作 2月春节不断更

车载操作系统 (28天写作 Day26/28)

mtfelix

28天写作 车载操作系统 AOS QNX

考前复习必备MySQL数据库(关系型数据库管理系统)

我是哪吒

MySQL 程序员 面试 后端 2月春节不断更

工业互联网的“第一高地”,在哪?

浪潮云

工业互联网

从JNOS商业操作系统,看京东零售商业化之路新探索

京东科技开发者

零售 数字化转型

28天瞎写的第二百三十六天:emacs 党的没落

树上

28天写作

GitHub 标星 167k!你要的优质书籍这都有,还开源!

沉默王二

GitHub 开源 电子书

03- 抽奖小助手的那个「谁」

学习高手song轻松

「产品经理训练营」作业 03

🌟

产品经理 产品经理训练营 产品经理训练

即兴演讲的几种实用脚本

熊斌

读书笔记 28天写作

【CSS】css控制鼠标点击事件(pointer-events)

德育处主任

html/css CSS小技巧 28天写作 纯CSS 2月春节不断更

超好用的文件转换神器!拿走不谢~

白色蜗牛

程序员 软件工具 生产工具

浏览器同源策略,听说过么?

华为云开发者社区

浏览器 jsonp CORS 同源策略 跨域

产品经理训练营-第三周作业

玖玖

为您收录的操作系统系列-进程管理(上篇)

Arvin

操作系统 进程

手机里什么APP都没有,一个很无趣的人 | 视频号28天(27)

赵新龙

28天写作

深入理解 ProtoBuf 原理与工程实践(概述)

vivo互联网技术

数据结构 序列化 protobuf

利益相关者的问题及方案

梁媛

产品训练营-第三次作业

Geek_娴子

offline app

lidaobing

28天写作 offline app

浅谈OKR工作法

一笑

管理 OKR 28天写作

漫话递归与迭代

Justin

算法 方法论 成长 心灵鸡汤 28天写作

熬夜肝了个IDEA插件整合程序员常用的工具,总有你能用上的

Silently9527

程序员 IDEA idea插件

数据中心网络技术新贵:VXLAN与园区网络虚拟化

华为云开发者社区

网络 数据中心 虚拟化 VXLAN 二层网络

【作业-03】解决方案的设计与积累

西西里奇

机器学习笔记之:最熟悉的陌生阵

Nydia

第 3 周作业

老元宵

VUCA时代-不敏捷就得死

Ian哥

28天写作

产品训练营·第三周作业 & 总结

tiu

如果创意也可以被设计「幻想短篇 26/28」

道伟

28天写作

产品经理训练营第三周作业

happy-黑皮

产品经理训练营

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