久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

深度學(xué)習(xí)平臺(tái)的分布式實(shí)現(xiàn)綜述

 LZS2851 2016-05-03

前一篇文章中,,我們提到了Eric Xing教授針對(duì)如何構(gòu)建大規(guī)模機(jī)器學(xué)習(xí)平臺(tái)的綜述[1],,包含數(shù)據(jù)并行,模型并行等,,那么具體到深度學(xué)習(xí)來(lái)說(shuō),,應(yīng)當(dāng)如何有效構(gòu)建呢?本文在這方面做個(gè)簡(jiǎn)要概述,。

如果模型能夠在單個(gè)節(jié)點(diǎn)裝下,,那么采用數(shù)據(jù)并行是最適合的,利用DownpourSGD(既DistBelief)結(jié)構(gòu)的參數(shù)服務(wù)器可以很容易實(shí)現(xiàn)分布式深度學(xué)習(xí),,這種方式很適合于大量數(shù)據(jù)和較小模型的訓(xùn)練方式,。

深度學(xué)習(xí)平臺(tái)的分布式實(shí)現(xiàn)綜述

例如項(xiàng)目[2]就是采用這種思路的工作,用Python實(shí)現(xiàn)了簡(jiǎn)單的參數(shù)服務(wù)器結(jié)構(gòu),,從而讓TensorFlow可以運(yùn)行在Spark上:

深度學(xué)習(xí)平臺(tái)的分布式實(shí)現(xiàn)綜述

Spark Worker啟動(dòng)單機(jī)版的Tensorflow異步計(jì)算梯度,,周期性把梯度發(fā)給Driver,就是參數(shù)服務(wù)器,,在匯總多個(gè)Worker的梯度后,,參數(shù)服務(wù)器把梯度數(shù)據(jù)返回給Worker。這種方式的并行實(shí)現(xiàn)簡(jiǎn)單,但Driver(參數(shù)服務(wù)器)很容易引起網(wǎng)絡(luò)通信的開銷進(jìn)而影響到伸縮性,。

Yahoo也在早些時(shí)候開源了讓Caffe運(yùn)行在Spark上的工作:Caffe On Spark[6],,

深度學(xué)習(xí)平臺(tái)的分布式實(shí)現(xiàn)綜述

從結(jié)構(gòu)和代碼上來(lái)看,不僅采用RDMA互聯(lián),,甚至還是基于AllReduce的BSP全同步架構(gòu),,因此這個(gè)項(xiàng)目主要還是解決了Spark跑深度學(xué)習(xí)的有無(wú)問(wèn)題,不認(rèn)為有很大的參考價(jià)值,。

另外兩個(gè)知名的深度學(xué)習(xí)框架Torch和MXNet,,也同樣支持分布式訓(xùn)練。例如Twitter在Torch框架上提供了AutoGrad[8],,同時(shí)提供AllReduceSGD和AllReduceEA接口,,其中后者是異步實(shí)現(xiàn),提供了一個(gè)區(qū)別于DownpourSGD的異步SGD實(shí)現(xiàn)EASGD(Elastic Average SGD),,該算法是Yan LeCun團(tuán)隊(duì)的成果,,仍然架構(gòu)在參數(shù)服務(wù)器基礎(chǔ)之上,跟DownpourSGD相比,,EASGD把Worker節(jié)點(diǎn)上的參數(shù)跟參數(shù)服務(wù)器的中心變量聯(lián)系在一起,,這樣使得Worker本地的變量會(huì)圍繞中心變量進(jìn)行變化,從理論上可以證明比DownpourSGD有更快的收斂和更小的數(shù)據(jù)傳輸,,證明可以參見(jiàn)文獻(xiàn)[9],也就是說(shuō),,通過(guò)更快收斂來(lái)達(dá)到節(jié)省帶寬傳輸?shù)哪康摹?/p>

同Torch一樣,,MXNet也只提供數(shù)據(jù)并行的訓(xùn)練方式。MXNet依賴于PS-Lite提供分布式模型訓(xùn)練,,因此我們可以直接看PS-Lite,,正如本號(hào)在之前介紹過(guò)的,這是李沐和DMLC團(tuán)隊(duì)實(shí)現(xiàn)的參數(shù)服務(wù)器架構(gòu),,相比之前的DistBelief提供了更加通用的架構(gòu):在設(shè)計(jì)上包含一個(gè)Server Group和若干個(gè)Worker Group,,Server Group用來(lái)做參數(shù)服務(wù)器,每個(gè)Server Node存放一個(gè)參數(shù)分片,,由Server Manager管理整個(gè)Server Group,,維持整個(gè)Server Group的元數(shù)據(jù)的一致性視圖,以及參數(shù)分片情況,。 每個(gè)Worker Group運(yùn)行一個(gè)應(yīng)用,,Worker Node只跟Server Node通信用來(lái)更新參數(shù),Worker Node之間沒(méi)有任何交互,。每個(gè)Worker Group內(nèi)有一個(gè)調(diào)度器,,負(fù)責(zé)給Worker Nodes分配任務(wù)以及監(jiān)控,如果有Worker Node掛掉或者新加入,調(diào)度器負(fù)責(zé)重新調(diào)度剩余的任務(wù),。PS-Lite針對(duì)網(wǎng)絡(luò)帶寬的優(yōu)化主要是針對(duì)Server之間的參數(shù)復(fù)制提供了采用先聚合再?gòu)?fù)制的方式:

深度學(xué)習(xí)平臺(tái)的分布式實(shí)現(xiàn)綜述

Server之間復(fù)制主要是為容錯(cuò)考慮,,因此Worker和Server之間的數(shù)據(jù)傳輸仍依賴參數(shù)服務(wù)器本身異步機(jī)制帶來(lái)的帶寬節(jié)省:在應(yīng)用于深度學(xué)習(xí)時(shí),,主要借助于稱作Delayed Block Proximal Gradient的方法:每次迭代只更新一個(gè)block的參數(shù),;Worker節(jié)點(diǎn)計(jì)算梯度的同時(shí)還需要計(jì)算特定坐標(biāo)的學(xué)習(xí)速率,既該block的二階偏導(dǎo)數(shù)的對(duì)角線,。在數(shù)據(jù)傳輸時(shí),,PS-Lite還會(huì)引入部分定義的Filter來(lái)避免傳輸對(duì)模型影響不大的參數(shù),例如Random Skip或者KKT Filter,,引入這些Filter可以讓傳輸?shù)哪P蛥?shù)量減少十倍以上,。關(guān)于Delayed Block Proximal Gradient的收斂證明,可以參見(jiàn)李沐的文章[10],。

Apache旗下的SINGA[7]從一開始設(shè)計(jì)就考慮了分布式架構(gòu),。系統(tǒng)包含若干Server Group和Worker Group。每個(gè)Server Group維護(hù)完整的模型參數(shù),,相鄰的Server Group定期同步模型參數(shù),。每個(gè)Worker Group負(fù)責(zé)計(jì)算,在數(shù)據(jù)并行中,,每個(gè)Worker Group負(fù)責(zé)一個(gè)訓(xùn)練數(shù)據(jù)的分片,,所有的Worker Group節(jié)點(diǎn)跟Server Group之間異步通信,然而在Worker Group內(nèi)部,,則是同步處理,,因此這是一個(gè)典型的參數(shù)服務(wù)器結(jié)構(gòu)。SINGA值得稱道之處在于同時(shí)支持?jǐn)?shù)據(jù)并行和模型并行,,以及混合并行(兩種并行的組合),,在模型并行時(shí),每個(gè)Worker Group只負(fù)責(zé)更新部分模型參數(shù),。

深度學(xué)習(xí)平臺(tái)的分布式實(shí)現(xiàn)綜述

SINGA的架構(gòu)非常靈活,,可以根據(jù)需要滿足不同模式的分布式計(jì)算,除了類似DownpourSGD的結(jié)構(gòu)之外,,還可以配置成AllReduce,,Sandblaster,Distributed Hogwild等不同范式,。

深度學(xué)習(xí)平臺(tái)的分布式實(shí)現(xiàn)綜述

在采用SINGA訓(xùn)練深度學(xué)習(xí)模型時(shí),,需要根據(jù)模型特點(diǎn)決定如何采用數(shù)據(jù)并行和模型并行,從而減少網(wǎng)絡(luò)帶寬造成的瓶頸,,例如選取具有低維特征的神經(jīng)網(wǎng)絡(luò)層作為Worker Group的邊界,,減少Worker之間的數(shù)據(jù)傳輸,;選取神經(jīng)網(wǎng)絡(luò)層之間依賴小的部分應(yīng)用模型并行等。憑借多樣化的并行機(jī)制,,SINGA盡管并不那么知名,,但入圍Apache項(xiàng)目還是有其值得稱道之處的。

TensorFlow官方近期也放出了分布式版本[3],。TensorFlow沒(méi)有采用Google第一代大規(guī)模深度學(xué)習(xí)系統(tǒng)的DistBelief,,而是把任務(wù)組織成圖結(jié)構(gòu),然后分解成子圖分布到不同節(jié)點(diǎn)執(zhí)行,。

深度學(xué)習(xí)平臺(tái)的分布式實(shí)現(xiàn)綜述

從上圖可以看到,,在數(shù)據(jù)并行時(shí),結(jié)構(gòu)上仍然采用參數(shù)服務(wù)器,,因此,,Tensorflow在設(shè)計(jì)初主要考慮易用性,基于DistBelief提供對(duì)算法更好的抽象能力,。目前尚沒(méi)有看到TensorFlow在減少數(shù)據(jù)傳輸消耗方面做的工作,。盡管TensorFlow在2015年發(fā)布的白皮書上聲稱同時(shí)提供數(shù)據(jù)并行和模型并行,但在當(dāng)前的代碼倉(cāng)庫(kù)里只看到前者(如有錯(cuò)誤請(qǐng)指出),。

接下來(lái)一個(gè)不能不提的工作是微軟的CNTK,。CNTK只提供數(shù)據(jù)并行,它采用參數(shù)服務(wù)器模型實(shí)現(xiàn)了一種稱為1-Bit Quantized SGD的算法,,其目的就是用于節(jié)約帶寬,,算法的細(xì)節(jié)可以參見(jiàn)文獻(xiàn)[11],其主要思想是壓縮梯度的表示到只用1bit,,把殘差帶到下一次的minibatch中,。相比用浮點(diǎn)數(shù)(32位)表示梯度值,1-Bit SGD相當(dāng)于節(jié)約了30多倍的傳輸帶寬,。

上面簡(jiǎn)要介紹了幾個(gè)分布式深度學(xué)習(xí)框架的設(shè)計(jì),其中重要一點(diǎn)都著力于網(wǎng)絡(luò)傳輸?shù)墓?jié)省,。下面介紹一個(gè)進(jìn)一步優(yōu)化這方面的工作,,并且聲稱能夠在普通以太網(wǎng)結(jié)構(gòu)上運(yùn)行的分布式深度學(xué)習(xí)系統(tǒng)。

首先看下以太網(wǎng)卡和Infiniband的吞吐量差別:

深度學(xué)習(xí)平臺(tái)的分布式實(shí)現(xiàn)綜述

典型深度學(xué)習(xí)任務(wù)的數(shù)據(jù)量

深度學(xué)習(xí)平臺(tái)的分布式實(shí)現(xiàn)綜述

以AlexNet為例,,假設(shè)有8個(gè)節(jié)點(diǎn),,每個(gè)節(jié)點(diǎn)都安裝1個(gè)GPU,那么Master每秒需要接收490M的浮點(diǎn)參數(shù),,同時(shí)也要發(fā)送這么多參數(shù)來(lái)確保Worker的下一輪迭代不至于被阻塞,。參照前表,這些數(shù)字都超過(guò)了常規(guī)千兆甚至萬(wàn)兆以太網(wǎng)的帶寬,,naive的實(shí)現(xiàn),,是必須借助昂貴的Infiniband設(shè)備的,。

因此,像TensorSpark這樣簡(jiǎn)單實(shí)現(xiàn)參數(shù)服務(wù)器用于分布式深度學(xué)習(xí)訓(xùn)練的解決方案,,是沒(méi)有辦法在常規(guī)網(wǎng)絡(luò)硬件,,特別是云計(jì)算提供商上跑大規(guī)模集群的。如何限制網(wǎng)絡(luò)帶寬,,成為分布式深度學(xué)習(xí)設(shè)計(jì)中一個(gè)重要的考慮因素,。在前一篇的公眾號(hào)文章里我們提到了Eric Xing教授的Petuum項(xiàng)目,那么它應(yīng)用在深度學(xué)習(xí)上是如何的呢,?這里有一個(gè)Petuum和單機(jī)版深度學(xué)習(xí)Caffe的項(xiàng)目Poseidon[4],,我們來(lái)看看這方面的設(shè)計(jì)。

深度學(xué)習(xí)平臺(tái)的分布式實(shí)現(xiàn)綜述

圖中的Server就相當(dāng)于DownpourSGD的Master,,Clients則相當(dāng)于Worker,。跟DownpourSGD這樣的基本參數(shù)服務(wù)器構(gòu)型不同,Poseidon有所差別:首先,,在每個(gè)Worker節(jié)點(diǎn)上增加了額外的一層,,允許單節(jié)點(diǎn)運(yùn)行多個(gè)線程任務(wù),這主要是針對(duì)多CPU和多GPU的設(shè)計(jì),,方便任務(wù)線程綁定到1個(gè)CPU或者1個(gè)GPU,。其次,Poseidon不僅允許Master和Worker之間的參數(shù)更新,,還允許不同的Worker之間通信,。為了減少網(wǎng)絡(luò)開銷,Poseidon做了如下工作:

引入Wait-free BP算法,。BP算法是神經(jīng)網(wǎng)絡(luò)里最基本的算法,,在后向傳播過(guò)程中,錯(cuò)誤消息E從神經(jīng)網(wǎng)絡(luò)的頂層一直傳播到底層,。每次迭代,,每個(gè)Worker分別進(jìn)行BP算法,只有當(dāng)傳播到達(dá)底層時(shí),,每個(gè)Worker才開始通信—把本地的參數(shù)更新發(fā)送到Master然后等待Master聚合各節(jié)點(diǎn)梯度后返回,。以圖來(lái)表示如下,其中push和pull就是跟參數(shù)服務(wù)器Master之間的交互,。

深度學(xué)習(xí)平臺(tái)的分布式實(shí)現(xiàn)綜述

Wait-free BP算法主要用來(lái)減少等待和參數(shù)同步的時(shí)間,。當(dāng)?shù)趇+1層完成計(jì)算,把它的錯(cuò)誤消息E_i+1傳播到前一層i時(shí),,它的梯度已經(jīng)能夠發(fā)送,,參數(shù)也可以更新。因?yàn)槊繉佣加歇?dú)立的參數(shù),,后續(xù)較低層(1,...,i)的計(jì)算并不影響較高層(i+1,...,L),,因此,,較高層的參數(shù)更新也不會(huì)影響較低層。

深度學(xué)習(xí)平臺(tái)的分布式實(shí)現(xiàn)綜述

Wait-free BP算法強(qiáng)制每層在它的梯度計(jì)算出來(lái)之后就開始通信,,并且允許每層的參數(shù)部分更新,,在理想情況下,當(dāng)傳播到達(dá)網(wǎng)絡(luò)頂層時(shí),,通信和激素啊都已經(jīng)完成,,Worker可以開始下一輪迭代。以卷積神經(jīng)網(wǎng)絡(luò)為例子,,底層的CONV(堆棧卷積層)是主要計(jì)算產(chǎn)生的地方,,但參數(shù)只占據(jù)模型的10%,頂層的FC(全連接層)模型參數(shù)占據(jù)90%,。采用Wait-free BP算法,,把FC層的通信和CONV的計(jì)算一起來(lái)運(yùn)行,極大減少了模型同步的時(shí)間,。

引入SACP(Structured-Aware Communication Protocol)協(xié)議,。這個(gè)協(xié)議一看名字就是專門針對(duì)帶寬消耗設(shè)計(jì)的。該協(xié)議是專門針對(duì)矩陣型參數(shù)的機(jī)器學(xué)習(xí)模型來(lái)設(shè)計(jì)的——深度學(xué)習(xí)的參數(shù)就是典型的矩陣結(jié)構(gòu),。以AlexNet為例,,兩個(gè)FC全連接層fc6和fc7之間的參數(shù)權(quán)重就是個(gè)4096*4096的矩陣。每次迭代時(shí),,都需要在Master和Worker之間交換這樣2個(gè)矩陣,。隨著模型和集群的增大,交換的參數(shù)矩陣會(huì)更加龐大,。

為減少帶寬消耗,,首先,Poseidon引入Worker之間的通信,,稱為SFB(Sufficient Factor Broadcasting),。在Worker和Master之間傳遞的矩陣參數(shù)?W,可以通過(guò)矩陣分解寫為?W =uv',,u,,v'就是所謂Sufficient Factor,而u,,v'可以通過(guò)直接從Worker節(jié)點(diǎn)之間的通信中獲得,通過(guò)把矩陣轉(zhuǎn)化為向量,,減少了通信開銷,。隨著集群節(jié)點(diǎn)的增多,這種手段也會(huì)帶來(lái)副作用,,因?yàn)镻2P通信的成本會(huì)上升,。

基于此Poseidon提出了SACP協(xié)議本身,,這是一個(gè)混合Master/Worker之間通信和SFB的方案,它會(huì)動(dòng)態(tài)決定是選取前者還是后者來(lái)進(jìn)行參數(shù)交換,,因此,,在前邊的Poseidon框圖里我們看到了Bandwidth Manager,就是起這個(gè)作用,。

因此,,從設(shè)計(jì)上,我們可以看到基于Petuum的Poseidon為網(wǎng)絡(luò)帶寬消耗做了大量?jī)?yōu)化,。在隨后Eric Xing團(tuán)隊(duì)的進(jìn)一步的工作中又提出了專門針對(duì)GPU集群的參數(shù)服務(wù)器,,其目的主要在于讓參數(shù)服務(wù)器更有效利用GPU內(nèi)存,由于工作還未開源,,因此不多提及,,有興趣者可直接閱讀文獻(xiàn)[5]。

可以看到,,優(yōu)化分布式的深度學(xué)習(xí),,可以從算法和結(jié)構(gòu)兩個(gè)角度來(lái)進(jìn)行,前者通過(guò)加快收斂速度從而降低分布式開銷,,后者則從根本上去解決分布式深度學(xué)習(xí)面臨的挑戰(zhàn),。就目前看來(lái),SINGA和Petuum都是在結(jié)構(gòu)設(shè)計(jì)上值得深入研究的系統(tǒng),,而在未來(lái),,隨著TensorFlow的快速演進(jìn),各種結(jié)構(gòu)乃至算法的引入也是非??赡艿氖虑?,分布式深度學(xué)習(xí)系統(tǒng),仍然在快速演進(jìn)之中,。

[1] Strategies and Principles of Distributed Machine Learning on Big Data, Eric P. Xing, Qirong Ho, Pengtao Xie, Wei Dai.arXiv:1512.09295 (2015)

[2] https://github.com/adatao/tensorspark

[3] https://github.com/tensorflow/tensorflow/tree/master/tensorflow/core/distributed_runtime

[4] Poseidon: A System Architecture for Efficient GPU-based Deep Learning on Multiple Machines, Zhang, Hao and Hu, Zhiting and Wei, Jinliang and Xie, Pengtao and Kim, Gunhee and Ho, Qirong and Xing, Eric, arXiv preprint arXiv:1512.06216

[5] GeePS: Scalable deep learning on distributed GPUs with a GPU-specialized parameter server, Cui, Henggang and Zhang, Hao and Ganger, Gregory R and Gibbons, Phillip B and Xing, Eric P, Proceedings of the Eleventh European Conference on Computer Systems, 2016

[6] https://github.com/yahoo/CaffeOnSpark

[7] Deep Learning At Scale and At Ease, Wang, Wei and Chen, Gang and Chen, Haibo and Dinh, Tien Tuan Anh and Gao, Jinyang and Ooi, Beng Chin and Tan, Kian-Lee and Wang, Sheng, arXiv preprint arXiv:1603.07846

[8] https://blog.twitter.com/2016/distributed-learning-in-torch

[9] Deep learning with Elastic Averaging SGD, Sixin Zhang, Anna Choromanska, Yann LeCun, arXiv preprint arXiv:1412.06651

[10] Communication Efficient Distributed Machine Learning with the Parameter Server, Li, Mu and Andersen, David G and Smola, Alex J and Yu, Kai, NIPS 2014

[11] 1-bit stochastic gradient descent and its application to data-parallel distributed training of speech DNNs, Seide, Frank and Fu, Hao and Droppo, Jasha and Li, Gang and Yu, Dong, INTERSPEECH 2014

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多