Angel 實現FFM 一、對於Angel 和分布式機器學習的簡單了解


Angel是騰訊開源的一個分布式機器學習框架。是一個PS模式的分布式機器學習框架。

https://github.com/Angel-ML/angel   這是github地址。

我了解的分布式機器學習概述:

      對於分布式機器學習,有些簡單的了解,聽過一些概念。最近正在看《分布式機器學習 算法、理論與實踐》這本書,我覺得這本書很不錯。一下內容也是我的一個讀書總結。

       分布式機器學習分為 數據和模型划分模塊,單機優化模塊,通信模塊,數據和模型的聚合模塊。

      分布式機器學習從並行方式來說分為數據並行和模型並行。數據並行是指訓練數據規模太大,無法存儲在一個節點上,需要把這些數據分配到各個機器上。

數據划分的方式分為對訓練樣本進行划分和對每個樣本的特征維度進行划分。

      對訓練樣本進行划分也分為隨機采樣法和基於置亂切分的方法。隨機采樣法是通過有放回抽樣,根據每個節點的容量為期分配相應的樣本數。這種方式可以保證每個節點的局部數據和整體數據是獨立同分布的。但是這么做也有弊端就是如果數據量大,代價比較高。另一個是某些低頻的樣本可能會在抽樣的過程中被遺漏。

     另一種是根據基於置亂切分的方法,也就是將樣本亂序排列,然后根據每個節點機器的容量,為其分配相應數量的樣本。這個方法實現簡單,效率相對較高。每個節點在訓練的時候僅適用本地數據。在訓練一定輪數之后也可以再重新合並數據,重新划分一次。這種方式無限等價於無放回抽樣,但是獨立同分布的假設是等價於有放回抽樣。但是這種方式應該是實際使用比較多的方式。

      模型並行,主要是指模型如何在分布式環境下進行並行,是一個節點上包含整個模型還是每個節點只包含一部分模型。主要是線性模型的並行和神經網絡的並行。在Angel1.5的LR和FM中模型是保存在參數服務器,每次節點從參數服務器獲取所需的一部分參數,在需要更新參數時候將更新的部分推送到參數服務器。深度模型的話一般可以按網絡的層次進行划分。

     對於分布式機器學習的學習算法,我理解有兩種情況。一種是每個節點使用本地的單機機器學習優化算法,然后將各個節點訓練的模型進行融合。這種在Angel1.4實現FM LR是這種方式。這種模型融合的方式對於線性模型來說,如果損失函數關於參數是凸函數時,各個部分的模型之間直接加和求平均是比單個模型要好,並且有收斂的理論保證。但是對於神經網絡這種就不成立了。另一種是使用分布式機器學習算法,根據各個節點計算的梯度來更新權重。這種我能想到比較直觀的就是PS模式,由參數服務器來接受梯度更新模型的參數。

      通信部分的話,通信部分按拓撲結構划分,可以分為1、基於迭代Map/Reduce的通信拓撲,比如SparkMLib。優點是可以利用現有的分布式系統,簡單高效的完成分布式學習任務。但是運算節點和模型存儲節點沒有很好的隔離,只能支持同步的通信方式,也就是所有mapper完成之后才開始進入reduce階段。

        2、基於參數服務器的通信拓撲。這種是把工作節點和模型節點分開。工作節點負責處理本地的訓練樣本,從參數服務器獲取最新的參數,或者將參數更新發送到參數服務器。這種的好處是各個工作節點之間不需要保持同步了,工作節點與服務器之間的通信方式更加靈活。多個參數服務器可以分開存儲一個較大的模型,每個參數服務器存儲模型的一部分。

       3、基於數據流的通信拓撲,這種的代表是tensorflow。這種我理解是把模型抽象成一個計算圖模型,用一個有向無環圖來表示。圖中的每個節點表示一個數據處理的算子,邊表示數據流動的方向。

 

      

 


免責聲明!

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



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