Facebook首次公開(kāi)內部機器學(xué)習平臺,啟動(dòng)AI帝國

鎂客 9年前 (2016-05-10)

FB首次披露內部ML學(xué)習平臺細節,進(jìn)一步提升工程實(shí)力。

【編者按】本文由新智元編譯,來(lái)源:Facebook,編譯:胡祥杰

Tensorflow憑“谷歌”“開(kāi)源”兩個(gè)標簽自2015年底發(fā)布以來(lái)便名震深度學(xué)習圈。而前年底Facebook就打造其專(zhuān)屬ML平臺FBLearner Flow,大幅提高員工工作效率。今天,FB工程師首次披露該平臺細節,公司意欲進(jìn)一步提高速度、效率,邁向ML自動(dòng)化。雖然目前仍限內部使用,但不排除FB這款“Flow”未來(lái)也將開(kāi)源。兩大巨頭的兩股“Flow”如何較量?先從了解FBLearner Flow開(kāi)始。

Facebook首次公開(kāi)內部機器學(xué)習平臺,啟動(dòng)AI帝國

Facebook 現在在信息推薦、過(guò)濾攻擊言論、推薦熱門(mén)話(huà)題、搜索結果排名等等已經(jīng)使用了大量人工智能和深度學(xué)習的技術(shù)。在Facebook上,還有許多試驗能夠從機器學(xué)習模型中獲利,但是目前,對于很多沒(méi)有深厚機器學(xué)習背景的工程師來(lái)說(shuō),想要利用這些機器學(xué)習基礎設施,還是有很大的困難。2014年年末Facebook發(fā)布FBLearner Flow,決定重新定義自己的機器學(xué)習平臺,把人工智能與機器學(xué)習中最先進(jìn)的算法以最便利的方式提供給Facebook的工程師。

在早期運用人工智能與機器學(xué)習的試驗中,Facebook 發(fā)現,準確度上最大的提升往往來(lái)自快速的試驗、功能編程和模式調試,而非從根本上運用不同的算法。此前,在找到成功的新功能,或者一個(gè)超參數集時(shí),工程師可能需要進(jìn)行上千次試驗。Facebook對傳統的流水線(xiàn)系統進(jìn)行評估發(fā)現,這一系統并沒(méi)有很好的匹配Facebook的需求,大多數的解決方案并沒(méi)有提供以不同的輸入來(lái)重新運行這一流水線(xiàn)的解決方案;也沒(méi)有提供機制來(lái)具體地分析產(chǎn)出和副作用;沒(méi)有提供對輸出的可視化;沒(méi)有為參數掃描之類(lèi)的任務(wù)提供條件步驟。

為了實(shí)現這些點(diǎn),Facebook想要一個(gè)具備以下屬性的平臺:

每一種機器算法都必須以一種可再使用的方式運行過(guò)一次。

工程師應該能寫(xiě)出一個(gè)訓練流水線(xiàn),這些流水線(xiàn)可以在多種機器中平行切換,并被其他工程師再使用。

對于具有不同機器學(xué)習經(jīng)驗的工程師來(lái)說(shuō),訓練模型應該變得簡(jiǎn)便,并且,幾乎每一步都應該是完全自動(dòng)化的。

人人都應該能夠便利地搜索過(guò)去的試驗和測試結果,并與其他人分享,并在特定的試驗中嘗試新的變量。

所以Facebook決定建立一個(gè)全新的平臺——FBLearner Flow。這一平臺要能方便地在不同的產(chǎn)品中重復使用多種算法,并可以延伸到成千上萬(wàn)種模擬的定制試驗操中,輕松地對實(shí)驗進(jìn)行管理。這一平臺提供了創(chuàng )新性的功能,比如從流水線(xiàn)定義和對Python 編碼進(jìn)行自動(dòng)化平行移用中自動(dòng)生成用戶(hù)界面(UI)試驗。

目前,超過(guò)25%的Facebook工程開(kāi)發(fā)團隊都在使用FBLearner Flow。創(chuàng )建以來(lái),該平臺已經(jīng)訓練了超過(guò)100萬(wàn)模型。Facebook的預測服務(wù),已經(jīng)發(fā)展到每秒產(chǎn)生超過(guò)600萬(wàn)次預測。

在編碼上減少人工勞動(dòng),要求進(jìn)行一系列的試驗,允許機器工程師把更多的時(shí)間花在功能編碼上,這反過(guò)來(lái)能夠讓準確度得到更大的提升,進(jìn)而,工程師能夠產(chǎn)生更大范圍的影響,現在的workflow寫(xiě)作者有150個(gè)左右,他們的工作的影響力已經(jīng)超越了他們自己和團隊。

核心概念和組成部分

在近距離地接觸這一系統前,有幾個(gè)關(guān)鍵的概念需要理解:

工作流(Workflow):一個(gè)工作流是限于FBLearner Flow中的一個(gè)流水線(xiàn),并且是其所運行的有機器學(xué)習任務(wù)的入口。每一個(gè)Workflow負責的都是一個(gè)具體的任務(wù),比如訓練和評估具體的模型。Workflows由計算符系統的術(shù)語(yǔ)進(jìn)行定義,可以被移用。

計算符(Operator):計算符是workflows的建造模塊。從概念上,你可以把計算符認為是一個(gè)程序里面的一種功能。在FBLearner Flow中,計算符是單個(gè)機器中運行和執行的最小組件。

通道(Channels):通道代表作輸入和輸出。輸入和輸出在工作流和計算符之間的流動(dòng)。所有的通道都是由Facebook定義的歸類(lèi)系統進(jìn)行歸類(lèi)。

這一平臺由三個(gè)核心部件組成:一個(gè)定制的分布式工作流的寫(xiě)作和執行環(huán)境;一個(gè)用戶(hù)界面試驗管理,用于發(fā)布試驗和檢查結果;還有許多事前定義的流水線(xiàn),用于訓練在Facebook最常見(jiàn)的使用機器學(xué)習的算法。

寫(xiě)作和執行環(huán)境

FBLearner Flow 中所有的工作流和計算符都被定義為Python中的函數,并使用特殊的修飾器,來(lái)與平臺進(jìn)行融合。來(lái)看一個(gè)簡(jiǎn)單的場(chǎng)景,假設我們想要根據經(jīng)典的鳶尾花數據集訓練一個(gè)決策樹(shù),以根據花的花瓣和花萼來(lái)預言花的種類(lèi)。假設我們可用的數據集是在蜂巢(Hive)矩陣中,并且有5列,每一列分貝代表了花瓣寬度、花瓣長(cháng)度、花萼寬度、花萼長(cháng)度以及樣本種類(lèi)。在這個(gè)Workflow中,我們將會(huì )以對數損失(log loss)的方法來(lái)評估模型的表現,并且預測一個(gè)未加標簽數據集的種類(lèi)。

一個(gè)要處理的樣本工作流可能會(huì )是這樣的:

Facebook首次公開(kāi)內部機器學(xué)習平臺,啟動(dòng)AI帝國

讓我們更深入地查看這一工作流,以理解FBLearner Flow是如何工作的。

首先,工作流的修飾器會(huì )告訴FBLearner Flow,鳶尾花函數不是一個(gè)常見(jiàn)的Python函數,而是一個(gè)工作流。

輸入圖式和返回參數表明了工作流所期待的輸入和輸出類(lèi)型。執行框架將自動(dòng)地在運行時(shí)間內核實(shí)這些類(lèi)型,并且強制Workflow接收它所期待的數據。參照下面的例子,輸入的帶標簽數據被標注為一個(gè)數據集,并以分四列輸入。如果在所提供的數據集中,其中一列缺失,系統會(huì )提出輸入錯誤的警告,因為這一數據集與工作流是不相符的。

工作流的架構看起來(lái)像一個(gè)常規的Python函數,可以調用若干計算符,這些計算符執行的是真正的機器學(xué)習工作。雖然看起來(lái)很普通,但是FBLearner Flow采用了一個(gè)預測系統(system of future),在工作流內實(shí)現平行化遷移,讓沒(méi)有共享數據屬性的步驟也可以同時(shí)運行。

Workflows的運行并不是連續性的,它分為兩個(gè)部分:1,DAG編譯部分;2,計算符執行部分。在DAG編譯部分,工作流的計算符并不實(shí)際執行任務(wù),而是反饋Futures。Futures指的是代表了計算延時(shí)模塊的東西。所以在上文的例子中,dt變量其實(shí)是一個(gè)furure,它代表還沒(méi)有發(fā)生的決策樹(shù)訓練。在DAG編譯部分,FB Learner Flow記錄了所有操作中的調用,還有一系列在進(jìn)行操作開(kāi)始前的futures。

比如,ComputeMetricsOperator和PredictOperator都把dt.model作為輸入,這樣以來(lái),系統就知道,在操作運行前,nn必須要被計算,所以他們必須等待,直到 TrainDecisionTreeOperator完成。

完成了DAG編譯部分后,FB Learner Flow就建立一個(gè)DAG 計算符,在這個(gè)計算符中,邊界代表了數據的依賴(lài)性。這一個(gè)DAG隨后能夠被列入執行計劃,在這兒,一旦它的父程序完全成功,計算符就能夠開(kāi)始執行。在這個(gè)例子中, ComputeMetricsOperator 和 PredictOperator的調用之間,不存在數據依賴(lài)性,所以這兩個(gè)計算符的運行能夠平行切換。

Facebook首次公開(kāi)內部機器學(xué)習平臺,啟動(dòng)AI帝國

在計算符執行部分,每一個(gè)計算符在它的依賴(lài)計算符完成后,就開(kāi)始運行。每一個(gè)計算符都有自己對CPU、GPU和內存要求,并且,FBLearner Flow將會(huì )分配機器的一部分,與計算符對任務(wù)的要求相匹配。FBLearner Flow 自動(dòng)地處理,分配相關(guān)編碼給機器,在輸入和輸出之間進(jìn)行切換。

用戶(hù)界面試驗管理

在Facebook中,有好幾百個(gè)不同的工作流,在執行無(wú)數的機器學(xué)習任務(wù)。Facebook面臨的一個(gè)挑戰是建立一個(gè)通用的UI,能夠與Facebook的工程師所使用的一系列工作流共同工作。使用通用的類(lèi)型系統,可以建立一個(gè)UI,能以一個(gè)不了解工作流的方式闡釋輸入和輸出,也就是不需要理解每一個(gè)工作流實(shí)施的細節。對于未來(lái)的定制化,FBLearner Flow用戶(hù)界面提供了一個(gè)插件系統,能夠被不用的團隊嘗試定制化體驗,并且融入Facebook的系統中。

FBLearner Flow UI提供一些額外的體驗:1)發(fā)布工作流 2)對結果進(jìn)行可視化和比較3)管理試驗。

發(fā)布工作流

此前,Facebook曾發(fā)現,每一個(gè)工作流都要求一個(gè)類(lèi)型輸入圖式。工程師發(fā)布一個(gè)工作流時(shí),UI能夠讀到這個(gè)輸入圖式,并自動(dòng)地生成架構表格,并且把具體的輸入與工作流進(jìn)行匹配。這允許機器學(xué)習工程師在一行前端代碼都不用寫(xiě)的情況下,能夠為他們的工作流獲得豐富的UI。這將能讓UI渲染復雜的輸入要素,比如為分類(lèi)和選擇數據集。

Facebook首次公開(kāi)內部機器學(xué)習平臺,啟動(dòng)AI帝國

輸出的可視化和比較

在用戶(hù)界面上,工程師能夠檢查每一個(gè)工作流,觀(guān)察輸出,以修改標簽和其它的元數據,并采取行動(dòng),比如配置模型,進(jìn)行生產(chǎn)。Workflow中輸入和輸出可以進(jìn)行對比,讓工程師根據基線(xiàn)評價(jià)試驗的表現。Facebook把對輸出進(jìn)行可視化的技術(shù)用于渲染輸入,也就是用于提供具體類(lèi)別,對每一個(gè)輸出進(jìn)行渲染的分類(lèi)系統。

Facebook首次公開(kāi)內部機器學(xué)習平臺,啟動(dòng)AI帝國

管理試驗

Facebook的工程師每天要進(jìn)行幾千次試驗,FBLearner Flow UI提供了管理這些試驗的工具。所有的workflow都在Elasticsearch中編了索引,所以可以通過(guò)多種維度搜到,并且,系統的支持把搜索詞條存到更容易被發(fā)現的試驗中。在進(jìn)行模式調試時(shí),工程師經(jīng)常會(huì )運行復雜的參數掃描,通過(guò)特定的渲染,可以看到哪一個(gè)基陣產(chǎn)生了最好的結果。

Facebook首次公開(kāi)內部機器學(xué)習平臺,啟動(dòng)AI帝國

機器學(xué)習圖書(shū)館

FBLearner Flow平臺的一個(gè)核心原則是,它不跟任何的算法進(jìn)行捆綁。結果便是,平臺能夠支持大量的機器學(xué)習算法,以及結合了這些算法的創(chuàng )意。平臺還很容易擴展,任何工程師都能寫(xiě)一個(gè)新的工作流來(lái)讓整個(gè)公司的人都可以使用他或她最喜愛(ài)的算法。開(kāi)放資源應用的算法能夠便利地在工作流中使用,并融入Facebook 的基礎設施中。

Facebook的應用機器學(xué)習算法團隊在運行那些提供普通使用的算法可以擴展化的Workflow,其中包括:

神經(jīng)網(wǎng)絡(luò )

梯度推進(jìn)的決策樹(shù)

Lambda MART

隨機梯度遞減

邏輯回歸

未來(lái)計劃

有了FB Learner Flow,AI會(huì )變成編程團隊的一個(gè)組成部分,并為Facebook的工程師提供通過(guò)簡(jiǎn)單的API調用,緊跟AI的發(fā)展潮流。Facebook一直努力地提升FBLearner Flow,來(lái)讓工程師變得越來(lái)越有生產(chǎn)力,并在越來(lái)越多的產(chǎn)品中使用機器學(xué)習。這些改進(jìn)包括:

效率:過(guò)去的四月,在一個(gè)包含了幾千臺機器群集里,運行了超過(guò)500000 工作流。其中一些試驗要求大量的計算資源,需要花掉好幾天才能完成。Facebook著(zhù)眼于提升這些試驗的運行效率,來(lái)保證平臺在把執行延遲最小化的同時(shí),滿(mǎn)足不斷增長(cháng)的需求。Facebook正在圍繞數據局部性尋找新的解決方案,用來(lái)源數據共置計算,并且,Facebook也正在提高對資源要求的理解,來(lái)盡可能地讓更多的試驗在每一個(gè)機器中都能進(jìn)行。

速度:FBLearner Flow是一個(gè)每天能吸收萬(wàn)億數據的系統,每天訓練的模型超過(guò)幾千個(gè),不管是離線(xiàn)還是實(shí)時(shí),隨后,把這些模型用于生活預測的服務(wù)器。工程師和相關(guān)團隊,即便是沒(méi)有什么專(zhuān)業(yè)知識,也能建立和允許試驗,以更熟練前所未有的速度把AI支持的產(chǎn)品部署生產(chǎn)。Facebook正在努力把工作流完成的周期最小化,讓產(chǎn)品能從最新的數據中進(jìn)行學(xué)習,允許工程是快速地進(jìn)行多次試驗。

機器學(xué)習的自動(dòng)化:許多機器學(xué)習算法都有很多可有優(yōu)化的超參數。在Facebook,許多模型的準確度1%的提升都能產(chǎn)生許多有意義的影響。所以,有了Flow,Facebook為大規模的參數掃描和其它的自動(dòng)的機器學(xué)習功能建立支持,利用閑置的循環(huán)來(lái)進(jìn)一步提高這些模型。在這一領(lǐng)域,Facebook會(huì )進(jìn)行進(jìn)一步的投資,在Facebook的多種產(chǎn)品中提升Facebook AI和機器學(xué)習的專(zhuān)業(yè)性。

在接下來(lái)的幾個(gè)月里,Facebook將會(huì )對一些特定的系統和應于保持高度關(guān)注,這些系統和應用能夠利用FBLearner Flow來(lái)給工程師提供條件,讓他們便利的在產(chǎn)品中使用AI 和深度學(xué)習,同時(shí),也可以為Facebook用戶(hù)提供更加個(gè)性化的體驗。

Facebook核心機器學(xué)習小組的負責人Hussein Mehanna在接受媒體采訪(fǎng)時(shí)說(shuō),Facebook在Flow上除了發(fā)表學(xué)術(shù)論文,可以做的還很多,公司最后會(huì )把這一平臺開(kāi)源。

文章譯自:https://code.facebook.com/posts/1072626246134461/introducing-fblearner-flow-facebook-s-ai-backbone/

最后,記得關(guān)注微信公眾號:鎂客網(wǎng)(im2maker),更多干貨在等你!

鎂客網(wǎng)


科技 | 人文 | 行業(yè)

微信ID:im2maker
長(cháng)按識別二維碼關(guān)注

硬科技產(chǎn)業(yè)媒體

關(guān)注技術(shù)驅動(dòng)創(chuàng )新

分享到