當前位置:
首頁 > 知識 > 分散式深度學習的兩種集群管理與調度的實現方式簡介

分散式深度學習的兩種集群管理與調度的實現方式簡介

為什麼需要集群管理與調度

上文我們簡單介紹了深度學習、分散式CPU+GPU集群的實現原理,以及分散式深度學習的原理,我們簡單回顧一下:

分散式CPU+GPU集群的實現:

GPU集群並行模式即為多GPU並行中各種並行模式的擴展,如上圖所示。節點間採用InfiniBand通信,節點間的GPU通過RMDA通信,節點內多GPU之間採用基於infiniband的通信。

分布深度學習框架的實現:

如下圖所示,在tensorflow中,計算節點稱做worker節點,Worker節點主要完成模型的訓練與計算。參數伺服器可以是多台機器組成的集群,類似分散式的存儲架構,涉及到數據的同步,一致性等等, 一般是key-value的形式,可以理解為一個分散式的key-value內存資料庫,然後再加上一些參數更新的操作,採取這種方式可以幾百億的參數分散到不同的機器上去保存和更新,解決參數存儲和更新的性能問題。

在分散式深度學習框架運行時,可以將深度學習框架部署到具體的物理集群,PS伺服器可以挑選如下圖中的node0、node1…,worker節點可以挑選如下圖中的node i,node N-1

集群的具體配置,參數伺服器可以不用GPU,worker節點因為需要進行模型計算,所在的伺服器需要配置GPU卡。

至此,我們基本搭建了一個深度學習的硬體集群,同時也將深度學習框架部署到了深度學習的伺服器集群,但是,整個深度學習集群(包括軟硬體),可能是公司內部的共享資產,每個項目組都需要使用,那麼,採取上述方式部署便會帶來如下問題:

1. 要求項目組必須使用統一的深度學習框架,統一的深度學習框架的版本,否則不同項目組完成的訓練代碼有可能不工作,如果每次為了適應某個項目組的要求去重新部署框架,工作量巨大,而且耗時耗力;

2. 其中一個項目組在使用集群時,其他項目組往往需要等待,導致集群的資源使用率較低;

3. 伺服器集群中任何一台硬體出現問題,都會影響整個集群的使用。

集群管理與調度實現的兩種思路

基於Kubernetes平台

Kubernetes是Google開源的容器集群管理系統,其提供應用部署、維護、 擴展機制等功能,利用Kubernetes能方便地管理跨機器運行容器化的應用,其主要功能如下:

1) 使用Docker對應用程序包裝(package)、實例化(instantiate)、運行(run)。

2) 以集群的方式運行、管理跨機器的容器。

3) 解決Docker跨機器容器之間的通訊問題。

4) Kubernetes的自我修復機制使得容器集群總是運行在用戶期望的狀態。

Kubernetes自1.3開始支持GPU,但當時只能最多支持單GPU的調度,自1.6開始,已經支持多GPU的調度,更多關於Kubernetes的與GPU介紹可以參考本系列未來的第3篇:分散式機器學習的兩種集群方案介紹之基於Kubernetes的實現,這裡不太多贅述。

如果要完成基於Kubernetes的集群調度管理深度學習框架,需要將深度學習框架運行到容器之中。系統整體架構圖將變為:

這裡面涉及到一個Kubernetes集群調度的問題,即Kubernetes如何將ps、worker所在容器所需要的CPU、GPU、內存、存儲進行調度,以滿足需求。

集群經過Kubernetes進行管理以後,分散式深度學習框架運行在容器中,容器通過Kubernetes進行調度以滿足所需的模型訓練資源,因此能夠很好的滿足集群資源多部門共享的要求。我們看對以下問題的解決。

1. 要求項目組必須使用統一的深度學習框架,並要求統一版本,否則不同項目組完成的訓練代碼有可能不工作,如果每次為了適應某個項目組的要求去重新部署框架,工作量巨大,而且耗時耗力;

解決:基於容器+ Kubernetes平台,每個項目組可以很容易的申請自己所需要的深度學習框架,tensorflow、caffe等,同時同一種深度學習框架的多種版本支持也不在話下。

2. 其中一個項目組在使用集群時,其他項目組往往需要等待,即使集群的資源使用率較低;

解決:只要集群有利用率沒達到100%,便可以方便地為其他項目組部署深度學習環境。

3. 伺服器集群中任何一台硬體出現問題,都會影響整個集群的使用;

解決:通過Kubernetes的調度,完成底層硬體的容錯。

天雲軟體基於Kubernetes平台研發的SkyForm ECP平台,已經完整的支持了GPU調度,同時也集成了tensorflow,caffe等深度學習框架。

基於MPI並行調度

我們此處引入HPC領域中的MPI集群作業調度管理解決方案,因為在神經元網路(也包括含更多隱層的深度學習場景下),上一層神經元計算完成以後才能進行下一層神經元網路的計算,這與MPI的計算思路不謀而合。MPI是高性能計算(HPC)應用中廣泛使用的編程介面,用於並行化大規模問題的執行,在大多數情況下,需要通過集群作業調度管理軟體來啟動和監視在集群主機上執行的MPI任務。此方法的主要目標是使集群作業調度管理軟體能夠跟蹤和控制組成MPI作業的進程。

一些集群作業調度管理軟體,如IBM Platform LSF、天雲軟體SkyForm OpenLava等,可以跟蹤MPI任務的CPU、內存、GPU的使用。我們把每個深度學習的計算作為MPI作業,通過天雲軟體OpenLava作業調度管理軟體進行集群統一的資源管理與分配,具體的實現思路如下:

基於集群作業調度管理的解決方案,也能很好的滿足深度學習集群多部門共享,多作業並發運行的特性,且能兼顧效率。

其中天雲軟體SkyForm Openlava是一個增強的、基於開源OpenLava併兼容IBM? Spectrum LSFTM的企業級工作負載調度器,並針對半導體研發、深度學習等的工作負載做了設計與優化。不論是現場物理集群部署,虛擬基礎設施部署,還是雲中部署,客戶都不用支付高昂的許可證費用。具體的openlava介紹,可參考網站openlava.net。

另外,在深度學習框架需要基於MPI方式運行時,往往需要進行重新編譯,並不是所有的版本都支持。

分散式深度學習的兩種集群管理與調度的實現方式簡介

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

MongoDB安全、其他命令
代碼生成x264編碼flv記錄

TAG:程序員小新人學習 |