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