<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 一鍵部署分布式訓練,微軟“群策 MARO”上新集群管理助手

一鍵部署分布式訓練,微軟“群策 MARO”上新集群管理助手

發(fā)布人:MSRAsia 時(shí)間:2021-05-19 來(lái)源:工程師 發(fā)布文章

編者按:2020年,微軟亞洲研究院發(fā)布并開(kāi)源了多智能體資源優(yōu)化平臺“群策 MARO”。為了幫助不同需求的用戶(hù)進(jìn)行更加便捷、高效的集群管理,也希望用戶(hù)可以方便快捷地部署分布式訓練任務(wù),微軟亞洲研究院的研究員和工程師們基于“群策M(jìn)ARO”平臺搭建了集群管理界面:MARO CLI。本文將為大家詳細介紹 MARO CLI 的功能和使用方法。

隨著(zhù)強化學(xué)習的不斷發(fā)展,多種多樣的算法、框架層出不窮,對計算資源的要求也與日俱增。為了推動(dòng)更大規模的訓練,也為了獲得更高的訓練效率,如今對分布式集群的需求也在不斷增加。因此,微軟亞洲研究院的研究員和工程師們在此前打造的通用資源優(yōu)化平臺群策(Multi-Agent Resource Optimization Platform,MARO)上,構建了一套輕量級的集群管理界面:MARO Command Line Interface(MARO CLI)。

除了提供高效靈活的環(huán)境組件、當前主流和前沿的強化學(xué)習算法,MARO 平臺希望通過(guò) MARO CLI 幫助不同需求的用戶(hù)進(jìn)行更加便捷高效的集群管理,也希望用戶(hù)可以方便快捷地部署分布式訓練任務(wù)?;?MARO 平臺,作為構建和管理訓練用集群的命令行接口,MARO CLI 提供的主要特性包括:

  • 多種方式的集群構建,既可以創(chuàng )建基于 Azure 云服務(wù)器或者 AKS 服務(wù)的遠端集群, 也可以將已有的計算資源整合成本地集群,從而提高計算資源的利用效率。

  • 部署任意的訓練任務(wù)到指定集群中,并根據每個(gè)任務(wù)的資源需求和當前集群的空閑資源進(jìn)行任務(wù)分配,從而更合理地利用集群資源。

  • 所有任務(wù)均部署在容器中運行,任務(wù)之間更加獨立,也更方便支持新的強化學(xué)習框架和算法,具有更好的擴展性。

  • 提供了配套的可視化界面,包括對硬件、任務(wù)、日志的監控。

下面我們將詳細介紹一下 MARO CLI 的架構和功能,希望能幫助大家更好地利用 MARO CLI 來(lái)進(jìn)行分布式集群的訓練。

MARO Process

為了讓開(kāi)發(fā)者能夠平緩地從單機模式過(guò)渡到分布式集群模式、降低調試成本和開(kāi)發(fā)成本,MARO CLI 提供了 Process mode,如圖1所示,這是 MARO CLI 中一種比較簡(jiǎn)單的本地單機管理模式。在這種模式下,MARO CLI 并不會(huì )創(chuàng )建真正的分布式集群,而是在本機中通過(guò)使用多進(jìn)程來(lái)啟動(dòng)訓練任務(wù),模擬真實(shí)分布式集群操作。

1.png

圖1:MARO Process mode 示意圖

通過(guò)在單機中模擬分布式場(chǎng)景主要有兩個(gè)優(yōu)點(diǎn):易于調試和開(kāi)發(fā)成本低。與單機環(huán)境不同的是,要使任務(wù)能順利地在分步式集群中運行,需要對代碼進(jìn)行一系列修改。使用 MARO Process mode 來(lái)測試修改好的代碼可以更直接地發(fā)現錯誤,而且不需要真正的分布式集群,這樣可以節省一大筆開(kāi)發(fā)成本。麻雀雖小,五臟俱全,在 MARO Process mode 下,使用 Redis 和 MARO 服務(wù)也可以做到任務(wù)管理和監控。

MARO Grass

Grass mode 是 MARO CLI 中最重要的一部分,如圖2所示。在這種模式下,MARO CLI 支持三種集群的創(chuàng )建模式:本地單機(grass/local), 本地集群(grass/on-premises) 和 Azure 云集群(grass/azure)。除了 Grass Local 模式外,其他 Grass 模式都會(huì )創(chuàng )建并管理真正的分布式集群,正如圖2所示,在 Grass mode 下,MARO CLI 會(huì )通過(guò)一系列組件來(lái)實(shí)現分布式集群管理。

2.jpg

圖2:MARO Grass mode 示意圖

與單機模式不同的是,我們將 MARO Grass 集群分為 master 節點(diǎn)和 node 節點(diǎn)。在 master 節點(diǎn)上,我們使用 Redis 作為一個(gè)中心化的數據庫來(lái)儲存運行時(shí)產(chǎn)生的數據,使用 samba-server 進(jìn)行整個(gè)集群的文件共享,并通過(guò) fluentd 進(jìn)行整個(gè)集群的日志收集。與此同時(shí),MARO CLI 也會(huì )啟動(dòng) master-agent 服務(wù)來(lái)進(jìn)行任務(wù)分配和集群狀態(tài)監控,以及一個(gè) RESTFul server: master-api-server 執行外部的命令,例如任務(wù)創(chuàng )建或者集群狀態(tài)監控。在 node 節點(diǎn)上,則會(huì )啟動(dòng) node-agent 服務(wù)不斷記錄自身節點(diǎn)的狀態(tài)和任務(wù)容器的狀態(tài)并上傳到 master 上的 Redis,也會(huì )運行 samber-client 和 RESTFul server: node-api-server 來(lái)與 master 節點(diǎn)進(jìn)行交互。

在 MARO Grass mode 下,與集群的交互都通過(guò) master 節點(diǎn)來(lái)進(jìn)行:可以通過(guò) ssh 進(jìn)行文件和數據的傳輸,也可以通過(guò) Web Client 進(jìn)行集群任務(wù)管理和狀態(tài)監控。出于安全考慮,對于每次 Web Client 的訪(fǎng)問(wèn)我們都會(huì )使用 RSA+AES 混合加密,而集群內部的通訊則是不加密的。master 節點(diǎn)收到加密指令后,將執行具體的操作、與 node 節點(diǎn)進(jìn)行交互、將任務(wù)部署到具體某個(gè)容器中(可能被分配到不同的 node 節點(diǎn)上)。下面介紹一下三種集群創(chuàng )建模式的特點(diǎn):

本地單機(grass/local)

MARO Grass Local 與 MARO Process 類(lèi)似,都是本地單機的集群模擬,但與之不同的是 MARO Grass Local 會(huì )將任務(wù)部署在容器內,也允許客戶(hù)自定義模擬集群或任務(wù)的資源大小,更加貼合真實(shí)的分布式集群操作。

本地集群(grass/on-premises)

MARO Grass On-Premises 可以利用手邊現有的計算資源來(lái)快速創(chuàng )建集群,并進(jìn)行高效便捷的管理。用戶(hù)可以將在同一局域網(wǎng)內的資源自由加入到創(chuàng )建的 Grass 集群中,并通過(guò) MARO CLI 進(jìn)行任務(wù)分配和集群管理。

Azure云集群(grass/azure)

MARO Grass Azure 是一種分布式集群管理,主要用于基于 Azure 云的遠程集群?;?Azure CLI 的部分接口,MARO CLI 可以實(shí)現 Azure 云集群的自定義創(chuàng )建、節點(diǎn)的增減和集群狀態(tài)監控。

MARO K8S

MARO CLI 同樣支持使用 Kubernetes (K8S) 來(lái)創(chuàng )建集群,如圖3所示。Kubernetes 是一個(gè)開(kāi)源的、用于管理云平臺中多個(gè)主機上的容器化的應用,同時(shí)也是一個(gè)知名度很高,并被廣泛應用的集群管理軟件。

3.jpg

圖 3:MARO K8S mode 示意圖

通過(guò)對 Kubernetes 的支持,可以滿(mǎn)足用戶(hù)對 Kubernetes 集群的需求,也更方便那些 Kubernetes 集群用戶(hù)上手熟悉 MARO CLI。依賴(lài)于 Kubernetes 的架構,我們可以輕松地創(chuàng )建擁有數以百計的節點(diǎn)的大型集群,這賦予了 MARO CLI 更好的延展性和更高的穩定性。在此模式下,我們使用 Azure File Service 在所有 Kubernetes Pods 下進(jìn)行文件共享,同時(shí)所有的任務(wù)都會(huì )部署在 Kubernetes Pods 中,由 Kubernetes 進(jìn)行維護。如果需要使用鏡像,我們則會(huì )使用 Azure Container Registry 來(lái)進(jìn)行鏡像管理。

舉個(gè)“栗子”:從單機到分布式

在 MARO 平臺中,我們準備了很多場(chǎng)景和很多算法的示例,對每個(gè)示例也分別準備了單機版和分布式版本。通過(guò)使用 MARO 平臺中的 RL toolkit 和 Communication toolkit,就可以將單機版的訓練任務(wù)改成分布式版本。在這里我們使用示例中針對 Container Inventory Management(CIM)問(wèn)題的 DQN 算法,來(lái)說(shuō)明如何通過(guò)MARO CLI 一步步部署分布式訓練任務(wù)。完整示例代碼可參考https://github.com/microsoft/maro/tree/master/examples/cim/dqn,對于每個(gè)模式的詳細使用說(shuō)明,請見(jiàn)文末。

使用 MARO Process 模式

在 MARO Process 模式下,首先我們通過(guò) maro process create 命令在本地啟動(dòng) MARO Process 模式,之后通過(guò) maro process template 命令來(lái)生成 MARO 任務(wù)模版,如圖4所示。

4.png

圖 4:MARO Process mode 創(chuàng )建集群模版

在示例中,我們將 DQN 算法拆成了 actor 和 learner,然后將我們需要的數量和啟動(dòng)命令寫(xiě)到模版的對應位置,再通過(guò) maro process job start 啟動(dòng)任務(wù)。我們可以通過(guò) maro process job stop/list/log 命令進(jìn)行任務(wù)管理,也可以在可視化界面查看任務(wù)狀態(tài)。

使用 MARO Grass/Azure 模式

使用 MARO Grass/Azure 模式需要用戶(hù)具有一定的 Azure 使用經(jīng)驗,因為在創(chuàng )建集群時(shí)會(huì )對 Azure 有一定的權限要求。與 MARO Process 模式一樣的是,我們可以通過(guò) maro grass template 命令來(lái)生成集群模版和任務(wù)模版,如圖5、圖6所示。

5.png圖5:MARO Grass mode 創(chuàng )建集群模版

6.png

圖 6:MARO Grass mode 創(chuàng )建任務(wù)模版

首先根據我們的 Azure 賬戶(hù)將集群模版補充完整,然后通過(guò) maro grass create 命令啟動(dòng)所需要的集群,并用 maro grass node scale 來(lái)控制集群 node 節點(diǎn)資源。MARO Grass 下的任務(wù)模版與 MARO Process 很不相同,因為會(huì )將任務(wù)容器化,所以在啟動(dòng)任務(wù)之前,需要通過(guò) maro grass image push 命令將需要的鏡像文件部署到剛剛創(chuàng )建的集群上,再通過(guò) maro grass data push 將需要用到的文件傳送到集群中。

另外,可以給每種組件(component)分配不同的資源,最優(yōu)化地利用集群資源。在鏡像和文件都部署到集群后,我們就可以通過(guò) maro grass job start 將訓練任務(wù)部署到集群之中了。

一目了然的可視化界面

MARO CLI 提供了一個(gè)簡(jiǎn)潔明了且帶有內置命令行終端的可視化界面,方便用戶(hù)進(jìn)行集群管理和任務(wù)狀態(tài)查詢(xún)。在界面中首先顯示的是當前集群的資源信息和使用率,同時(shí)也會(huì )依訓練任務(wù)狀態(tài)來(lái)展示集群內的任務(wù)概覽。

7.png

圖 7:集群可視化界面

8.png

圖 8. MARO CLI 結構概覽

與其他集群管理平臺不同,MARO CLI 并不僅僅支持一種集群,它提供了多種模式來(lái)滿(mǎn)足用戶(hù)對集群的不同需求。對于剛剛接觸分布式訓練的用戶(hù)來(lái)說(shuō),我們建議在熟悉了 MARO RL toolkit 和 Communication toolkit 之后,可以使用 MARO CLI 中的 Process 和 Grass Local 模式在單機中模擬集群操作。而對于手邊有空閑計算資源并對分布式集群有一定了解的用戶(hù),則可以通過(guò) MARO CLI 中的 Grass On-Premises 模式快速搭建集群,并在集群中部署訓練任務(wù)。對于有一定 Azure 云使用經(jīng)驗的用戶(hù),可以通過(guò) MARO CLI 中的 Grass Azure 來(lái)構建基于 Azure 云的遠端集群。如果還有已經(jīng)使用過(guò) Kubernetes 的用戶(hù),MARO CLI 同樣也支持搭建 Kubernetes 集群。

MARO CLI 仍是一個(gè)正在蓬勃發(fā)展的項目,未來(lái)將會(huì )不斷改進(jìn),變得更加簡(jiǎn)單、快速和強大。歡迎大家關(guān)注并使用 MARO 平臺,也歡迎大家與我們進(jìn)行技術(shù)交流!

*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: 深度學(xué)習

相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>