MLBase:Spark生態圈裏的分布式機器學習係統
MLBase背景
MLBase是Spark生態圈裏的一部分,專門負責機器學習這塊(除它之外,還有負責圖計算的GraphX、SQL ad-hoc查詢的Shark、具備容錯性查詢能力的BlinkDB等)。看了MLBase的論文後,我是迫不及待想要分享一下這個ML係統。雖然對具體ML算法了解不多,但是對比類似的係統,比如Weka,Mahout而言,我感到MLBase的構想有更進一步的創新和獨到之處。而且更重要的是,Spark上支持python算法包這件事情,我現在考慮的是:能打通策略組同學寫的算法程序能依賴各節點上已經分配好的或自動依賴的函數庫,而MLBase非常值得關注,他的實現本身其實很符合我們想要做的事,下麵會具體說。
之前在youtube上,AMP實驗室對MLBase有個介紹,並且說會在今年夏天release MLlib和MLI兩個部分,在冬天發布ML Optimizer,從MLlib,MLI到ML Optimizer,是針對不同程度的算法科學家使用的不同抽象程度的接口。且MLlib會在Spark0.8版本裏自帶,現在我使用的Spark是0.7.2版本的。更多這三者的介紹請參考他的官網,裏麵一共也就這麼點介紹。其實我蠻擔心一個問題,就是Spark0.8發布後,開發機上不具備聯網編譯能力,到時候是不是又要想個辦法在別的地方先編譯一下Spark再拷進去,太囧了。
MLbase處理數據
MLbase想要讓機器學習的門檻更低,讓一些可能並不了解ML的用戶也能使用MLbase這個工具來處理自己的數據,這份數據可以小,也可以是大數據。那MLBase怎麼做到這件事呢?一方麵,MLbase提供了一套類Pig的語言,他是聲明式的。這件事其實是我們想做的,因為我在之前一篇文章中說,想要在Spark之上加一層DSL,MLBase的做法看上去恰恰很符合這點。比如說,我們要做分類,我們隻需要寫這麼幾行scala代碼:
var X = load("some_data", 2 to 10) var y = load("some_data", 1) var (fn-model, summary) = doClassify(X, y)大致意思是,X是需要分類的數據集,y是從這個數據集裏取的一個分類標簽,第三步就是doClassify()這件事。這樣的處理有兩個主要好處:第一,每一步數據處理很清楚,可以很容易地可視化出來;第二,對用戶來說,用ML算法處理這件事非常透明,我不用管我用的是什麼分類方法,是SVM還是AdaBoost,SVM用的kernel是線性的還是RBF的,original和scaled的參數又是調成多少,等等這些事情不需要我們考慮。那麼這又引出第二個問題,MLBase是怎麼做的?
MLbase架構核心
MLbase有一個新穎的優化器,會選擇它認為最適合的已經在內部實現好了的機器學習算法和相關參數,來處理用戶輸入的數據,並返回模型或別的幫助分析的結果。總體上的處理流程如下圖:
用戶輸入的類Pig的Task,比如doClassify(X, y),或者還可以做協同過濾doCollabFilter(X, y),還可以做一些圖計算findTopKDegreeNodes(G, k = 1000)之類的事情,先會傳給Parser處理,然後交給LLP。LLP是logical learning plan,即是邏輯上的一個學習選擇過程,在這個過程裏選擇該用什麼ML算法,他的特征提取應該用什麼做,參數應該選什麼,數據集怎麼拆子數據集的策略等事情,LLP決定之後交給Optimizer。優化器是MLbase的核心,簡單說他會把數據拆分成若幹份,對每一份使用不同的算法和參數來運算出結果,看哪一種搭配方式得到的結果最優(注意這次最優結果是初步的),優化器做完這些事之後就交給PLP。PLP是physical learning plan,即物理(實際上)要執行的計劃,他會讓MLbase的master把任務分配給具體slave去最後執行之前選好的算法方案,把結果計算出來返回,同時返回這次計算的學習模型。
總結一些,這個流程是Task -> Parser -> LLP -> Optimizer -> PLP -> Execute -> Result/Model,即先從邏輯上,在已有的算法裏選幾個適合這個場景的套餐,讓優化器都去做一遍,把認為當時最優的套餐給實際執行的部分去執行,返回結果。具體LLP,優化器內部包含的內容,執行過程我就不具體寫了,論文中有介紹一些,這裏就關注一下他的思想,下麵再貼一個圖吧。
更激動人心的是,MLbase並不止於把結果返回給用戶,他還有後續工作要做。大致做法是,在LLP、優化器部分,他會存儲一些中間結果和特征,然後會後續繼續搜尋和測試結果更好的算法和相關參數,並且會通知用戶(具體也不知道後續通知是怎麼個形式,文中隻說會 inform the user about it )。除此之外,LLP內部實現的算法,是可以擴充的,MLbase考慮到了他的可擴展性,就是想讓ML專家增加新的ML算法得到MLbase裏去,應該是按照MLI,MLlib這些接口(第一張圖)來擴充。大體上最關鍵的就是這幾點:會自動找算法;自己會選擇和優化;可以擴充。
MLbase特性總結
本文主要介紹了MLbase能做的事,並把最關鍵的實現方式簡單介紹了一下,希望可以讓讀者感受到MLBase的設計思想和獨到的地方。總的來說,Mlbase的核心是他的優化器,把聲明式的task轉化成複雜的學習計劃,產出最優的模型和計算結果。與Weka,mahout不同的是,
首先MLbase是分布式的,Weka是一個單機的係統;
其次,Mlbase是自動化的,Weka和mahout都需要使用者具備機器學習技能,來選擇自己想要的算法和參數來做處理;
再者,MLbase提供了不同抽象程度的接口,讓算法可以擴充,讓會ML的與不會ML的人都可以使用他;
最後,他可以基於Spark這個平台,這也是很大一個看點。
讓我們期待它的發布!
(全文完)
最後更新:2017-04-03 16:49:06