分散式深度學習的兩種集群管理與調度的實現方式簡介
為什麼需要集群管理與調度
上文我們簡單介紹了深度學習、分散式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:程序員小新人學習 |