杜克大學NIPS 2017 Oral論文:分散式深度學習訓練演算法TernGrad
機器之心報道
作者:吳欣
為了提高分散式深度學習的速度和效率,杜克大學「進化智能研究中心」陳怡然和李海教授的博士生溫偉提出了 TernGrad 分散式訓練演算法,並與 Hewlett Packard Labs(慧與研究院)徐聰和內華達大學的顏楓教授合作,在大規模分散式深度學習中進行了有效的驗證。該工作可以將浮點型的學習梯度(gradients)隨機量化到三元值(0 和±1)。理論上,可以把梯度通信量至少減少為原來的 1/20。
日前 NIPS 2017 放出了接收論文,杜克大學的此項工作(TernGrad: Ternary Gradients to Reduce Communication in Distributed Deep Learning)被該頂會接收為今年的口頭演講(oral)。據統計,今年 NIPS 投稿 3240 篇,僅 40 篇接收為口頭演講。
目前,論文已經可以從 arXiv 下載,源代碼也在溫偉的個人 GitHub 上公開。
論文鏈接:https://arxiv.org/pdf/1705.07878.pdf
代碼地址:https://github.com/wenwei202/terngrad
背景介紹
隨著深度學習神經網路規模越來越大,訓練一個深度神經網路(Deep Neural Networks, DNNs)往往需要幾天甚至幾周的時間。為了加快學習速度,經常需要分散式的 CPU/GPU 集群來完成整個訓練。如圖 1,在主流的基於數據並行(data parallelism)的分散式深度學習中,各個計算單元(worker)並發地訓練同一個 DNN,只不過各個單元用到的訓練數據不一樣,每一次迭代結束後,各個計算單元里的 DNN 參數或梯度
會通過網路(如乙太網,InfiniBand 等)發送到參數伺服器(Parameter Server)進行同步再下發
。訓練時間主要包括計算時間(computation time)和通信時間(communication time)。計算時間可以通過增加 workers 線性地減少,然而,通信時間卻隨著 workers 的增加而增加。因此,在大規模分散式訓練中,通信時間成為了新的瓶頸,如何降低通信時間成為很重要的研究課題。理論上,TernGrad 可以把通信量至少減少到 1/20;實際應用中,即使對 0 和±1 採用簡單的 2 比特編碼(浪費掉一個可用值),相對於傳統的 32 比特的浮點型梯度,通信量也可以減少到 1/16。這可以大大克服通信瓶頸的約束,提升分散式訓練的可擴展性。
圖 1. 基於數據並行的分散式訓練
溫偉表示,「大大降低梯度的精度,會嚴重影響 DNN 訓練效果。在基於量化的深度模型壓縮演算法中,即使可以將網路權重量化到低精度,但是訓練過程仍然需要浮點精度的梯度,以保證訓練的收斂性。那麼我們是怎麼將梯度量化到只有三個值,卻不影響最後識別率的呢?我們的方法其實很簡單,在普遍採樣的隨機梯度下降(Stochastic Gradient Descent,SGD)訓練方法中,梯度是隨機的,而且這種隨機性甚至可以有助於 DNNs 跳出很差的局部最小值。既然梯度本來就是隨機的,那為什麼我們不把它們進一步隨機地量化到 0 和±1 呢?在隨機量化時,我們只需要保證新梯度的均值還跟原來一樣即可。
在訓練過程中,因為學習率往往較小,在梯度形成的優化路徑上,即使 TernGrad 偶爾偏離了原來的路徑,由於均值是一樣的,後續的隨機過程能夠將偏離彌補回來。我們基於伯努利分布,類似於扔硬幣的形式,把梯度隨機量化到 0 或±1。在合理假設下,我們理論上證明了 TernGrad 以趨近於 1 的概率收斂到最優點。相對於標準 SGD 對梯度的上界約束,TernGrad 對梯度有更強的上界約束,但是我們提出了逐層三元化(layer-wise ternarizing)和梯度修剪(gradient clipping)技術,使得 TernGrad 的梯度上界約束接近標準 SGD 的上界約束,從而大大改善了 TernGrad 的收斂性。實驗結果表明,在分散式訓練 AlexNet 時,TernGrad 有時甚至會提高最後的識別率;在 GoogleNet 上,識別率損失也小於 2%。(圖 2 為分散式訓練 AlexNet 的結果,相對於標準 SGD 基線,TernGrad 具有同樣的收斂速度和最終識別率。)」
圖 2:基於 TernGrad 訓練 AlexNet 的收斂性
來自 Hewlett Packard Labs 的徐聰從研究院與公司的角度,談到此項工作的意義。
「提高分散式深度學習的速度和可擴展性對於工業界有著非常實際的意義。從我們研究院的角度出發,能夠快速的根據每次的訓練結果迭代改進神經網路的設計對於每個研究員的科研效率的提升有很大的幫助。從更實際的產品角度出發,我們公司有的客戶購買了帶有八塊 NVIDIA GPU 的 HPE Apollo 6500 伺服器以後,在使用某些原生態的深度學習框架訓練部分神經網路的時候,觀察到在八卡上的訓練速度甚至不如四卡,對這些神經網路來說,無法有效的利用其中一半的 GPU,是資源上的很大浪費。
在我們幫助這些客戶進行性能分析以後,發現通信確實是最重要的瓶頸之一。因此他們希望我們提供一個有效的解決方案,比如提供針對通信瓶頸進行優化的深度學習框架。在這方面,微軟將 1-bit SGD 集成在它們的深度學習框架 CNTK 中,在某些語音應用上的訓練速度獲得了顯著提升。然而 1-bit SGD 需要初期採用浮點精度的 SGD 進行預訓練,為後續 1-bit SGD 提供較好的初始值。另外,其收斂性尚未理論證明,能否廣泛應用尚未知道。TernGrad 能夠從頭開始訓練,並在理論上保證收斂。這使得 TernGrad 可適用於更廣泛的 SGD 深度學習應用場景。」
內華達大學的顏楓教授說分散式深度學習可以通過計算集群來提高訓練的速度和精度(在相同的時間內採用更複雜的模型和/或更多的訓練數據)。但是由於近年來通信性能的發展速度遠落後於計算性能的發展速度,因此通信速度和效率常常成為分散式深度學習中的瓶頸所在。為了改進通信的速度和效率,近年來也有很多這方面的工作,但此類工作往往只針對於某種特定的應用場景(比如語音)或者以犧牲較大的訓練精度為代價,所以在實際使用中有著很多的局限性。
所以顏楓教授認為,「我們這次的工作充分考慮了通用性和透明性(幾乎不影響訓練的精度),使得 TernGrad 得以更廣泛更簡便的應用。TernGrad 通過提升通信速度和效率讓分散式深度學習能更有效地利用計算資源。這樣不但可以讓最新的硬體(比如 GPU,TPU 等)更好地發揮計算潛能,也能讓老的計算集群大大提高性能(比如用低速乙太網連接的集群),節省資源和成本。更重要的是對於網路帶寬有限但計算資源幾乎可以無限擴展的雲計算,TernGrad 可以大大提高分散式深度學習的延展性。
此外,基於我們之前對分散式深度學習系統性能的建模和分析,我們還設計了一套強化通信性能分析的性能模型,支持各種計算架構和通信模式。這個性能模型利用單個機器性能的分析和計算模型的結合,可以迅速預測出計算集群的性能和瓶頸,從而快速判斷我們的 TernGrad 可以帶來多大的性能提升,亦可幫助用戶在搭建系統和升級系統的時候分析和優化方案。目前我們正在完善和改進 TernGrad 的源代碼,並計劃在超大規模的硬體平台上做更加詳盡的測試和優化。TernGrad 的核心方法還可以延伸到其他具有類似性質的應用中去,因此這個工作具有深遠的影響和意義。」
※CMU研究者探索新卷積方法:在實驗中可媲美基準CNN
※在這場智能汽車浪潮中,互聯網公司、傳統車企、供應商在搶奪的是什麼生意
※生成對抗網路初學入門:一文讀懂 GAN 的基本原理
※UC Berkeley新研究:多視角圖像3D模型重建技術
TAG:機器之心 |