Petuum是一個機器學習專用分布式計算框架,本文介紹其架構,並基於文章 More Effective Distributed ML via a Stale Synchronous Parallel Parameter Server,NIPS 2013 重點探討其核心內容SSP協議。
主要思想
Parameter server提供了一個易於讀寫Global模型參數的接口,而SSP協議允許distributed workers讀寫本地緩存中stale版本的參數(而不是每次都花大量時間時間等待central storage傳回最新參數)。更進一步,通過限制參數的stale程度,SSP模型提供了機器學習算法的正確性保證。
Stale Synchronous Parallel (SSP)
- 並行機器學習面臨着兩個挑戰:集群本身的Unequal performance machines和網絡通信上的Low bandwidth, High delay問題。集群越大,線性擴展的代價就越大,網絡通信會占據時間開銷的主要部分。
- BSP和Asynchronous協議各有缺點
- SSP協議的好處在於,faster worker會遇到參數版本過於stale的問題,導致每一步迭代都需要網絡通信,從而達到了平衡計算和網絡通信時間開銷的效果。
- Petuum提供了分布式共享global模型參數的接口,使得很容易可以將多線程版本算法修改為Petuum版本。
- SSP放寬一致性約束后,結果可以達到更好。
但還不夠激動人心,因此改進的空間也很大。 - Asynchronous的問題在於,整體對參數的更新量delta_w=delta_w1+delta_w2+...(delta_wi表示單個worker i根據部分數據計算的參數更新量),delta_wi之間應該是不能跨迭代次數的(而SSP則是放寬了這種約束),因此Asynchronous並沒有收斂的保證。而SSP是有收斂的保證的,論文提供了一個bound。
- 對於非凸問題來說,BSP和SSP有可能收斂到的最優解不一樣。對於非凸優化問題(比如說神經網絡),有大量局部最優解,隨機梯度下降(可以跳出局部最優解)比批量梯度下降效果要更好。LDA本身也是非凸優化問題,不過如果采用變分法就會目標函數變成凸優化。
Structure-aware dynamic scheduler (STRADS)
- STRADS負責模型的並行,涉及到參數的partition。
- LDA(主題參數,歸屬主題(混合概率),隱變量)和DL模型(分層參數)的參數具有天然的分塊,可能會好做一些。
Fault tolerance
- Petuum的Fault tolerance功能非常簡單,通過在Parameter Sever上taking snapshots,將參數備份到持久化存儲,而結點的故障恢復是沒有支持的。
雜談
前兩天去ICML看到了Eric Xing真人,他說之所以Petuum用C++而不是Scala等在Github上活躍的語言實現是因為這只是一個原型,GraphX的圖並行太局限了無法處理真正的海量數據,且GraphX的點一致性模式沒有收斂保證而Petuum的SSP是理論保證的。雖說文人相輕,但GraphX的model partition是否會遇到瓶頸,在海量數據中Petuum的正確性和效率是否會擊敗GraphX,還是很值得一看的。
Resource
Petuum: Source Code Read and Initial Test Result
How to Use Spark for ML Algorithms and Why ?
Publications
[1] More Effective Distributed ML via a Stale Synchronous Parallel Parameter Server Qirong Ho, James Cipar, Henggang Cui, Jin Kyu Kim, Seunghak Lee, Phillip. B. Gibbons, Garth A. Gibson, Greg R. Ganger, Eric P. Xing. Neural Information Processing Systems, 2013 (NIPS 2013) Slides