Paracel:豆瓣開發的大型分布式計算框架,用于機器學習、圖算法

yne7 9年前發布 | 17K 次閱讀 Paracel 分布式/云計算/大數據
  1. Paracel的是什么?
    Paracel是豆瓣開發的一個分布式計算框架,它基于參數服務器范式,最初是為機器學習算法設計的。 Paracel支持數據和模型的并行,為用戶提供簡單易用的通信接口,比mapreduce式的系統要更加靈活。Paracel同時支持異步的訓練模式, 使迭代問題收斂地更快。此外,Paracel程序的結構與串行程序十分相似,用戶可以更加專注于算法本身,不需將精力過多放在分布式邏輯上。

  2. 參數服務器是什么?
    參 數服務器是一個全局分布式的key-value存儲,用來存儲算法的模型或者說參數。當計算節點需要某個參數的時候,可以從參數服務器上讀取。用戶還可以 定義不同的函數在參數服務器端對參數進行更新、過濾等操作。在大部分情況下,計算節點之間的通信都是通過參數服務器進行的。

  3. 什么是模型并行?數據并行和模型并行如何同時滿足?
    模 型并行指的是將算法的模型參數分布式存儲。隨著算法數據量的增加和算法模型的越來越復雜,許多模型已經不能裝入單機的內存中了,因此需要將模型并行,從而 滿足可擴展性的要求。數據和模型的同時并行是一個很大的挑戰,數據的并行往往意味著計算性能的可擴展,而模型的并行往往意味著內存使用的可擴展,一個好的 分布式算法需要滿足這兩方面的擴展性要求。在一般情況下,模型和數據是對應的,因此如何切分輸入數據的結構決定了模型的切分方式。Paracel定義了一 套輸入數據格式,提供了將數據切分成有向圖、二分圖、無向圖、稀疏矩陣和綢密矩陣的接口,用戶可以按照算法需要,直接將輸入數據并行讀取成這些數據結構, 做到模型的并行。

  4. 做Paracel項目的初衷是什么?
    豆瓣有Dpark工具來處理海量數據,然而對于性能要求較高和較復雜的問題,Dpark無法很好地滿足需求。為了提高分布式算法的開發效率,增強代碼的復用能力,我們在2013年底開始做Paracel項目,意為提供一個較通用易用的算法平臺。

  5. Paracel和Spark/GraphLab的主要區別是什么?
    Spark 和GraphLab都是非常成功的分布式計算框架,它們各自有著很多吸引用戶的優點,但也存在一些局限性。Spark提出了RDD的概念并賦予其一系列的 transformation和action接口,若把這些接口想成是一組基,那么用戶就可以用這組基組合成不同的算法或應用。值得注意的是,這組基雖然 通用,但往往不夠靈活,特別是對特定領域的問題。例如圖算法,Spark基于Google的Pregel模型實現了Bagel模塊供用戶使用,而非基本的 RDD操作可以滿足。另外,Spark的RDD操作更適合窄依賴的場景,數據的局部性考慮不夠,多少會影響性能。
    GraphLab論證了機器學習 問題都可以轉化成圖計算的方式,相比Spark更側重于計算性能。不過用戶需要首先將問題轉化成GraphLab的模型,這會影響開發效率。同時對于一般 的算法工程師,GraphLab門檻有點過高,用戶必須先理解其原理和分布式邏輯才能進行開發。
    相比之下,Paracel較GraphLab更上層,強調簡單易用性,而較Spark更底層,提供了靈活通用的通信接口。算法開發者可以更加專注于問題本身而不必過于關注分布式邏輯。
    當然,Paracel還很不成熟,功能和社區都不完善,還有許多要向Spark和GraphLab學習的地方。

  6. 如何安裝Paracel?
    先安裝Paracel的一些依賴,然后在集群上部署Paracel。詳細的步驟請參見文檔的對應章節

  7. 如何在Paracel框架中進行分布式算法開發?
    用戶可以模仿Paracel項目里alg目錄下的例子來開發自己的應用,詳細的介紹請參見Paracel入門教程的對應部分

  8. 什么是straggler問題?Paracel是如何解決的?
    由 于一些軟件和硬件的原因,節點的計算能力往往不盡相同。對于迭代問題來說,每輪迭代結束時算地快的節點都要等待算地慢的節點算完,再進行下一輪迭代,這種 等待在節點數目增多的時候變地尤為明顯。這是BSP模型的一個經典問題,一般有兩種思路來解決這個問題:第一種辦法是在切分數據時預留一些數據,再對剩下 的數據做均分。在每輪迭代結束時,算地快的節點會繼續計算這些預留的數據以等待算地慢的節點完成本輪計算。簡單來說,就是讓算地較快的節點算更多的數據, 即做某種特定的負載不均衡。這時,開發者需要寫許多與算法邏輯無關的調度代碼來實現這種策略。Paracel則采用了一種更通用的方式,我們放寬了“每個 迭代步都等待”的約束條件:當在一輪迭代結束時,算地快的節點可以繼續下一輪迭代,但不能比最慢的節點領先參數s個迭代步。當領先超過s個迭代步 時,Paracel會強制它進行等待。這樣的異步控制方式一方面從整體上省去了等待時間,另一方面也能間接地幫助算地慢的節點趕上。從優化問題的角度,雖 然每個迭代步收斂地慢了,然而每個迭代步的時間開銷變少了,總體上收斂也就變快了。

  9. Paracel是只適合機器學習算法的訓練框架嗎?
    Paracel最初確實是針對機器學習問題做的抽象。但隨著項目的推進,我們逐漸發現Paracel的范式同樣適用于圖算法和科學計算問題。舉例來說,我們在Paracel的toolkits中有兩個圖算法的例子:Max Vertex Value和Pagerank,前者的實現我們采用了Pregel(Google對BSP的圖抽象)的方式而后者我們采用了Paracel的范式。事實上,用Paracel的范式實現圖算法更加直接和高效。

  10. Paracel目前有哪些局限性?未來發展是怎樣的,下個版本會加入哪些功能?
    目 前這個版本的Paracel沒有做容錯,因此穩定性欠佳,這將作為我們在下一個版本的主要解決的問題。另外,Paracel目前只支持文本文件,我們也將 盡快加入對壓縮格式以及其他文件的支持。Paracel streaming和像Spark那樣的data flow接口也是我們正在努力開發的模塊。

    來自:http://frodo.douban.com/card/note/491307203/?from=timeline
 本文由用戶 yne7 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!