分佈式深度學習系統one

精讀了2012年的一篇《Large Scale Distributed Deep Networks》中瞭解到。分佈式深度學習主要是對梯度的計算進行分佈。目的爲了處理數據量大,內存或硬盤開銷大的任務或者爲了提高訓練效率,節省時間。目前的研究可分爲模型分佈和數據分佈兩種。數據分佈最常見,數據分佈在副本模型環境上分別訓練部分數據的過程。經常用到的是ps參數服務器,例如有3個worker,實現數據分佈,拿一層來看。Worker1計算完梯度後,傳到ps參數服務器。其他的worker操作方式相同。等待3個worker 的梯度都傳到參數服務器中,對這三個梯度進行求平均得到W。再將W廣播到各個worker進行下次迭代。

該方法的短板:如果是不同的worker配置不一樣,處理能力會不一樣。傳輸到參數服務的時間會不同。那麼平均計算的過程就需要等待。所以就像木桶原理一樣,拉低了效率。從這個架構來看時間耗費主要包括梯度的計算時間+梯度上傳的時間和ps服務器廣播參數的時間+等待時間+計算參數均值時間。

爲了解決這個問題,文章中提出了更新變化參數傳到ps服務器的方法。這塊我是這樣考慮的。參數上傳的速度,與帶寬有關。參數規模越少,傳輸的速度越快。如果是符合在參數服務其中還是採用平均梯度的方式。就跟第一種方法相同。

另外看到了有把參數進行壓縮在上傳的,原理應該是認爲參數矩陣是個稀疏矩陣。進行壓縮後,能縮小參數上傳時間。

異步梯度計算的方式,是初始梯度,根據不斷上傳的梯度變化值進行梯度的更新。主要節省了等待時間和最後梯度進行平均計算的時間。但是出現了過期梯度的問題,這個問題解決的方法設定個閾值。當過期的時間超過這個閾值就進行捨棄。

其中模型分佈,可以看作將每一層或者每幾層看作一個worker(這個是從深度方向來看),也可以從寬度方向看。(將一層中的神經元分爲幾個worker)。(這塊還沒深入瞭解)

個人觀點:分佈式的操作是模擬單機的過程。如果想要進行優化,且保證收斂的主要工作。需要從梯度更新策略、壓縮參數等進行改進。

疑惑點:BP的過程是一個進行誤差求偏導的過程。最大池化是取一個局部感受野中最大的那幾個元素。反向傳播後不一定是池化前元素的位置(卷積也類似)。我看這些分佈式的論文裏的圖大多都是全連接,沒有描述卷積或者池化方面的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章