分佈式機器學習系統筆記(一)——模型並行,數據並行,參數平均,ASGD

歡迎轉載,轉載請註明:本文出自Bin的專欄blog.csdn.net/xbinworld。
技術交流QQ羣:433250724,歡迎對算法、技術、應用感興趣的同窗加入。
文章索引::」機器學習方法「,」深度學習方法」,「三十分鐘理解」原創系列html


2017年3 月,谷歌大腦負責人 Jeff Dean 在 UCSB 作了一場題爲《經過大規模深度學習構建智能系統》的演講[9]。Jeff Dean 在演講中提到,當前的作法是:算法

解決方案 = 機器學習(算法)+ 數據 + 計算力服務器

將來有沒有可能變爲:markdown

解決方案 = 數據 + 100 倍的計算力?網絡

因而可知,谷歌彷佛認爲,機器學習算法能被超強的計算力取代[9]。
這裏寫圖片描述架構

[11]研究工做代表,任務表現與訓練數據數量級呈線性增加關係。或許最使人震驚的發現是視覺任務的表現和用於表徵學習的訓練數據量級(對數尺度)之間的關係居然是線性的!即便擁有 300M 的大規模訓練圖像,咱們也並未觀察到訓練數據對所研究任務產生任何平頂效應(plateauing effect)。框架

這裏寫圖片描述

上圖說明預訓練模型在 JFT-300M 不一樣子數據集中的目標檢測性能。其中 x 軸表明數據集的大小,y 軸表明在 mAP@[.5,.95] 中 COCO-minival 子數據集上的檢測性能。機器學習

要完成超大規模數據的訓練,以及訓練超大規模的神經網絡,靠單GPU是行不通的(至少目前來看),必需要有分佈式機器學習系統的支撐,本文以及接下來幾篇博客,會記錄一下前面幾年比較經典的分佈式機器學習系統的學習筆記,文中資料都參考了public的paper或者網上資料,我會本身整理一下,並標明出處。做爲第一篇,先整體地介紹一個全貌的基本概念。異步

並行模型

  • 模型並行( model parallelism ):分佈式系統中的不一樣機器(GPU/CPU等)負責網絡模型的不一樣部分 —— 例如,神經網絡模型的不一樣網絡層被分配到不一樣的機器,或者同一層內部的不一樣參數被分配到不一樣機器;[14]
  • 數據並行( data parallelism ):不一樣的機器有同一個模型的多個副本,每一個機器分配到不一樣的數據,而後將全部機器的計算結果按照某種方式合併。

這裏寫圖片描述

  • 固然,還有一類是混合並行(Hybrid parallelism),在一個集羣中,既有模型並行,又有數據並行,例如,能夠在同一臺機器上採用模型並行化(在GPU之間切分模型),在機器之間採用數據並行化。

這裏寫圖片描述

數據並行

數據並行化式的分佈式訓練在每一個工做節點上都存儲一個模型的備份,在各臺機器上處理數據集的不一樣部分。數據並行化式訓練方法須要組合各個工做節點的結果,而且在節點之間同步模型參數。文獻中討論了各類方法,各類方法之間的主要區別在於:async

  1. 參數平均法 vs. 更新式方法
  2. 同步方法 vs. 異步方法
  3. 中心化同步 vs. 分佈式同步

參數平均 model averaging

參數平均是最簡單的一種數據並行化。若採用參數平均法,訓練的過程以下所示:

  1. 基於模型的配置隨機初始化網絡模型參數
  2. 將當前這組參數分發到各個工做節點
  3. 在每一個工做節點,用數據集的一部分數據進行訓練
  4. 將各個工做節點的參數的均值做爲全局參數值
  5. 若還有訓練數據沒有參與訓練,則繼續從第二步開始

上述第二步到第四步的過程以下圖所示。在圖中,W表示神經網絡模型的參數(權重值和偏置值)。下標表示參數的更新版本,須要在各個工做節點加以區分。

這裏寫圖片描述

很容易證實參數平均法的結果在數學意義上等同於用單個機器進行訓練;每一個工做節點處理的數據量是相等的。(實際上若是採用momentum等技術,並非嚴格相等的)

假設該集羣有n個工做節點,每一個節點處理m個樣本,則總共是對nxm個樣本求均值。若是咱們在單臺機器上處理全部nxm個樣本,學習率設置爲α,權重更新的方程爲:
這裏寫圖片描述
如今,假設咱們把樣本分配到n個工做節點,每一個節點在m個樣本上進行學習(節點1處理樣本1,……,m,節點2處理樣本m+1,……,2m,以此類推),則獲得:
這裏寫圖片描述

參數平均法聽上去很是簡單,但事實上並無咱們看上去這麼容易。

首先,咱們應該如何求平均值?最簡單的辦法就是簡單地將每輪迭代以後的參數進行平均。一旦這樣實現了,咱們會發現此方法在計算以外的額外開銷很是巨大;網絡通訊和同步的開銷也許就能抵消額外機器帶來的效率收益。所以,參數平均法一般有一個大於1的平均週期averaging period(就每一個節點的minibatch而言)。若是求均值週期太長,那麼每一個節點獲得的局部參數更多樣化,求均值以後的模型效果很是差。咱們的想法是N個局部最小值的均值並不保證就是局部最小:

這裏寫圖片描述

什麼樣的平均的週期算是太高呢?這個問題尚未結論性的回答,和其它超參數攪和在一塊兒以後變得更爲複雜,好比學習率、minibatch的大小,和工做節點的數量。有些初步的研究結論(好比[16])建議平均的週期爲每10~20個minibatch計算一次(每一個工做節點)可以取得比較好的效果。隨着平均的週期延長,模型的準確率則隨之降低。

另外一類額外的複雜度則是與優化算法相關,好比adagrad,momentum和RMSProp。這些優化方法,在神經網絡的訓練過程當中可以顯著提高收斂的特性。然而,這些updater都有中間狀態(一般每一個模型參數有1或2個狀態值)—— 咱們也須要對這些狀態值求均值嗎?對每一個節點的中間狀態求均值能夠加快收斂的速度,而犧牲的代價則是兩倍(或者多倍)增長網絡的傳輸數據量。有些研究在參數服務器的層面應用相似的「updater」機制,而不只僅在每一個工做節點([17])。

異步隨機梯度降低 Asynchronous SGD

有另外一種與參數平均概念相似的方法,咱們稱之爲‘基於更新’的數據並行化。二者的主要區別在於相對於在工做節點與參數服務器之間傳遞參數,咱們在這裏只傳遞更新信息(即梯度和衝量等等)。參數的更新形式變爲了:
這裏寫圖片描述

這裏寫圖片描述

當參數時同步方式更新時,參數平均法等價於基於更新的數據並行化。這個等價關係對多個平均步驟以及其它updater都成立(不只限於標準SGD)。

當咱們鬆綁同步更新的條件以後,基於更新的數據並行化方法變得更有意思了。也就是說,一旦計算獲得?Wi,j,就當即將其應用於參數向量(而不是等待N ≥ 1 輪迭代),咱們所以獲得了異步隨機梯度降低算法。異步SGD有兩個主要優點:

首先,咱們可以增長分佈式系統的數據吞吐量:工做節點能把更多的時間用於數據計算,而不是等待參數平均步驟的完成
其次,相比於同步更新的方式(每隔N步),各個節點可以更快地從其它節點獲取信息(參數的更新量)。
可是,這些優點也不是沒帶來開銷。隨着引入參數向量的異步更新,咱們帶來了一個新的問題,即梯度值過期問題。梯度值過期問題也很簡單:計算梯度(更新量)須要消耗時間。當某個節點算完了梯度值而且將其與全局參數向量合併時,全局參數可能已經被刷新了屢次。用圖片來解釋這個問題就是以下:

這裏寫圖片描述

異步SGD的簡單實現可能會致使很是嚴重的梯度值過期。舉個例子,Gupta et al. 2015 [18]證實了梯度值的平均過期量等於執行單元的個數。假設有N個執行單元,也就是說梯度值被用於計算全局參數向量時,平均會延遲N個計算步驟。這會在現實場景中帶來問題:嚴重的梯度值過期會明顯減慢網絡模型的收斂速度,甚至徹底中止了收斂。早期的異步SGD實現(例如Google的DistBelief系統)並無考慮到這些問題,所以學習的效率遠不如它本來應有狀態。

異步隨機梯度降低方法還有多種形式的變種,但採起了各類策略來減弱梯度過期所形成的影響,同時保持集羣的高可用率。解決梯度值過期的方法包括如下幾種:

  • 基於梯度值的過期量,對每次更新?Wi,j 分別縮放λ的值
  • 採用‘軟’的同步策略soft synchronization([19])
  • 使用同步策略來限制過期量。例如,[20]提到的系統在必要時會延遲速度較快的節點,以保證最大的過期量控制在某個閾值如下。事實上通常如今採用bounded delay策略更多,見[1],給定一個t參數,要求t輪以前舊的參數更新必須全完成才能開始當前輪次的參數更新。

全部這些方法相比簡單的異步SGD算法都本證實能提高收斂的性能。尤爲是前兩條方法效果更爲顯著。soft synchronization的方法很簡單:相對於當即更新全局參數向量,參數服務器等待收集n個節點產生的s次更新?Wj(1 ≤ s ≤ n)。參數隨之進行更新:

這裏寫圖片描述

這裏寫圖片描述表示縮放因子。

注意,咱們設置s=1而且λ(·) = 常數,就獲得了簡單版的異步SGD算法([2]);一樣的,若設置s = n,咱們獲得了相似(不徹底相同)同步參數平均的算法。


後面會介紹Google DistBelief 框架,並行隨機梯度降低算法Downpour SGD

DistBelief

先來描述Google在2012年發表在NIPS上的一個工做[2],雖然不是分佈式機器學習系統的第一篇,但我相信是在近幾年來影響最爲深遠的一篇,以後包括微軟等公司紛紛研究本身的分佈式系統Adam[12],Parameter Server[1][3][4],petuun[13],或多或少都受其影響。

(未完待續…)

參考資料

[1] Scaling Distributed Machine Learning with the Parameter Server
[2] Large Scale Distributed Deep Networks, DistBelief, 2012
[3] Parameter Server for Distributed Machine Learning
[4] 【深度學習&分佈式】Parameter Server 詳解, http://blog.csdn.net/cyh_24/article/details/50545780
[5] 【深度學習系列4】深度學習及並行化實現概述, http://djt.qq.com/article/view/1245
[6] 最近比較火的parameter server是什麼?https://www.zhihu.com/question/26998075
[7] parameter_server架構, http://blog.csdn.net/stdcoutzyx/article/details/51241868
[8] DistBelief 框架下的並行隨機梯度降低法 - Downpour SGD, http://blog.csdn.net/itplus/article/details/31831661
[9] 谷歌要構建10 億+ 級別的超大數據集,這樣能取代機器學習算法嗎?http://www.sohu.com/a/156598020_323203
[10] 學界 | 超越ImageNet:谷歌內建300M圖像數據集揭露精度與數據的線性增加關係, http://www.sohu.com/a/156495509_465975
[11] 2017 - Revisiting Unreasonable Effectiveness of Data in Deep Learning Era
[12] Adam:大規模分佈式機器學習框架, http://blog.csdn.net/stdcoutzyx/article/details/46676515
[13] 十分鐘瞭解分佈式計算:Petuum, http://www.cnblogs.com/wei-li/p/Petuum.html
[14] 分佈式深度學習(I):分佈式訓練神經網絡模型的概述,http://geek.csdn.net/news/detail/105793
[15] 談談你對」GPU/CPU集羣下作到Data/Model Parallelism的區別」的理解?https://www.zhihu.com/question/31999064?sort=created [16] Hang Su and Haoyu Chen. Experiments on parallel training of deep neural network using model averaging. arXiv preprint arXiv:1507.01239, 2015. [17] Kai Chen and Qiang Huo. Scalable training of deep learning machines by incremental block training with intra-block parallel optimization and blockwise model-update filtering. [18] Suyog Gupta, Wei Zhang, and Josh Milthrope. Model accuracy and runtime tradeoff in distributed deep learning. arXiv preprint arXiv:1509.04210, 2015. [19] Wei Zhang, Suyog Gupta, Xiangru Lian, and Ji Liu. Staleness-aware async-sgd for distributed deep learning. IJCAI, 2016. [20] Qirong Ho, James Cipar, Henggang Cui, Seunghak Lee, Jin Kyu Kim, Phillip B. Gibbons, Garth A Gibson, Greg Ganger, and Eric P Xing. More effective distributed ml via a stale synchronous parallel parameter server [21] HOGWILD!: A Lock-Free Approach to Parallelizing Stochastic Gradient Descent

相關文章
相關標籤/搜索