技術詳解Facebook人工智能母體FB Learner Flow

雷鋒網 於 11/05/2016 發表 收藏文章

圖片來源: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,參與打造圖片搜索中的網絡搜索等工作。


圖片來源: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裏面,有五個欄目,分佈代表了花瓣寬度、花瓣長度、萼片寬度、萼片長度和花朵樣本的品種。在這個工作流中,我們會用日記損失來評估模型的性能,預測一個未標記的數據庫的品種。

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


圖片來源: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之間沒有數據相關性,因此這兩個操作員可以同時平行運行。


圖片來源:Facebook Code

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

試驗管理UI

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

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

發佈工作流

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


圖片來源:Facebook Code

視覺化輸出並比較

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


圖片來源:Facebook Code

管理試驗

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


圖片來源:Facebook Code

機器學習程序庫

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

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

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

未來計劃

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

Via VentureBeat & Facebook Code

資料來源:雷鋒網
作者/編輯:AI科技評論
標籤: Facebook  FB Learner Flow  

留言


請按此登錄後留言。未成為會員? 立即註冊
    快捷鍵:←
    快捷鍵:→