分布式機器學習


https://zhuanlan.zhihu.com/p/391187949

分布式機器學習也稱為分布式學習 ,是指利用多個計算節點(也稱為工作者,Worker)進行機器學習或者深度學習的算法和系統,旨在提高性能、保護隱私,並可擴展至更大規模的訓練數據和更大的模型。如圖所示,一個由三個工作者(即計算節點)和一個參數服務器組成的分布式機器學習系統,訓練數據被分為不相交的數據分片(Shard)並被發送給各個工作者,工作者將在本地執行隨機梯度下降(Stochastic Gradient Descent,SGD)。工作者將梯度 [公式] 或者模型參數 [公式] 發送至參數服務器。參數服務器對收到的梯度或者模型參數進行聚合(例如,計算加權平均),從而得到全局梯度∇W或全局模型參數W。同步或者異步的分布式SGD算法都適用於分布式機器學習。

 

 

分布式學習平台

  • Apache Spark MLlib

Apache Spark’s scalable ML library. MLlib offers distributed implementations of the conventional ML algorithms (as compared to deep learning), such as classification, regression, and clustering, etc. [spark.apache.org/mllib/]

  • DeepSpark

Offers implementation of distributed training framework for deep learning (DL). It supports open-source deep learning frameworks, e.g., TensorFlow, PyTorch. [deepspark.snu.ac.kr/]

  • Microsoft Distributed ML Toolkit (DMTK)

Open-source distributed machine learning library. It supports both machine learning and deep learning. [dmtk.io/]

  • MxNet

Open-source deep learning framework, supports well for distributed deep learning. [mxnet.apache.org/]

  • TensorFlow

Open-source deep learning framework, supports well for distributed deep learning [tensorflow.google.cn/]

  • PyTorch

Open-source deep learning framework, supports well for distributed deep learning [pytorch.org/]

  • Uber Horovod

Open-source distributed deep learning framework, supports deep learning frameworks, e.g., MxNet, TensorFlow, PyTorch [eng.uber.com/horovod/]

分布式學習方法

數據並行

將訓練數據划分為多個子集(也稱為分片或者切片),然后將各子集置於多個計算實體中,之后並行地訓練同一個模型。

主要有兩種基於數據並行的分布式訓練方法,即同步訓練和異步訓練。在同步訓練中,所有的計算節點在訓練數據的不同分片上同步地訓練同一個模型的副本,在各計算節點每執行完一個模型更新步驟后,每個計算節點產生的梯度(或者模型參數)就會被發送給服務器,服務器在收到所有計算節點的結果后再進行聚合操作。而在異步訓練中,所有計算節點獨立地使用其本地的訓練數據集來訓練同一個模型的副本,並將本地獲得的模型梯度及時地推送給服務器,以便服務器更新全局模型。同步訓練一般由AllReduce架構支持,異步訓練則通常由參數服務器架構實現。

 

 

數據並行能用於解決訓練數據過大以至於不能存於單一計算節點中的問題,或者用於滿足使用並行計算節點實現更快速的計算的要求。

模型並行

模型並行指的是一個模型(如DNN模型)被分割為若干部分(如DNN中的一些層在一個部分,另一些層在其他部分),然后將它們置於不同的計算節點中。盡管將各個部分置於不同計算設備中確實能夠改善執行時間(例如,使用數據的異步處理),但模型並行的主要目的是避免內存容量限制。

DNN模型的一個層可以被放入單一設備的內存中,且前向和后向傳播意味着一台計算設備的輸出以串行方式傳輸至另一台計算設備。只有當模型不能放入單一設備中,且不需要將訓練過程加速很多時,才會采用模型並行方法。

谷歌發布了Downpour SGD框架,提供了SGD的異步和分布式實現方法。Downpour SGD結合了數據並行和模型並行,將訓練樣本分置於不同的機器中,且每台機器都有整個或者部分DNN模型的單一副本。

梯度下降方法

包括朴素聯邦學習(Naive Federated Learning或者Vanilla Federated Learning)、代數方法、稀疏梯度更新方法、模糊處理方法和密碼學方法(如同態加密和安全多方計算)。模糊處理方法基於隨機化、泛化或抑制機制(如梯度分層化、差分隱私、k-匿名方法)。在朴素聯邦學習、代數方法和稀疏梯度更新方法中,每一方發送給協調方明文形式的梯度信息以更新模型,而這只能保護數據的原始形式,即低隱私保護等級和非常高的效率。稀疏梯度更新方法還能通過更新梯度中的一個實體子集,用精度來換取效率和隱私。基於隨機化機制的方法,如差分隱私和高斯隨機映射(Gaussian Random Projection,GRP),通過給數據或梯度加入噪聲的方式,用精度換取隱私。

朴素聯邦學習

聯邦平均方法是為了使朴素聯邦學習能在水平划分數據集上使用而提出的一種方法。在聯邦平均方法中,每一方給一個協調方(或是受信任的處理方,或是一個參數服務器)獨立地上傳明文形式的梯度或模型參數。最后,協調方將明文形式的更新模型發送給每一方[13]。

當數據集是縱向划分的時,模型在各方間分配。在梯度下降方法里,目標函數能被分解為一個可微函數和一個線性可分函數。為了進行梯度下降,每一方將自己的數據用於各自的局部模型,從而獲得中間結果,並將其正常發送給協調方。協調方將所有中間結果積累起來,並評估可微函數以計算損失和梯度。最后,協調方更新整個模型,並將更新后的局部模型發送給每個相關方。

隱私保護方法

代數方法

代數方法旨在利用傳輸數據的代數特性保護原始訓練數據。

稀疏梯度更新方法

稀疏梯度更新方法通過只更新梯度的子集的方式來保護隱私。這類方法用精度來換取效率,並且保護隱私程度較低。

模糊處理方法

模糊處理方法通過隨機化、泛化和壓縮來使得數據模糊,雖然可以改善隱私性,但會降低准確度。在聯邦學習中,本地差分隱私(Local Differential Privacy,LDP)也可以用於給每一方的梯度加上噪聲。

密碼學方法

上述方法將每一方的明文梯度信息都暴露給了協調方或其他方。與此相反,密碼學方法利用了同態加密和安全多方計算,在梯度下降過程中,保護每一方的梯度信息隱私。安全模型有很多種類型,從針對誠實的但好奇的對抗方的模型,到針對惡意敵對方的模型,對於墮落變壞的假設也有很大不同。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM