1462973352-2492-5731a7599abb7

圖片來源:webcorenigeria

Facebook今天第一次正式介紹了FBLearner Flow,一個可以為全公司員工管理機器學習模型的機器學習軟體。換句話說,這是一個可以自己製造人工智慧的人工智慧,你可以理解為傳說中的人工智慧母體。

它與其他基於雲端的機器學習服務有點相似,例如微軟的Azure機器學習或者Airbnb的開源Airflow,不過,FBLearner Flow是根據Facebook自己的業務而進行最優化的,裝滿了Facebook工程師開發的演算法,讓公司其他人都可以為自己的模型而使用該平臺。

“公司超過25%的人都在使用,使用情景是我們之前無法預想的。”Facebook核心機器學習小組總監Hussein Mehanna在一次訪談中告訴Venture Beat。

Facebook不只可以釋出關於FBLearner Flow的學術論文,還可以最終將其開源。Facebook工程師已經與其他公司的人討論了這類技術,包括Linkedin、Twitter和Uber等公司。Mehanna說,他們都非常感興趣。

當然會對開源感興趣啦——這個系統已經在Facebook這樣的大公司驗證可行,而且,這!不!花!錢!這一點就與來自Domino Data Lab和Yhat的資料科學合作工具不同。

Facebook經常將一些技術開源,這樣的做法也符合公司自己的需要,因此如果未來FBLearner Flow完全開源了也不奇怪。問題是Facebook是否願意投入工程資源,將這項技術與其專利系統的匹配斷開。話雖如此,如果Facebook不願開源、將FBLearner Flow壓在箱底也不奇怪。因為多虧了這項技術,員工變得更加高效了。這會是一個競爭優勢。人們在新系統中可以看到過往的試驗和結果,甚至將兩個不同的機器學習流水線結合起來,設計出某種更加複雜的東西。此外,圖形互動介面讓非工程師也可以使用這個新平臺,因此才會有Mehanna說高達的25%的人都在使用。

無論未來是否會開源,至少,我們今天獲得了一部分FBLearner Flow的技術詳解。讓我們來看看Facebook工程師Jeffrey Dunn的博文,詳細解讀FBLearner Flow作為Facebook的人工智慧母體到底厲害在哪兒。Jefferey Dunn從卡內基梅隆大學獲得碩士學位,2011年加入Facebook,參與打造圖片搜尋中的網路搜尋等工作。

1462973352-3105-5731a3885dc9e

圖片來源:Facebook Code

如今,Facebook的許多體驗和互動都是依靠AI實現的。當你登入Facebook,我們使用機器學來給你提供獨特的、個人化的體驗。機器學習(ML)模型實現了個人化新聞流(News Feed)、過濾了可能得罪人的內容、突顯流行熱點話題並將搜尋結果排名。還有很多其他體驗可以從機器學習中獲益。但是以前,工程師必須有很強機器學習背景,不然沒法好好利用公司的機器學習基礎設施。在2014年底,我們從零開始,重新定義Facebook的機器學習平臺,將最先進的AI和ML演算法送到Facebook每一位工程師的手中。

我們希望能有這樣的一個平臺:

1.每個機器學習演算法應該可以一次性設定好,可以重複使用;

2. 工程師可以寫一個訓練流水線,在許多機器上平行執行,可以被很多工程師所用。

3. 無論工程師在機器學習領域的背景深淺,都可以很簡單地訓練模型,而且,其中幾乎所有的         步驟都可以完全自動化。

4. 人人都能很方便地搜尋過往試驗、檢視結果、與他人分享,並在某一個試驗中開啟新的變數。

我們決定建造一個全新平臺:FBLearner Flow,可以簡單方便地在不同產品中重複使用演算法,可以放大規模同時執行幾千個定製試驗,並且能夠輕鬆管理試驗。這個平臺提供了創新性的功能,例如從流水線定義和自動平行Python程式碼自動生成UI體驗。平臺從創立起已經訓練了超過一百萬個模型,我們的預測服務發展到每秒超過600萬次預測。

減少了手動工作的工程師們可以花更多時間進行特徵工程,這反過來又可以進一步提升精度。工程師可以在更大的平臺層面去發揮影響。FBLearner Flow提供了平臺和工具,讓工程師每天進行幾千個試驗。

核心概念和組成

在深入理解系統之前,我們先來看幾個關鍵概念。

工作流:一個工作流就是在FBLearner Flow中定義的一個流水線,是所有機器學習任務的入口。每個工作流作為一個具體的任務,例如訓練和評估某個具體的模型。工作流根據操作員來定義,可以平行運作。

操作員:操作員是工作流的建造模組。從概念上,你可以將操作員想象為一個程式裡的一個功能。在FBLearner Flow中,操作員是執行的最小單位,可以在單一機器上運作。

頻道:頻道代表輸入和輸出,在一個工作流的各個操作員直接流轉。所有頻道都用一個我們定義的定製類別系統輸入。

平臺包括這三個核心組成部分:一個作者及定製分佈工作流的實施環境,一個釋出試驗和檢視結果的試驗管理UI,以及無數預定義的流水線,用來訓練Facebook大部分經常使用的機器學習演算法。

作者和實施環境

平臺上所有的工作流和操作員都定義為Python功能,使用獨特的裝飾器來整合進入平臺。讓我們來看一個具體的情景,我們想用經典的Iris資料集訓練一個決策樹,基於花朵的花瓣和萼片大小來預測花的品種。假設資料庫是在Hive裡面,有五個欄目,分佈代表了花瓣寬度、花瓣長度、萼片寬度、萼片長度和花朵樣本的品種。在這個工作流中,我們會用日記損失來評估模型的效能,預測一個未標記的資料庫的品種。

要處理這類任務的工作流樣本大概長這樣:

1462973352-5594-5731a4d79f55d

圖片來源:Facebook Code

讓我們來仔細看看這個工作流,理解FBLearner Flow到底是怎麼運作的。

首先,@workflow裝飾器告訴FBLearner Flow,iris功能不是一個普通Python功能,而是一個工作流。input_schema和returns參值說明了工作流的輸入型別及輸出型別。實施框架會自動確認這些型別,確保工作流收到的資料是符合其預期的。這個例子中,labeled_data輸入標記為有四個欄目的資料庫輸入。如果在資料庫中有一個欄目缺失,那麼就會提出一個TypeError異常,因為資料庫與這個工作流不相容。

工作流的本體看起來相應普通的Python功能,連線到幾個操作員來實施機器學習工作。雖然看起來普通,FBLearner Flow使用一個future系統來在工作流內提供平行化,如果有若干個步驟不共享一個資料相關性,就可以同時執行。

工作流不是線性執行,而是分兩個步驟:1)DAG編譯步驟,2)操作員執行步驟。在第一部中,操作員並沒有執行,而是返回future。future代表了延遲的計算。因此在上述例子中,dt變數實際上是一個future,代表了還沒有發生的決策樹訓練。FBLearner Flow在DAG編譯階段的所有操作員撤銷行為都留有記錄,並且記錄所有必須在操作之前搞定的future。例如,ComputeMetricsOperator和PredictOperator將dt.model作為輸入,因此係統知道nn一定要在操作員執行之前計算,因此必須等到TrainDecisionTreeOperator完成。

DAG編譯階段完成時,FBLearner Flow將打造一個操作員DAG,可以預定何時進行執行,每個操作員只要上一級成功完成就可以開始執行。在這個例子中,ComputeMetricsOperator和PredictOperator之間沒有資料相關性,因此這兩個操作員可以同時平行執行。

1462973352-5037-5731a387ead9a

圖片來源:Facebook Code

在操作員執行階段,每個操作員有自己的CPU、GPU和儲存要求。FBLearner Flow會分配一個匹配操作員任務要求的機器部分。平臺自動將相關的程式碼分配給機器,在操作員之間傳送輸入和輸出。

試驗管理UI

在全公司有幾百個不同的工作流,進行著無數個機器學習任務。我們面臨的一個挑戰是打造一個通用的UI介面,可以匹配多元的工作流使用。利用定製類別系統,我們打造了一個可以不需要理解每個工作流的實施細節、就能夠解讀輸入和輸出的UI。為了進一步定製化,平臺UI提供了一個外掛系統,可以用來為具體的團隊和整合Facebook系統提供定製化體驗。

FBLearner Flow UI還提供了一些額外體驗:釋出工作流;將輸出視覺化並進行比較;管理試驗。

釋出工作流

我們之前看到,每個工作流規定了一個輸入綱要。工程師釋出工作流的時候,UI讀取到了輸入綱要,自動生成一個結構化表格,來確認具體的工作流輸入。這讓ML工程師可以不用寫一行前端程式碼,就可以使用豐富的UI。定製類別系統有豐富的類別用於描述資料庫、特徵和許多其他共同的機器學習資料型別。這讓UI可以描繪複雜的輸入元素,例如功能輸入提示和資料庫選擇條。

1462973352-2340-5731a607a8298

圖片來源:Facebook Code

視覺化輸出並比較

工程師可以看到每一個工作流的輸出,來修改標籤和其他超資料,並採取行動,例如將模型匯入生產。工程師可以比較工作流的輸入和輸出,來基於基準評估試驗的效能。我們使用了一項類似的技術來將輸出視覺化,類似於渲染輸入形式的技術——系統用此來為每種具體型別的輸出提供渲染。通過一個外掛系統可以加入額外的定製視覺化和行動。例如,新聞流(News Feed)團隊可以為他們的模型增加實時系統量度。

1462973352-6337-5731a6071109c

圖片來源:Facebook Code

管理試驗

Facebook工程師每天釋出幾千個試驗,平臺UI提供了管理所有實驗的工具。所有的工作流執行都在Elasticsearch記錄索引,因此可以用無數的維度來進行搜尋,系統支援儲存搜尋,方便尋找試驗。當除錯模型時,工程師經常執行細分的複雜引數掃描分析,很方便就能看到哪一個配置產出的結果最好。

1462973353-9797-5731a6706b9c4

圖片來源:Facebook Code

機器學習程式庫

FBLearner Flow平臺的一個核心原則是,它不與任何具體的演算法繫結。因而,平臺可以支援無數的ML演算法以及這些演算法的創新組合。平臺也很容易延展——任何工程師都可以寫一個新的工作流,讓他或她最愛的演算法可供全公司使用。演算法的開源實施很容易在一個工作流中完成,並整合進入Facebook的基礎設施。

Facebook的應用機器學習團隊維護的工作流可以為常用演算法提供可擴充套件的實施,包括:

  • 神經系統
  • 迭代決策樹(GBDT)
  • LambdaMART
  • 隨機梯度下降
  • 邏輯迴歸

未來計劃

有了FBLearner Flow,AI成為工程師組織中的核心,通過簡單的API為Facebook工程師提供了最先進的人工智慧。我們持續改善FBLearner Flow,來讓工程師變得越來越高效,能夠將機器學習應用於越來越多的產品中。在未來的幾個月中,我們將更加緊密關注其中一些系統和應用,讓工程師在產品中使用AI和ML更加簡便,併為使用Facebook的人們提供更加個人化的體驗。

 

Via VentureBeat & Facebook Code