Facebook首次公開內部機器學習平臺,啟動AI帝國
FB首次披露內部ML學習平臺細節,進一步提升工程實力。
【編者按】本文由新智元編譯,來源:Facebook,編譯:胡祥杰
Tensorflow憑“谷歌”“開源”兩個標簽自2015年底發布以來便名震深度學習圈。而前年底Facebook就打造其專屬ML平臺FBLearner Flow,大幅提高員工工作效率。今天,FB工程師首次披露該平臺細節,公司意欲進一步提高速度、效率,邁向ML自動化。雖然目前仍限內部使用,但不排除FB這款“Flow”未來也將開源。兩大巨頭的兩股“Flow”如何較量?先從了解FBLearner Flow開始。
Facebook 現在在信息推薦、過濾攻擊言論、推薦熱門話題、搜索結果排名等等已經使用了大量人工智能和深度學習的技術。在Facebook上,還有許多試驗能夠從機器學習模型中獲利,但是目前,對于很多沒有深厚機器學習背景的工程師來說,想要利用這些機器學習基礎設施,還是有很大的困難。2014年年末Facebook發布FBLearner Flow,決定重新定義自己的機器學習平臺,把人工智能與機器學習中最先進的算法以最便利的方式提供給Facebook的工程師。
在早期運用人工智能與機器學習的試驗中,Facebook 發現,準確度上最大的提升往往來自快速的試驗、功能編程和模式調試,而非從根本上運用不同的算法。此前,在找到成功的新功能,或者一個超參數集時,工程師可能需要進行上千次試驗。Facebook對傳統的流水線系統進行評估發現,這一系統并沒有很好的匹配Facebook的需求,大多數的解決方案并沒有提供以不同的輸入來重新運行這一流水線的解決方案;也沒有提供機制來具體地分析產出和副作用;沒有提供對輸出的可視化;沒有為參數掃描之類的任務提供條件步驟。
為了實現這些點,Facebook想要一個具備以下屬性的平臺:
每一種機器算法都必須以一種可再使用的方式運行過一次。
工程師應該能寫出一個訓練流水線,這些流水線可以在多種機器中平行切換,并被其他工程師再使用。
對于具有不同機器學習經驗的工程師來說,訓練模型應該變得簡便,并且,幾乎每一步都應該是完全自動化的。
人人都應該能夠便利地搜索過去的試驗和測試結果,并與其他人分享,并在特定的試驗中嘗試新的變量。
所以Facebook決定建立一個全新的平臺——FBLearner Flow。這一平臺要能方便地在不同的產品中重復使用多種算法,并可以延伸到成千上萬種模擬的定制試驗操中,輕松地對實驗進行管理。這一平臺提供了創新性的功能,比如從流水線定義和對Python 編碼進行自動化平行移用中自動生成用戶界面(UI)試驗。
目前,超過25%的Facebook工程開發團隊都在使用FBLearner Flow。創建以來,該平臺已經訓練了超過100萬模型。Facebook的預測服務,已經發展到每秒產生超過600萬次預測。
在編碼上減少人工勞動,要求進行一系列的試驗,允許機器工程師把更多的時間花在功能編碼上,這反過來能夠讓準確度得到更大的提升,進而,工程師能夠產生更大范圍的影響,現在的workflow寫作者有150個左右,他們的工作的影響力已經超越了他們自己和團隊。
核心概念和組成部分
在近距離地接觸這一系統前,有幾個關鍵的概念需要理解:
工作流(Workflow):一個工作流是限于FBLearner Flow中的一個流水線,并且是其所運行的有機器學習任務的入口。每一個Workflow負責的都是一個具體的任務,比如訓練和評估具體的模型。Workflows由計算符系統的術語進行定義,可以被移用。
計算符(Operator):計算符是workflows的建造模塊。從概念上,你可以把計算符認為是一個程序里面的一種功能。在FBLearner Flow中,計算符是單個機器中運行和執行的最小組件。
通道(Channels):通道代表作輸入和輸出。輸入和輸出在工作流和計算符之間的流動。所有的通道都是由Facebook定義的歸類系統進行歸類。
這一平臺由三個核心部件組成:一個定制的分布式工作流的寫作和執行環境;一個用戶界面試驗管理,用于發布試驗和檢查結果;還有許多事前定義的流水線,用于訓練在Facebook最常見的使用機器學習的算法。
寫作和執行環境
FBLearner Flow 中所有的工作流和計算符都被定義為Python中的函數,并使用特殊的修飾器,來與平臺進行融合。來看一個簡單的場景,假設我們想要根據經典的鳶尾花數據集訓練一個決策樹,以根據花的花瓣和花萼來預言花的種類。假設我們可用的數據集是在蜂巢(Hive)矩陣中,并且有5列,每一列分貝代表了花瓣寬度、花瓣長度、花萼寬度、花萼長度以及樣本種類。在這個Workflow中,我們將會以對數損失(log loss)的方法來評估模型的表現,并且預測一個未加標簽數據集的種類。
一個要處理的樣本工作流可能會是這樣的:
讓我們更深入地查看這一工作流,以理解FBLearner Flow是如何工作的。
首先,工作流的修飾器會告訴FBLearner Flow,鳶尾花函數不是一個常見的Python函數,而是一個工作流。
輸入圖式和返回參數表明了工作流所期待的輸入和輸出類型。執行框架將自動地在運行時間內核實這些類型,并且強制Workflow接收它所期待的數據。參照下面的例子,輸入的帶標簽數據被標注為一個數據集,并以分四列輸入。如果在所提供的數據集中,其中一列缺失,系統會提出輸入錯誤的警告,因為這一數據集與工作流是不相符的。
工作流的架構看起來像一個常規的Python函數,可以調用若干計算符,這些計算符執行的是真正的機器學習工作。雖然看起來很普通,但是FBLearner Flow采用了一個預測系統(system of future),在工作流內實現平行化遷移,讓沒有共享數據屬性的步驟也可以同時運行。
Workflows的運行并不是連續性的,它分為兩個部分:1,DAG編譯部分;2,計算符執行部分。在DAG編譯部分,工作流的計算符并不實際執行任務,而是反饋Futures。Futures指的是代表了計算延時模塊的東西。所以在上文的例子中,dt變量其實是一個furure,它代表還沒有發生的決策樹訓練。在DAG編譯部分,FB Learner Flow記錄了所有操作中的調用,還有一系列在進行操作開始前的futures。
比如,ComputeMetricsOperator和PredictOperator都把dt.model作為輸入,這樣以來,系統就知道,在操作運行前,nn必須要被計算,所以他們必須等待,直到 TrainDecisionTreeOperator完成。
完成了DAG編譯部分后,FB Learner Flow就建立一個DAG 計算符,在這個計算符中,邊界代表了數據的依賴性。這一個DAG隨后能夠被列入執行計劃,在這兒,一旦它的父程序完全成功,計算符就能夠開始執行。在這個例子中, ComputeMetricsOperator 和 PredictOperator的調用之間,不存在數據依賴性,所以這兩個計算符的運行能夠平行切換。
在計算符執行部分,每一個計算符在它的依賴計算符完成后,就開始運行。每一個計算符都有自己對CPU、GPU和內存要求,并且,FBLearner Flow將會分配機器的一部分,與計算符對任務的要求相匹配。FBLearner Flow 自動地處理,分配相關編碼給機器,在輸入和輸出之間進行切換。
用戶界面試驗管理
在Facebook中,有好幾百個不同的工作流,在執行無數的機器學習任務。Facebook面臨的一個挑戰是建立一個通用的UI,能夠與Facebook的工程師所使用的一系列工作流共同工作。使用通用的類型系統,可以建立一個UI,能以一個不了解工作流的方式闡釋輸入和輸出,也就是不需要理解每一個工作流實施的細節。對于未來的定制化,FBLearner Flow用戶界面提供了一個插件系統,能夠被不用的團隊嘗試定制化體驗,并且融入Facebook的系統中。
FBLearner Flow UI提供一些額外的體驗:1)發布工作流 2)對結果進行可視化和比較3)管理試驗。
發布工作流
此前,Facebook曾發現,每一個工作流都要求一個類型輸入圖式。工程師發布一個工作流時,UI能夠讀到這個輸入圖式,并自動地生成架構表格,并且把具體的輸入與工作流進行匹配。這允許機器學習工程師在一行前端代碼都不用寫的情況下,能夠為他們的工作流獲得豐富的UI。這將能讓UI渲染復雜的輸入要素,比如為分類和選擇數據集。
輸出的可視化和比較
在用戶界面上,工程師能夠檢查每一個工作流,觀察輸出,以修改標簽和其它的元數據,并采取行動,比如配置模型,進行生產。Workflow中輸入和輸出可以進行對比,讓工程師根據基線評價試驗的表現。Facebook把對輸出進行可視化的技術用于渲染輸入,也就是用于提供具體類別,對每一個輸出進行渲染的分類系統。
管理試驗
Facebook的工程師每天要進行幾千次試驗,FBLearner Flow UI提供了管理這些試驗的工具。所有的workflow都在Elasticsearch中編了索引,所以可以通過多種維度搜到,并且,系統的支持把搜索詞條存到更容易被發現的試驗中。在進行模式調試時,工程師經常會運行復雜的參數掃描,通過特定的渲染,可以看到哪一個基陣產生了最好的結果。
機器學習圖書館
FBLearner Flow平臺的一個核心原則是,它不跟任何的算法進行捆綁。結果便是,平臺能夠支持大量的機器學習算法,以及結合了這些算法的創意。平臺還很容易擴展,任何工程師都能寫一個新的工作流來讓整個公司的人都可以使用他或她最喜愛的算法。開放資源應用的算法能夠便利地在工作流中使用,并融入Facebook 的基礎設施中。
Facebook的應用機器學習算法團隊在運行那些提供普通使用的算法可以擴展化的Workflow,其中包括:
神經網絡
梯度推進的決策樹
Lambda MART
隨機梯度遞減
邏輯回歸
未來計劃
有了FB Learner Flow,AI會變成編程團隊的一個組成部分,并為Facebook的工程師提供通過簡單的API調用,緊跟AI的發展潮流。Facebook一直努力地提升FBLearner Flow,來讓工程師變得越來越有生產力,并在越來越多的產品中使用機器學習。這些改進包括:
效率:過去的四月,在一個包含了幾千臺機器群集里,運行了超過500000 工作流。其中一些試驗要求大量的計算資源,需要花掉好幾天才能完成。Facebook著眼于提升這些試驗的運行效率,來保證平臺在把執行延遲最小化的同時,滿足不斷增長的需求。Facebook正在圍繞數據局部性尋找新的解決方案,用來源數據共置計算,并且,Facebook也正在提高對資源要求的理解,來盡可能地讓更多的試驗在每一個機器中都能進行。
速度:FBLearner Flow是一個每天能吸收萬億數據的系統,每天訓練的模型超過幾千個,不管是離線還是實時,隨后,把這些模型用于生活預測的服務器。工程師和相關團隊,即便是沒有什么專業知識,也能建立和允許試驗,以更熟練前所未有的速度把AI支持的產品部署生產。Facebook正在努力把工作流完成的周期最小化,讓產品能從最新的數據中進行學習,允許工程是快速地進行多次試驗。
機器學習的自動化:許多機器學習算法都有很多可有優化的超參數。在Facebook,許多模型的準確度1%的提升都能產生許多有意義的影響。所以,有了Flow,Facebook為大規模的參數掃描和其它的自動的機器學習功能建立支持,利用閑置的循環來進一步提高這些模型。在這一領域,Facebook會進行進一步的投資,在Facebook的多種產品中提升Facebook AI和機器學習的專業性。
在接下來的幾個月里,Facebook將會對一些特定的系統和應于保持高度關注,這些系統和應用能夠利用FBLearner Flow來給工程師提供條件,讓他們便利的在產品中使用AI 和深度學習,同時,也可以為Facebook用戶提供更加個性化的體驗。
Facebook核心機器學習小組的負責人Hussein Mehanna在接受媒體采訪時說,Facebook在Flow上除了發表學術論文,可以做的還很多,公司最后會把這一平臺開源。
文章譯自:https://code.facebook.com/posts/1072626246134461/introducing-fblearner-flow-facebook-s-ai-backbone/
最后,記得關注微信公眾號:鎂客網(im2maker),更多干貨在等你!
硬科技產業媒體
關注技術驅動創新
