【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

“一键”部署分布式训练,微软“群策 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

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

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

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

关注

评论

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

C#入门系列(十七) -- 类和对象

陈言必行

C# 6月月更

疫情过后,远程办公还在吗,企业如何构建数字化转型

WorkPlus

【直播回顾】OpenHarmony知识赋能六期第一课—OpenHarmony智能家居项目介绍

OpenHarmony开发者

OpenHarmony

Flutter macOS 模板 – Flutter macOS Drawer Widget 示例

坚果

6月月更

软件成分分析(SCA)完全指南

SEAL安全

开源 应用安全 软件安全 软件成分分析 应用安全测试

C#/VB.NET:从PDF中提取图片

在下毛毛雨

C# .net PDF 提取图像

spring4.1.8扩展实战之六:注册bean到spring容器(BeanDefinitionRegistryPostProcessor接口)

程序员欣宸

Java spring 6月月更

Django CRUD(创建、检索、更新、删除)基于函数的视图

海拥(haiyong.site)

Python 6月月更

【PIMF】OpenHarmony啃论文俱乐部—盘点开源鸿蒙三方库【1】

离北况归

OpenHarmony

转转统一权限系统的设计与实现(后端实现篇)

转转技术团队

后端 权限控制

【Python技能树共建】常用标准库

梦想橡皮擦

Python 6月月更

Linux开发_Shell脚本编程语言

DS小龙哥

6月月更

降本增效的居家办公心得-提高效率的百宝箱 | 社区征文

迷彩

远程办公 工具分享 6月月更 初夏征文

测试开发【Mock平台】06开发:项目管理(二)Atnd页面搭建经验实战与学习线路梳理

MegaQi

测试平台开发教程 6月月更 测试技术干货

知识管理对企业意味着什么

小炮

欧拉扬帆伙伴计划和鲲鹏科研创新使能计划,助力鲲鹏持续成长

科技热闻

大数据培训Flink 流怎么来处理 API

@零度

flink 大数据开发

BOM核心——window对象之窗口

大熊G

JavaScript 前端 6月月更

搭建个人博客,Docsify+Github webhook+JGit解决方案

艾小仙

Java GitHub webhook jgit halo

如何串连三个「语言工具」描述简洁清晰的需求?

LigaAI

程序人生 产品经理 需求 产品需求 产品设计与思考

ABAP-创建WebService服务

桥下本有油菜花

abap

【战码先锋】润和赛道正式开启,马上加入赢取双重大礼!

OpenHarmony开发者

Open Harmony

MySQL面试宝典-文件篇

CRMEB

如何规避开源安全漏洞风险?新思科技OSSRA报告给出建议

WorkPlus

远程办公三部曲 - 如何合理安排时间| 社区征文

耳东@Erdong

远程办公 6月月更 初夏征文 时间安排

提升“架构思维”?这本书值得一读!

博文视点Broadview

我们公司使用了6年的项目部署方案,打包 + 一键部署详解,稳的一批

沉默王二

Java

软件开发外包的优势,哪些企业适合软件开发外包?

开源直播系统源码

软件开发 直播带货 直播带货源码 视频带货

正式上架!TDengine 插件入驻 Grafana 官网

TDengine

数据库 tdengine Grafana

龙蜥社区成立云原生 SIG,引入 3 大核心技术,共建云原生生态

OpenAnolis小助手

开源 技术 云原生 龙蜥社区 sig

记录那些年 Nacos 的坑

Damon

6月月更

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