各位知友大家好,從今天開始,戴爾科技集團在知乎的《AIoT時代下的數據資產》專欄就正式上線啦(鼓掌撒花??????)。在接下來的每個周三,我們都將為大家帶來前沿科技領域的乾貨文章,劃重點,乾貨!

這麼有信心?沒錯!因為這些文章由戴爾易安信中國研發中心的專家們親自撰寫,他們長期從事著AI、Iot以及數據存儲等領域的一線研發工作,對於當下和未來的科技發展態勢有著深刻的見解。

歡迎大家關注本專欄,如果您有疑問或建議,歡迎在下方留言。每周三,我們不見不散~


基於數據中心集群資源的深度學習工作負載統一框架

作者/戴爾易安信中國研發中心 李三平

摘要

分散式深度學習應用往往需要用戶在運行環境的多節點部署和可擴展性上投入大量時間與精力,而基於數據中心集群資源的深度學習工作負載的統一支持框架,主要目的是實現深度學習工作負載在數據中心資源池上的自動化部署與執行,從而幫助用戶將更多注意力集中在商業邏輯和深度學習問題本身。

工作流程概述

基於數據中心集群資源的深度學習工作負載統一支持框架的構成組件與工作流程如圖 1所示。

圖 1. 深度學習工作負載的統一支持框架Deep Learning Harness

(1) 用戶提交學習任務規範(或深度學習模型)與數據集

(2) 深度學習後端服務系統按照問題類型與數據特徵生成推薦模型

(3) 為深度學習模型自動生成TensorFlow代碼

(4) 基於CPU、GPU集群計算資源池對學習任務進行優化調度

(5) 啟用深度學習工作負載監控分析工具

(6) 載入代碼與數據集,在指定資源上執行深度學習工作負載

(7) 訓練過程的實時可視化監測與檢查點自動保存

(8) 保存任務執行結果

(9) 深度學習任務結果的分析與可視化

接下來我們就支持框架中的若干關鍵功能與實現方法(如圖 2所示)依次展開討論。

圖 2. 支持框架的關鍵功能與實現方法

CPU-GPU計算資源池

將數據中心伺服器集群中的CPU資源和各種不同類型、不同數目的GPU資源整合為邏輯上單一的計算資源池,可以幫助用戶避免花費大量的精力去學習、理解不同類型計算資源的性能特點,尤其是在部署分散式深度學習工作負載時,用戶只需指定期望的

計算資源類型和數量即可;甚至用戶可以不指定計算資源,支持框架中的資源控制器能夠根據用戶工作負載的特徵,諸如模型複雜度、訓練數據量等,動態選擇最佳計算資源(我們會在後文中展開討論)。對計算資源的池化管理可以有效地實現智能調度,提高資源利用率,保證用戶對深度學習工作負載的SLA要求。

深度學習任務的資源預估模型

前文中提到根據用戶工作負載特徵在計算資源池中動態選擇最佳資源,這就意味著在用戶學習任務實際運行之前,支持框架需要對任務的資源佔用做出估計。因此,我們利用機器學習方法構建針對深度學習任務的資源預估模型。

模型構建依據首先是深度神經網路高度結構化的特徵,因此可以對模型複雜度進行量化描述。其次是深度學習任務的資源消耗、運行時間與模型複雜度、數據規模、迭代次數等因素存在近似線性的對應關係。

以卷積神經網路為例,我們可以通過對諸如卷積層數目、卷積濾鏡數目、全連接層數目、全連接層節點數目、輸入圖像大小、批數據大小等變數進行連續改變,從而得到一系列具有定製化結構的卷積神經網路。然後在特定類型與數量的計算資源上運行這些定製化的卷積網路學習任務,並對資源消耗、運行時間等數據進行監控記錄。這時我們就已經獲得了卷積神經網路學習任務關於模型結構、資源消耗與時間性能的基準數據集,然後利用線性回歸或者曲線擬合技術來構建機器學習模型。

在對深度學習任務進行資源預估時,輸入信息包括用戶提交或者自動生成的深度學習任務代碼,訓練數據規模,與學習任務相關的參數例如批數據大小、迭代次數等,以及用戶的期望運行時間。首先從代碼中提取深度學習模型結構,形成量化特徵描述;然後預估模型會按照資源池中可用的計算資源類型與數量進行運行時間估計;在滿足用戶關於運行時間的約束下,模型會選擇能耗最小的資源配置方案作為輸出。

深度學習任務的資源配置推薦

基於資源預估模型,我們構建後端web服務以實現完整的面向深度學習任務的數據中心資源配置推薦機制。按照資源池中當前可用的資源類型和數量,利用機器學習模型對特定計算資源下的任務執行時間進行估計,同時將數據中心的伺服器配置、網路連接與帶寬、延遲等作為經驗知識,在滿足用戶關於運行時間的要求下,遵循能耗最小化原則,為用戶提供資源配置的推薦方案。

在異構GPU資源上部署深度學習任務

數據中心的CPU-GPU計算資源池中,往往包含具有不同型號GPU的伺服器集群,將用戶的深度學習任務部署在由異構GPU組成的伺服器集群上,無疑可以更加充分地利用數據中心的當前可用資源。但是,如果只是簡單地按照通常的分散式深度學習方法,那麼在模型參數的同步過程中,相同規模的輸入數據會導致性能較差的GPU降低性能更好的GPU的更新速度。

因此,在異構GPU資源上部署分散式深度學習任務,我們首先要考慮如何達到不同類型GPU之間的性能同步。簡單來說,通過調整分配至不同GPU的批數據大小可以達到各個GPU之間參數更新的近似同步。基於資源預估模型的輸出,結合自適應的批數據大小調整方法,我們可以很快找到異構GPU資源的批數據大小分配方案。

那麼,當我們將輸入數據的平均分配方法改為不均勻分配以屏蔽異構GPU之間的計算性能差異時,隨之而來的另一個問題就是,理論上我們也改變了各個GPU節點上深度學習過程的收斂性能。所以,我們也需要相應調整深度學習模型的超參數,以保證訓練任務的收斂性能不被影響。

學習率通常是深度模型超參數微調的首要選項,因此我們針對特定的批數據大小,利用啟發式方法去尋找對當前深度學習模型來說最合適的學習率設置。首先使學習率以指數函數形式進行遞增,觀察訓練階段的精度曲線,並利用高階曲線擬合與對數曲線擬合,以啟發式方法找出學習率的優化區間或優化中值,以此作為梯度優化演算法的學習率設置。

分散式深度學習工作負載的自動部署

在確定了計算資源配置和相應的參數調整方案之後,支持框架還需要實現深度學習負載的自動化分散式部署,以形成完整的深度學習工作流程。例如,我們可以使用容器化技術,將數據中心的CPU、GPU資源以容器形式進行管理和提供,使用Horovod開源框架實現深度學習負載的多節點部署,編寫可重用自動化腳本以實現訓練數據的多節點預先載入,工作負載的跨節點部署和啟動,同時還包括監控分析工具的啟動,以及對監控數據、檢查點文件和訓練結果的自動保存。

結語

至此,支持框架幫助用戶完成了深度學習工作負載在數據中心計算資源上的自動化部署和運行,用戶就可以將更多的注意力集中在商業邏輯、數據分析與預處理、模型調試等問題上。也就是說,用戶只需關注深度學習任務本身,支持框架則負責幫助用戶實現工作負載在計算資源上的調度與執行。


推薦閱讀:
相关文章