Facebook如何運(yùn)用機(jī)器學(xué)習(xí)進(jìn)行億級(jí)用戶數(shù)據(jù)處理
2017年末,F(xiàn)acebook應(yīng)用機(jī)器學(xué)習(xí)組發(fā)布最新論文,對(duì)整個(gè)Facebook的機(jī)器學(xué)習(xí)軟硬件架構(gòu)進(jìn)行了介紹??v覽全文,我們也可以從中對(duì)Facebook各產(chǎn)品的機(jī)器學(xué)習(xí)策略一窺究竟。論文中涉及到機(jī)器學(xué)習(xí)在全球規(guī)模(上億級(jí)數(shù)據(jù)處理)上的全新挑戰(zhàn),并給出了Facebook的應(yīng)對(duì)策略和解決思路,對(duì)相關(guān)行業(yè)和研究極其有意義。摘要機(jī)器學(xué)習(xí)在Facebook的眾多產(chǎn)品和服務(wù)中都有著舉足輕重的地位。 本文將詳細(xì)介紹Facebook在機(jī)器學(xué)習(xí)方面的軟硬件基礎(chǔ)架構(gòu),如何來滿足其全球規(guī)模的運(yùn)算需求。Facebook的機(jī)器學(xué)習(xí)需求極其繁雜:需要運(yùn)行大量不同的機(jī)器學(xué)習(xí)模型。這種復(fù)雜性已經(jīng)深深刻在Facebook系統(tǒng)堆棧的所有層面上。此外,F(xiàn)acebook存儲(chǔ)的所有數(shù)據(jù),有相當(dāng)大一部分會(huì)流經(jīng)機(jī)器學(xué)習(xí)管道,這樣的數(shù)據(jù)載荷為Facebook的分布式高性能訓(xùn)練流帶來巨大的壓力。計(jì)算需求也非常緊張,在保持用于訓(xùn)練的GPU/CPU平臺(tái)的同時(shí)平衡出大量CPU容量用于實(shí)時(shí)推理,也帶來了異常緊張的。這些問題及其他難題的解決,仍有待我們?cè)诳缭綑C(jī)器學(xué)習(xí)算法、軟件和硬件設(shè)計(jì)上持久而不懈的努力。引言Facebook的使命是“為人類構(gòu)建社交關(guān)系賦能,讓世界聯(lián)系更加緊密”。截至2017年12月,F(xiàn)acebook已經(jīng)連接了全球超過20億的人口。同時(shí),過去幾年來,機(jī)器學(xué)習(xí)同樣在這樣一種全球尺度的實(shí)際問題上進(jìn)行著一場(chǎng)革命,包括在機(jī)器學(xué)習(xí)算法創(chuàng)新方面的良性循環(huán),用于模型訓(xùn)練的海量數(shù)據(jù)以及高性能計(jì)算機(jī)體系結(jié)構(gòu)的進(jìn)步。在Facebook上,機(jī)器學(xué)習(xí)幾乎在提升用戶體驗(yàn)的所有層面都發(fā)揮著關(guān)鍵作用,包括諸如新聞推送語(yǔ)音和文本翻譯以及照片和實(shí)時(shí)視頻分類的排名等服務(wù)。Facebook在這些服務(wù)中用到了各種各樣的機(jī)器學(xué)習(xí)算法,包括支持向量機(jī),梯度boosted決策樹和許多類型的神經(jīng)網(wǎng)絡(luò)。本文將介紹Facebook的數(shù)據(jù)中心架構(gòu)支持機(jī)器學(xué)習(xí)需求的幾個(gè)重要層面。其架構(gòu)包括了內(nèi)部的“ML-as-a-Service”流,開源機(jī)器學(xué)習(xí)框架,和分布式訓(xùn)練算法。從硬件角度來看,F(xiàn)acebook利用了大量的CPU和GPU平臺(tái)來訓(xùn)練模型,以便在所需的服務(wù)延遲時(shí)間內(nèi)支持模型的訓(xùn)練頻率。對(duì)于機(jī)器學(xué)習(xí)推理過程,F(xiàn)acebook主要依靠CPU來處理所有主要的服務(wù),而其中神經(jīng)網(wǎng)絡(luò)排名服務(wù)(比如新聞推送)占據(jù)著所有計(jì)算負(fù)載的大頭。Facebook所存儲(chǔ)的海量數(shù)據(jù)中,有一大部分要流經(jīng)機(jī)器學(xué)習(xí)管道,并且為了提高模型質(zhì)量,這一部分的數(shù)據(jù)量還在隨著時(shí)間推移不斷增加。提供機(jī)器學(xué)習(xí)服務(wù)所需的大量數(shù)據(jù)成為了Facebook的數(shù)據(jù)中心將要在全球規(guī)模上面臨的挑戰(zhàn)。目前已有的可被用來向模型高效地提供數(shù)據(jù)的技術(shù)有,數(shù)據(jù)反饋和訓(xùn)練的解耦操作,數(shù)據(jù)/計(jì)算協(xié)同定位和網(wǎng)絡(luò)優(yōu)化。與此同時(shí),F(xiàn)acebook公司這樣大的計(jì)算和數(shù)據(jù)規(guī)模自身還帶來了一個(gè)獨(dú)特的機(jī)會(huì)。在每天的負(fù)載周期內(nèi),非高峰期都會(huì)空閑出大量可以用來進(jìn)行分布式訓(xùn)練算法的CPU。Facebook的計(jì)算集群(fleet)涉及到數(shù)十個(gè)數(shù)據(jù)中心,這樣大的規(guī)模還提供了一種容災(zāi)能力。及時(shí)交付新的機(jī)器學(xué)習(xí)模型對(duì)于Facebook業(yè)務(wù)的運(yùn)營(yíng)是非常重要的,為了保證這一點(diǎn),容災(zāi)規(guī)劃也至關(guān)重要。展望未來,F(xiàn)acebook希望看到其現(xiàn)有的和新的服務(wù)中的機(jī)器學(xué)習(xí)使用頻率快速增長(zhǎng)。當(dāng)然,這種增長(zhǎng)也將為負(fù)責(zé)這些服務(wù)架構(gòu)的團(tuán)隊(duì)在全球規(guī)模的拓展性上帶來更加嚴(yán)峻的挑戰(zhàn)。盡管在現(xiàn)有平臺(tái)上優(yōu)化基礎(chǔ)架構(gòu)對(duì)公司是一個(gè)重大的機(jī)遇,但我們?nèi)匀辉诜e極評(píng)估和摸索新的硬件解決方案,同時(shí)保持對(duì)于算法創(chuàng)新的關(guān)注。本文(Facebook對(duì)機(jī)器學(xué)習(xí)的看法)的主要內(nèi)容包括:機(jī)器學(xué)習(xí)正在被廣泛應(yīng)用在Facebook幾乎所有的服務(wù),而計(jì)算機(jī)視覺只占資源需求的一小部分。Facebook所需的大量機(jī)器學(xué)習(xí)算法極其繁雜,包括但不限于神經(jīng)網(wǎng)絡(luò)我們的機(jī)器學(xué)習(xí)管道正在處理海量的數(shù)據(jù),而這會(huì)帶來計(jì)算節(jié)點(diǎn)之外的工程和效率方面的挑戰(zhàn)。Facebook目前的推理過程主要依靠CPU,訓(xùn)練過程則是同時(shí)依靠CPU和GPU。但是從性能功耗比的角度來看,應(yīng)當(dāng)不斷對(duì)新的硬件解決方案進(jìn)行摸索和評(píng)估。全球用戶用來使用Facebook的設(shè)備每天都可達(dá)數(shù)億臺(tái),而這會(huì)就會(huì)提供大量可以用于機(jī)器學(xué)習(xí)任務(wù)的機(jī)器,例如用來進(jìn)行大規(guī)模的分布式訓(xùn)練。Facebook的機(jī)器學(xué)習(xí)機(jī)器學(xué)習(xí)(ML)是指利用一系列輸入來建立一個(gè)可調(diào)模型,并利用該模型創(chuàng)建一種表示,預(yù)測(cè)或其他形式的有用信號(hào)的應(yīng)用實(shí)例。????圖1. Facebook的機(jī)器學(xué)習(xí)流程和架構(gòu)示例圖1所示的流程由以下步驟組成,交替執(zhí)行:建立模型的訓(xùn)練階段。這個(gè)階段通常離線運(yùn)行。在應(yīng)用中運(yùn)行訓(xùn)練模型的推理階段,并進(jìn)行(一組)實(shí)時(shí)預(yù)測(cè)。這個(gè)階段是在線執(zhí)行的。模型進(jìn)行訓(xùn)練的頻率要比推理少得多——推理的時(shí)間規(guī)模雖然在不斷變化,但一般在幾天左右。訓(xùn)練也需要相當(dāng)長(zhǎng)的時(shí)間來完成,通常是幾個(gè)小時(shí)或幾天。同時(shí),根據(jù)產(chǎn)品實(shí)際需求不同,在線推理階段每天可能運(yùn)行達(dá)數(shù)十萬次,而且一般需要實(shí)時(shí)進(jìn)行。在某些情況下,特別是對(duì)于推薦系統(tǒng),還需要以這樣連續(xù)的方式在線進(jìn)行額外的訓(xùn)練。在Facebook,機(jī)器學(xué)習(xí)的一個(gè)顯著特征就是有可用于模型訓(xùn)練的海量數(shù)據(jù)。這個(gè)數(shù)據(jù)的規(guī)模會(huì)帶來很多涉及到整個(gè)機(jī)器學(xué)習(xí)架構(gòu)的影響。使用機(jī)器學(xué)習(xí)的主要服務(wù)消息推送消息推送排名算法能夠使用戶在每次訪問Facebook時(shí),最先看到對(duì)他們來講最重要的事情。一般模型會(huì)通過訓(xùn)練來確定影響內(nèi)容排序的各種用戶和環(huán)境因素。之后,當(dāng)用戶訪問Facebook時(shí),該模型會(huì)從數(shù)千個(gè)候選中生成一個(gè)最佳推送,它是一個(gè)圖像和其他內(nèi)容的個(gè)性化集合,以及所選內(nèi)容的最佳排序。廣告廣告系統(tǒng)利用機(jī)器學(xué)習(xí)來確定向特定用戶顯示什么樣的廣告。通過對(duì)廣告模型進(jìn)行訓(xùn)練,我們可以了解用戶特征,用戶上下文,以前的互動(dòng)和廣告屬性,進(jìn)而學(xué)習(xí)預(yù)測(cè)用戶在網(wǎng)站上最可能點(diǎn)擊的廣告。之后,當(dāng)用戶訪問Facebook時(shí),我們將輸入傳遞進(jìn)訓(xùn)練好的模型運(yùn)行,就能立馬確定要顯示哪些廣告。搜索搜索會(huì)針對(duì)各種垂直類型(例如,視頻,照片,人物,活動(dòng)等)啟動(dòng)一系列特定的子搜索進(jìn)程。分類器層在各類垂直類型的搜索之前運(yùn)行,以預(yù)測(cè)要搜索的是垂直類型中的哪一個(gè),否則這樣的垂直類型搜索將是無效的。分類器本身和各種垂直搜索都包含一個(gè)訓(xùn)練的離線階段,和一個(gè)運(yùn)行模型并執(zhí)行分類和搜索功能的在線階段。SigmaSigma是一個(gè)分類和異常檢測(cè)通用框架,用于監(jiān)測(cè)各種內(nèi)部應(yīng)用,包括站點(diǎn)的完整性,垃圾郵件檢測(cè),支付,注冊(cè),未經(jīng)授權(quán)的員工訪問以及事件推薦。Sigma包含了在生產(chǎn)中每天都要運(yùn)行的數(shù)百個(gè)不同的模型,并且每個(gè)模型都會(huì)被訓(xùn)練來檢測(cè)異?;蚋话愕胤诸悆?nèi)容。LumosLumos能夠從圖像及其內(nèi)容中提取出高級(jí)屬性和映射關(guān)系,使算法能夠自動(dòng)理解它們。這些數(shù)據(jù)可以用作其他產(chǎn)品和服務(wù)的輸入,比如通過文本的形式。FacerFacer是Facebook的人臉檢測(cè)和識(shí)別框架。給定一張圖像,它首先會(huì)尋找該圖像中所有的人臉。然后通過運(yùn)行針對(duì)特定用戶的人臉識(shí)別算法,來確定圖中的人臉是否是該用戶的好友。Facebook通過該服務(wù)為用戶推薦想要在照片中標(biāo)記的好友。語(yǔ)言翻譯語(yǔ)言翻譯是涉及Facebook內(nèi)容的國(guó)際化交流的服務(wù)。Facebook支持超過45種語(yǔ)言之間的源語(yǔ)言或目標(biāo)語(yǔ)言翻譯,這意味著Facebook支持2000多個(gè)翻譯方向,比如英語(yǔ)到西班牙語(yǔ),阿拉伯語(yǔ)到英語(yǔ)。通過這2000多個(gè)翻譯通道,F(xiàn)acebook每天提供4.5B字的翻譯服務(wù),通過翻譯用戶的消息推送,F(xiàn)acebook每天可為全球6億人減輕語(yǔ)言障礙。目前,每種語(yǔ)言對(duì)方向都有其自己的模型,但是我們也正在考慮多語(yǔ)言模型[6]。語(yǔ)音識(shí)別語(yǔ)音識(shí)別是將音頻流轉(zhuǎn)換成文本的服務(wù)。它可以為視頻自動(dòng)填補(bǔ)字幕。目前,大部分流媒體都是英文的,但在未來其他語(yǔ)言的識(shí)別也將得到支持。另外,非語(yǔ)言的音頻文件也可以用類似的系統(tǒng)(更簡(jiǎn)單的模型)來檢測(cè)。除了上面提到的主要產(chǎn)品之外,還有更多的長(zhǎng)尾服務(wù)也利用了各種形式的機(jī)器學(xué)習(xí)。 Facebook產(chǎn)品和服務(wù)的長(zhǎng)尾數(shù)量達(dá)數(shù)百個(gè)。機(jī)器學(xué)習(xí)模型所有基于機(jī)器學(xué)習(xí)的服務(wù)都使用“特征”(或輸入)來產(chǎn)生量化的輸出。Facebook使用的機(jī)器學(xué)習(xí)算法包括Logistic回歸(LR),支持向量機(jī)(SVM),梯度提升決策樹(GBDT)和深度神經(jīng)網(wǎng)絡(luò)(DNN)。LR和SVM在訓(xùn)練和預(yù)測(cè)方面非常有效。GBDT可以通過增加計(jì)算資源來提高準(zhǔn)確性。DNN是最具表達(dá)力的,能夠提供最高的準(zhǔn)確性,但利用的資源也是最多的(在計(jì)算量上,至少比LR和SVM等線性模型高出一個(gè)數(shù)量級(jí))。這三種模型的自由參數(shù)都在變得越來越多,必須通過使用帶標(biāo)簽的輸入示例來優(yōu)化預(yù)測(cè)的準(zhǔn)確性。在深度神經(jīng)網(wǎng)絡(luò)中,有三類經(jīng)常使用的網(wǎng)絡(luò):多層感知器(MLP),卷積神經(jīng)網(wǎng)絡(luò)(CNN)和遞歸神經(jīng)網(wǎng)絡(luò)(RNN
/ LSTM)。MLP網(wǎng)絡(luò)通常運(yùn)行在結(jié)構(gòu)化輸入特征(通常是排名)上,RNN /
LSTM網(wǎng)絡(luò)一般用來處理時(shí)域的數(shù)據(jù),即用作序列處理器(通常是語(yǔ)言處理),相對(duì)的CNNs則是一種處理用來空間數(shù)據(jù)的工具(通常是圖像處理)。表I顯示了這些機(jī)器學(xué)習(xí)模型類型和產(chǎn)品/服務(wù)之間的映射關(guān)系。????表1 利用機(jī)器學(xué)習(xí)算法的產(chǎn)品或服務(wù)Facebook中的ML-as-a-Service為了簡(jiǎn)化在產(chǎn)品中應(yīng)用機(jī)器學(xué)習(xí)的任務(wù),我們構(gòu)建了一些內(nèi)部平臺(tái)和工具包,包括FBLearner,Caffe2和PyTorch。FBLearner是三種工具(FBLearner
Feature Store,F(xiàn)BLearner Flow,F(xiàn)BLearner
Predictor)的套裝,其中每種工具分別負(fù)責(zé)機(jī)器學(xué)習(xí)管道上不同的部分。正如前面圖1顯示的那樣,它利用了一種內(nèi)部作業(yè)調(diào)度程序在GPU和CPU的共享資源池上分配資源和調(diào)度作業(yè)。Facebook大多數(shù)機(jī)器學(xué)習(xí)模型的訓(xùn)練過程都是在FBLearner平臺(tái)上進(jìn)行的。這些工具和平臺(tái)被設(shè)計(jì)來幫助機(jī)器學(xué)習(xí)工程師提高效率,從而能夠?qū)W⒂谒惴▌?chuàng)新。FBLearner
Feature Store。任何機(jī)器學(xué)習(xí)建模任務(wù)的起點(diǎn)是收集和生成特征。 FBLearner Feature
Store本質(zhì)上是一系列特征生成器的目錄,其特征生成器可以用于訓(xùn)練和實(shí)時(shí)預(yù)測(cè),當(dāng)然它也可以作為多個(gè)團(tuán)隊(duì)可以用來共享和尋找特征的公共空間(market
place)。這樣以個(gè)特征列表對(duì)于剛開始使用機(jī)器學(xué)習(xí)的團(tuán)隊(duì)來說是一個(gè)很好的平臺(tái),同時(shí)也有助于在現(xiàn)有模型中應(yīng)用新特征。FBLearner
Flow是Facebook用于訓(xùn)練模型的機(jī)器學(xué)習(xí)平臺(tái)。Flow是一個(gè)管道管理系統(tǒng),它會(huì)執(zhí)行一個(gè)可以描述模型訓(xùn)練和/或評(píng)估所需步驟及其所需資源的工作流程(workflow)。這個(gè)工作流程由離散單元或操作符(operators)構(gòu)成,每個(gè)單元都有輸入和輸出。操作符之間的連接會(huì)通過跟蹤一個(gè)操作符到下一個(gè)操作符的數(shù)據(jù)流自動(dòng)推理,F(xiàn)low則通過處理調(diào)度和資源管理來執(zhí)行工作流程。Flow還擁有一個(gè)可以用于實(shí)驗(yàn)管理的工具和一個(gè)簡(jiǎn)單的用戶界面,這個(gè)界面可以跟蹤每個(gè)workflow或?qū)嶒?yàn)生成的所有構(gòu)件和指標(biāo),從而方便對(duì)比和管理這些實(shí)驗(yàn)。FBLearner
Predictor是Facebook內(nèi)部的推理引擎,它可以使用在Flow中訓(xùn)練的模型來提供實(shí)時(shí)的預(yù)測(cè)。Predictor可以用作多租戶服務(wù),也可以用作集成在特定產(chǎn)品的后端服務(wù)中的庫(kù)。Facebook的很多產(chǎn)品團(tuán)隊(duì)都在使用Predictor,而其中許多團(tuán)隊(duì)都需要低延遲解決方案。Flow和Predictor之間的直接集成還有助于運(yùn)行在線的實(shí)驗(yàn)以及在生產(chǎn)中管理多個(gè)版本的模型。深度學(xué)習(xí)框架我們?cè)贔acebook上利用了兩種截然不同的協(xié)同框架來進(jìn)行深度學(xué)習(xí):針對(duì)研究?jī)?yōu)化的PyTorch和針對(duì)生產(chǎn)優(yōu)化的Caffe2。Caffe2是Facebook的內(nèi)部生產(chǎn)框架,它用于訓(xùn)練和部署大規(guī)模的機(jī)器學(xué)習(xí)模型。Caffe2專注于產(chǎn)品所需的幾個(gè)關(guān)鍵特性:性能,跨平臺(tái)支持和基本的機(jī)器學(xué)習(xí)算法,如卷積神經(jīng)網(wǎng)絡(luò)(CNN),遞歸神經(jīng)網(wǎng)絡(luò)(RNN)和多層感知器(MLP)。這些網(wǎng)絡(luò)都具有稀疏或密集的連接以及高達(dá)數(shù)百億的參數(shù)。該框架的設(shè)計(jì)采用模塊化方法,在所有后端實(shí)現(xiàn)(CPU,GPU和加速器)之間共享統(tǒng)一的圖表示。為了在不同平臺(tái)上實(shí)現(xiàn)最佳的運(yùn)行時(shí)間,Caffe2還抽象了包括cuDNN,MKL和Meta在內(nèi)的第三方庫(kù)。PyTorch是Facebook在AI研究領(lǐng)域的首選框架。它的前端注重靈活性、調(diào)試以及動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò),能夠快速進(jìn)行實(shí)驗(yàn)。由于依賴于Python來執(zhí)行,它并沒有針對(duì)生產(chǎn)和移動(dòng)端部署進(jìn)行優(yōu)化。當(dāng)研究項(xiàng)目產(chǎn)生了有價(jià)值的結(jié)果時(shí),模型就需要轉(zhuǎn)移到生產(chǎn)上。過去,在生產(chǎn)環(huán)境中,我們通過使用其他框架重寫產(chǎn)品環(huán)境的訓(xùn)練管道來完成模型轉(zhuǎn)移。最近Facebook開始構(gòu)建ONNX工具鏈來簡(jiǎn)化這個(gè)轉(zhuǎn)移過程。比如,動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò)雖然被用于尖端的人工智能研究,但這些模型需要更長(zhǎng)的時(shí)間才能被應(yīng)用于產(chǎn)品中。通過解耦框架,我們避免了的為滿足性能而設(shè)計(jì)更復(fù)雜的執(zhí)行引擎(比如Caffe2)的需求。此外,相比模型速度,研究人員在進(jìn)行研究時(shí)更看重其靈活性。舉個(gè)栗子,在模型探索階段,性能下降30%是可以容忍的,尤其是在它具有易測(cè)驗(yàn)和模型可視化的優(yōu)點(diǎn)時(shí)。但是相同的方法并不適合于生產(chǎn)。這種取舍原則在PyTorch和Caffe2的框架設(shè)計(jì)中也可以看到,PyTorch提供了良好的默認(rèn)參數(shù)和合理的性能,而Caffe2可以選擇使用異步圖執(zhí)行,量化權(quán)重和多個(gè)專用后端等特性來達(dá)到最佳性能。雖然FBLearner平臺(tái)本身不限制使用什么框架,無論是Caffe2,TensorFlow,PyTorch還是其他的框架都可以,但我們的AI軟件平臺(tái)(AI
Software
Platform)團(tuán)隊(duì)為了讓FBLearner能夠很好地與Caffe2集成還是進(jìn)行了特定優(yōu)化??偟膩碚f,分離研究和生產(chǎn)框架(分別是PyTorch和Caffe2)使我們能夠在兩邊靈活運(yùn)作,減少約束數(shù)量的同時(shí)還能增加新特性。ONNX. 深度學(xué)習(xí)工具生態(tài)系統(tǒng)在整個(gè)行業(yè)還處于初級(jí)階段。
對(duì)于不同的問題子集,不同的工具有著不同的優(yōu)勢(shì),并且在靈活性,性能和支持平臺(tái)方面有著不同的折衷,這就跟我們之前對(duì)PyTorch和Caffe2所描述的權(quán)衡一樣。
因此,在不同的框架或平臺(tái)之間交換訓(xùn)練模型的需求很大。
為了彌補(bǔ)這個(gè)缺陷,2017年末,F(xiàn)acebook與幾個(gè)合作伙伴共同推出了開放式神經(jīng)網(wǎng)絡(luò)交換(Open Neural Network
Exchange , ONNX)。ONNX是一種以標(biāo)準(zhǔn)方式表示深度學(xué)習(xí)模型的格式,以便在不同的框架和供應(yīng)商優(yōu)化庫(kù)之間實(shí)現(xiàn)互操作。同時(shí),它能滿足在不同的框架或平臺(tái)之間交換訓(xùn)練好的模型的需求。ONNX被設(shè)計(jì)為一種開放的規(guī)范,允許框架作者和硬件供應(yīng)商為其做出貢獻(xiàn),并擁有框架和庫(kù)之間的各種轉(zhuǎn)換器。Facebook正在努力使ONNX成為所有這些工具之間的協(xié)作伙伴,而不是一種具有排他性的官方標(biāo)準(zhǔn)。在Facebook內(nèi)部,ONNX是我們將研究模型從PyTorch環(huán)境轉(zhuǎn)移到Caffe2中的高性能生產(chǎn)環(huán)境的主要手段,它可以實(shí)現(xiàn)對(duì)模型的自動(dòng)捕捉和固定部分的轉(zhuǎn)換。在Facebook內(nèi)部,ONNX是我們將研究模型從PyTorch環(huán)境轉(zhuǎn)移到Caffe2中的高性能生產(chǎn)環(huán)境的主要手段。
ONNX提供了自動(dòng)捕捉和轉(zhuǎn)換模型的靜態(tài)部分的能力。 我們有一個(gè)額外的工具鏈,通過將它們映射到Caffe2中的控制流原函數(shù)或者以C
++作為自定義操作符重新實(shí)現(xiàn)它們,會(huì)有助于將模型從Python轉(zhuǎn)移到動(dòng)態(tài)圖。機(jī)器學(xué)習(xí)的資源需求鑒于機(jī)器學(xué)習(xí)在訓(xùn)練和推理(inference)的階段的資源要求、頻率和持續(xù)時(shí)長(zhǎng)不同,我們將分別討論這兩個(gè)階段的細(xì)節(jié)和資源應(yīng)用。Facebook硬件資源概況Facebook的基礎(chǔ)架構(gòu)部門(Facebook Infrastructure)很早之前就開始為主要軟件服務(wù)構(gòu)建的高效平臺(tái),包括針對(duì)每種主要工作負(fù)載的資源要求定制的服務(wù)器、存儲(chǔ)以及網(wǎng)絡(luò)支持。????圖2 基于CPU的計(jì)算服務(wù)器。單插槽服務(wù)器底座上有4個(gè)Monolake服務(wù)器卡,雙插槽服務(wù)器底座還一個(gè)雙插槽服務(wù)器,因此在2U機(jī)箱中共有三個(gè)雙插槽服務(wù)器。所以在2U形式的組合中共有12個(gè)服務(wù)器。當(dāng)前Facebook提供約八種主要的計(jì)算和存儲(chǔ)架構(gòu),對(duì)應(yīng)八種主要服務(wù)。這些主要架構(gòu)類型足以滿足Facebook主要服務(wù)的資源要求。例如,圖2中展示了一個(gè)可以容納三個(gè)計(jì)算Sleds模塊的2U機(jī)架,這些模塊可支持兩種服務(wù)器類型。其中一種Sled模塊是單插槽CPU服務(wù)器(1xCPU),多用于Web層——一種主要看重吞吐量的無狀態(tài)服務(wù),因此可以使用能效更高的CPU(Broadwell-D處理器);它的DRAM(32GB)以及主板硬盤或閃存較少。另一種Sled模塊是較大的雙插槽CPU服務(wù)器(2x高功率Broadwell-EP或Skylake SP CPU),它配有大量的DRAM ,常用于涉及大量計(jì)算和存儲(chǔ)的服務(wù)。??圖3. 搭載8個(gè)GPU的Big Basin GPU服務(wù)器(3U機(jī)架)由于我們訓(xùn)練的神經(jīng)網(wǎng)絡(luò)越來越大,并且越來越深,我們開發(fā)出了Big
Basin GPU服務(wù)器(如圖3所示),這是我們2017年最新的GPU服務(wù)器。最初的Big Basin
GPU服務(wù)器配置了八個(gè)互相連接的NVIDIA Tesla P100 GPU加速器,它使用NVIDIA
NVLink形成了一個(gè)八CPU混合立方網(wǎng)格,后來,這種設(shè)計(jì)經(jīng)過改進(jìn)之后又應(yīng)用到了V100 GPU上。Big Basin是早前的Big Sur GPU的繼承者,后者是Facebook數(shù)據(jù)中心首個(gè)廣泛應(yīng)用的高性能AI計(jì)算平臺(tái),用于支持于2015年開發(fā)并通過開放計(jì)算項(xiàng)目(Open Compute Project)發(fā)布的NVIDIA M40 GPU。與Big
Sur相比,V100 Big Basin每瓦電可實(shí)現(xiàn)的性能更高,這得益于單精度浮點(diǎn)運(yùn)算單元——每個(gè)GPU的運(yùn)算速度從7
teraflops(每秒萬億次浮點(diǎn)運(yùn)算)增加到了15.7
teraflops,以及可提供900GB/s的帶寬的高帶寬顯存(HBM2)。這種新的架構(gòu)還使得半精度運(yùn)算的速度快了一倍,進(jìn)一步提高了運(yùn)算吞吐量。由于Big
Basin的運(yùn)算吞吐量更大,而且顯存也從12 GB增加到了16
GB,因此它可以用來訓(xùn)練比先前模型大30%的模型。高帶寬NVLink互連GPU通信還強(qiáng)化了分布式訓(xùn)練。在使用ResNet-50圖像分類模型進(jìn)行的測(cè)試中,Big
Basin的運(yùn)算吞吐量比Big Sur要高出300%,借助它我們可以以更快的速度訓(xùn)練比以往更復(fù)雜的模型。Facebook通過開放計(jì)算項(xiàng)目(Open Compute Project)公布了所有這些計(jì)算服務(wù)器的設(shè)計(jì)以及幾種存儲(chǔ)平臺(tái)。離線訓(xùn)練的資源需求當(dāng)前,不同的產(chǎn)品會(huì)使用不同的計(jì)算資源來完成各自的離線訓(xùn)練步驟。有些產(chǎn)品(例如Lumos)在GPU上完成所有的訓(xùn)練。其他產(chǎn)品(例如Sigama)則在雙插槽
CPU計(jì)算服務(wù)器完成所有的訓(xùn)練。諸如Facer這樣的產(chǎn)品采用雙階段訓(xùn)練流程,先在GPU上以很小的頻率(幾個(gè)月一次)隊(duì)通用的面部檢測(cè)和識(shí)別模型進(jìn)行訓(xùn)練,然后在數(shù)千個(gè)1xCPU服務(wù)器上以很高的頻率對(duì)每個(gè)用戶的模型進(jìn)行特定訓(xùn)練。在本部分,我們將圍繞機(jī)器學(xué)習(xí)訓(xùn)練平臺(tái)、訓(xùn)練頻率和持續(xù)時(shí)長(zhǎng),具體介紹多種服務(wù)的細(xì)節(jié),并在表II中進(jìn)行了總結(jié)。另外,我們還討論了數(shù)據(jù)集的趨勢(shì)以及這些趨勢(shì)對(duì)計(jì)算、內(nèi)存、存儲(chǔ)和網(wǎng)絡(luò)架構(gòu)的意義。計(jì)算類型和相對(duì)數(shù)據(jù)來源的位置。離線訓(xùn)練既可以在CPU上完成,也可以在GPU上完成,這取決于服務(wù)本身。雖然在多數(shù)情況下,在GPU上訓(xùn)練出的模型在性能上要比在CPU上訓(xùn)練的模型好,但是CPU強(qiáng)大的現(xiàn)成運(yùn)算能力使得它成為了一個(gè)非常有用的平臺(tái)。這一點(diǎn)在每天的非高峰期中尤為明顯,因?yàn)樵谶@期間CPU資源本來就無法得到利用,后面的圖4會(huì)對(duì)此進(jìn)行說明。下面我們給出了服務(wù)和計(jì)算資源訓(xùn)練模型的對(duì)應(yīng)關(guān)系:在GPU上訓(xùn)練模型的服務(wù): Lumos、語(yǔ)音識(shí)別、語(yǔ)言翻譯在CPU上訓(xùn)練模型的服務(wù):News Feed、Sigma在GPU和CPU上訓(xùn)練模型的服務(wù):Facer
(在GPU上每幾年訓(xùn)練一次的通用模型,此類模型較為穩(wěn)定;在1xCPU上訓(xùn)練的用戶特定的模型,此類模型可以用于處理新圖像數(shù)據(jù))、搜索(利用多個(gè)獨(dú)立的垂直搜索引擎,使用可以進(jìn)行預(yù)測(cè)的分類器啟動(dòng)最合適的垂直搜索引擎)。目前,GPU主要被用于離線訓(xùn)練,而不是向用戶提供實(shí)時(shí)數(shù)據(jù)。因?yàn)榇蠖鄶?shù)GPU架構(gòu)都針對(duì)運(yùn)算吞吐量進(jìn)行了優(yōu)化,以克服延遲劣勢(shì)。同時(shí)由于訓(xùn)練過程嚴(yán)重依賴從大型數(shù)據(jù)生成庫(kù)中獲取的數(shù)據(jù),考慮到性能和帶寬方面的原因,GPU必須靠近數(shù)據(jù)來源。由于訓(xùn)練模型所使用的數(shù)據(jù)量增長(zhǎng)的相當(dāng)快,GPU是否靠近數(shù)據(jù)來源變得越來越重要。內(nèi)存、存儲(chǔ)和網(wǎng)絡(luò):從內(nèi)存儲(chǔ)器容量的角度看,CPU和GPU平臺(tái)都能為訓(xùn)練提供充足的存儲(chǔ)容量。即使對(duì)于Facer這樣的應(yīng)用,也可以在1xCPU上用32GB RAM訓(xùn)練用戶特定的SVM模型。如果可以盡可能地利用高效平臺(tái)以及多余的存儲(chǔ)容量,則平臺(tái)的總體訓(xùn)練效率會(huì)非常優(yōu)秀。表II 不同服務(wù)的離線訓(xùn)練的頻率、持續(xù)時(shí)長(zhǎng)和資源機(jī)器學(xué)習(xí)系統(tǒng)依賴于使用實(shí)例數(shù)據(jù)的訓(xùn)練。Facebook 使用了機(jī)器學(xué)習(xí)數(shù)據(jù)管道中的大量數(shù)據(jù)。這使得計(jì)算資源趨向于靠近數(shù)據(jù)庫(kù)。隨著時(shí)間的推移,大多數(shù)服務(wù)會(huì)顯示出利用累積的用戶數(shù)據(jù)的趨勢(shì),這將導(dǎo)致這些服務(wù)更加依賴Facebook的其他服務(wù),并且需要更大的網(wǎng)絡(luò)帶寬來獲取數(shù)據(jù)。因此,只有在數(shù)據(jù)源所在地或附近部署巨大的存儲(chǔ),以便從偏遠(yuǎn)的區(qū)域大規(guī)模轉(zhuǎn)移數(shù)據(jù),從而避免為了等待獲取更多樣本數(shù)據(jù)而關(guān)停訓(xùn)練管道。在部署訓(xùn)練機(jī)器的位置時(shí),我們也可以使用這種方法來避免訓(xùn)練機(jī)群給附近的存儲(chǔ)資源造成過大的壓力。不同的服務(wù)在離線訓(xùn)練期間使用的數(shù)據(jù)量有很大的差別。幾乎所有服務(wù)的訓(xùn)練數(shù)據(jù)集都呈現(xiàn)出持續(xù)增長(zhǎng)甚至大幅增長(zhǎng)的趨勢(shì)。例如,有些服務(wù)在ROI降低之前會(huì)使用數(shù)百萬行數(shù)據(jù),其他服務(wù)則使用數(shù)百億行數(shù)據(jù)(100多TB),并且只受到資源的限制。 擴(kuò)展(Scaling)考慮和分布式訓(xùn)練:訓(xùn)練神經(jīng)網(wǎng)絡(luò)的過程包含使用隨機(jī)梯度下降法(SGD)對(duì)參數(shù)權(quán)重進(jìn)行優(yōu)化。這種方法用于擬合神經(jīng)網(wǎng)絡(luò),通過評(píng)價(jià)標(biāo)記實(shí)例的小子集(即“batch”
或“mini-batch”)來迭代更新權(quán)重。在數(shù)據(jù)并行中,網(wǎng)絡(luò)會(huì)生成多個(gè)模型副本(并行實(shí)例),以并行的處理多批數(shù)據(jù)。當(dāng)使用一臺(tái)機(jī)器訓(xùn)練模型時(shí),模型越大或更深都會(huì)帶來更好的訓(xùn)練效果,準(zhǔn)確度也會(huì)更高,但是訓(xùn)練此類模型往往需要處理更多的樣本。當(dāng)使用一臺(tái)機(jī)器進(jìn)行訓(xùn)練時(shí),我們可以通過增加模型副本的數(shù)量并在多個(gè)GPU上執(zhí)行數(shù)據(jù)并行,來最大化訓(xùn)練效果。當(dāng)訓(xùn)練所需的數(shù)據(jù)量隨時(shí)間增加,硬件限制會(huì)導(dǎo)致總體訓(xùn)練延遲和收斂時(shí)間增加。不過,我們可以使用分布式訓(xùn)練來克服這些硬件限制,減少延遲。這個(gè)研究領(lǐng)域在Facebook和整個(gè)AI研究界相當(dāng)熱門。一種普遍的假設(shè)是,在不同機(jī)器上實(shí)現(xiàn)數(shù)據(jù)并行需要使用一種專門的互連機(jī)制。但是,在我們對(duì)分布式訓(xùn)練的研究中,我們發(fā)現(xiàn)基于以太網(wǎng)(Ethernet)的網(wǎng)絡(luò)就可以提供近似線性的擴(kuò)展能力。能否實(shí)現(xiàn)近似線性的擴(kuò)展,與模型的大小和網(wǎng)絡(luò)帶寬有密切的關(guān)系。如果網(wǎng)絡(luò)帶寬太小,執(zhí)行參數(shù)同步所花的時(shí)間比執(zhí)行梯度計(jì)算所花的時(shí)間還多,在不同機(jī)器上進(jìn)行數(shù)據(jù)并行所帶來的優(yōu)勢(shì)也會(huì)大打折扣。使用50G的以太網(wǎng)NIC,我們可以用Big Basin服務(wù)器擴(kuò)展視覺模型的訓(xùn)練,而且機(jī)器間的同步完全不會(huì)造成問題。在所有情況下,更新都需要使用同步(每個(gè)副本都看到相同狀態(tài)),一致性(每個(gè)副本生成正確更新)和性能(子線性縮放)的技術(shù)來與其他副本共享,這可能會(huì)影響訓(xùn)練質(zhì)量。
例如,翻譯服務(wù)目前就不能在不降低模型質(zhì)量的情況下進(jìn)行大批量的小批量(mini-batches)訓(xùn)練。相反,如果使用特定的超參數(shù)設(shè)置,我們就可以在非常大的mini-batch數(shù)據(jù)集上訓(xùn)練圖像分類模型,并且可以擴(kuò)展到256個(gè)以上的GPU上。實(shí)驗(yàn)證明,在Facebook的某個(gè)大型服務(wù)中,在5倍的機(jī)器上執(zhí)行數(shù)據(jù)并行可以實(shí)現(xiàn)4倍的訓(xùn)練效率(例如:訓(xùn)練一組訓(xùn)練時(shí)間超過4天的模型,以前總共可以訓(xùn)練100個(gè)不同模型的機(jī)器集群現(xiàn)在每天只能訓(xùn)練同樣的20個(gè)模型,訓(xùn)練效率降低了20%,但是潛在的工程進(jìn)度等待時(shí)間從4天減少到了1天)。如果模型變得超級(jí)大,這時(shí)候就可以使用并行訓(xùn)練,對(duì)模型的層進(jìn)行分組和分布,以優(yōu)化訓(xùn)練效率,各機(jī)器間可以傳遞激活單元。優(yōu)化可能與網(wǎng)絡(luò)帶寬、延遲或平衡內(nèi)部機(jī)器限制有關(guān)。這會(huì)增加模型的端對(duì)端延遲,因此,每一時(shí)步(time
step)內(nèi)原始性能的增強(qiáng)通常與步長(zhǎng)(step)質(zhì)量的下降有關(guān)。這可能會(huì)進(jìn)一步降低模型在每個(gè)步長(zhǎng)的準(zhǔn)確度。各步長(zhǎng)準(zhǔn)確度的下降最終會(huì)累積起來,這樣我們就可以得出并行處理的最佳步長(zhǎng)數(shù)量。DNN模型本身的設(shè)計(jì)使得它只能在一臺(tái)機(jī)器上運(yùn)行,在推理階段,在機(jī)器間分割模型圖通常會(huì)導(dǎo)致機(jī)器與機(jī)器進(jìn)行大量的溝通。但是Facebook的主要服務(wù)會(huì)不斷地權(quán)衡擴(kuò)展模型的利與弊。這些考慮可以決定網(wǎng)絡(luò)容量需求的變化。表 III 在線推理服務(wù)的資源要求在線推理的資源需求在完成離線訓(xùn)練之后的線推理步驟中,我們需要將模型載入到機(jī)器中,使用實(shí)時(shí)輸入運(yùn)行模型來生成網(wǎng)站流量的實(shí)時(shí)結(jié)果。接下來我們將討論,一種實(shí)際應(yīng)用中的在線推理模型——廣告排名模型。這種模型可以篩選成千上萬條廣告,在消息推送中顯示排在1至5名的廣告。這個(gè)過程是通過對(duì)依次減小的廣告子集進(jìn)行逐步復(fù)雜的排名運(yùn)算循環(huán)(passes)來實(shí)現(xiàn)的。每一輪運(yùn)算都會(huì)用到類似于多層感知模型(MLP)的模型,這種模型包含稀疏嵌入層,每一輪運(yùn)算都會(huì)縮小廣告的數(shù)量。稀疏嵌入層需要大量的內(nèi)存,因此當(dāng)進(jìn)行到靠后的運(yùn)算時(shí),模型的超參數(shù)數(shù)量更多,它將在獨(dú)立于MLP運(yùn)算輪的一個(gè)服務(wù)器上運(yùn)行。從計(jì)算的角度上看,絕大多數(shù)在線推理都是在大量1xCPU(單插槽)或2xCPU(雙插槽)上運(yùn)行的。由于1xCPU對(duì)Facebook的服務(wù)而言性能更高,而且性價(jià)比更高,因此Facebook提倡盡可能使用1xCPU服務(wù)器訓(xùn)練模型。隨著高性能移動(dòng)硬件的誕生,F(xiàn)acebook甚至可以在用戶的移動(dòng)設(shè)備上直接運(yùn)行某些模型,來改進(jìn)延遲和降低通信成本。但是,某些需要大量計(jì)算和內(nèi)存資源的服務(wù)仍然需要使用2xCPU才能實(shí)現(xiàn)最佳性能。不同的產(chǎn)品在得出在線推理的結(jié)果時(shí)擁有不同的延遲要求。在某些情況下,得出的數(shù)據(jù)可能“十分優(yōu)秀”
,也可能會(huì)在向用戶返回初步快速評(píng)估后被重新輸入到模型中。例如,在某些情況中將某個(gè)內(nèi)容分類為合格是可以接受的,但是當(dāng)運(yùn)行更加復(fù)雜的模型時(shí)這個(gè)初步的分類結(jié)果就會(huì)被推翻。廣告排名和消息推送之類的模型配置有穩(wěn)定的SLA,可以向用戶推送合適的內(nèi)容。這些SLA決定著模型的復(fù)雜性和依賴性,因此如果擁有更加強(qiáng)大的計(jì)算能力,我們就可以訓(xùn)練出更加先進(jìn)的模型。機(jī)器學(xué)習(xí)數(shù)據(jù)計(jì)算除了資源需求外,在數(shù)據(jù)中心部署機(jī)器學(xué)習(xí)時(shí)還需要考慮一些重要的因素,包括對(duì)重要數(shù)據(jù)的需求以及面對(duì)自然災(zāi)害的可靠性。從獲取數(shù)據(jù)到模型Facebook公司的許多機(jī)器學(xué)習(xí)模型,成功的主要因素就是廣泛而高質(zhì)量的可用數(shù)據(jù)??焖偬幚聿⑦@些數(shù)據(jù)提供給機(jī)器學(xué)習(xí)模型的能力能夠確保我們部署快速有效的離線訓(xùn)練。對(duì)于復(fù)雜的機(jī)器學(xué)習(xí)應(yīng)用程序,如廣告和排名,每個(gè)訓(xùn)練任務(wù)所需的數(shù)據(jù)量都超過數(shù)百TB大小。此外,復(fù)雜的預(yù)處理邏輯的使用能確保數(shù)據(jù)被清理并歸一化,以便高效地遷移和更輕松地學(xué)習(xí)。這些操作對(duì)資源的要求非常高,特別對(duì)存儲(chǔ)量,網(wǎng)絡(luò)和CPU的需求。作為一個(gè)通用的解決方案,我們嘗試對(duì)訓(xùn)練工作量中的數(shù)據(jù)進(jìn)行解耦。這兩個(gè)工作量都有非常顯著的特點(diǎn)。一方面,它非常復(fù)雜,具有臨時(shí)的,依賴業(yè)務(wù)性的,且變化快等特點(diǎn)。另一方面,訓(xùn)練工作量通常是固定的(例如GEMM),穩(wěn)定的(核心業(yè)務(wù)相對(duì)較少),高度優(yōu)化,且更偏愛于“干凈”的環(huán)境下工作(例如,獨(dú)占高速緩存使用和最小線程爭(zhēng)奪)。為了優(yōu)化這兩者,我們?cè)谖锢砩蠈?duì)不同的機(jī)器的不同工作負(fù)載進(jìn)行隔離。數(shù)據(jù)處理機(jī)器,又名“readers”,從存儲(chǔ)器中讀取數(shù)據(jù),處理和壓縮它們,然后將結(jié)果反饋給一個(gè)叫做“trainers”的訓(xùn)練機(jī)器。另一方面,trainers只專注于快速有效地執(zhí)行任務(wù)。readers和trainers可以分布以便提供更靈活性和可擴(kuò)展性的應(yīng)用。此外,我們還優(yōu)化了不同工作負(fù)荷的機(jī)器配置。另一個(gè)重要的優(yōu)化指標(biāo)是網(wǎng)絡(luò)使用。訓(xùn)練過程產(chǎn)生的數(shù)據(jù)流量非常重要的,并且有時(shí)候會(huì)突然產(chǎn)生。如果沒有智能化處理的話,這很容易就會(huì)導(dǎo)致網(wǎng)絡(luò)設(shè)備的飽和,甚至干擾到其他服務(wù)。為了解決這些問題,我們采用壓縮優(yōu)化,調(diào)度算法,數(shù)據(jù)/計(jì)算布局等等操作。??利用規(guī)模作為一家為用戶提供服務(wù)的全球性公司,F(xiàn)acebook必須保持大量服務(wù)器的設(shè)計(jì)能夠滿足在任何時(shí)間段內(nèi)的峰值工作負(fù)載。如圖所示,由于用戶活動(dòng)的變化取決于日常負(fù)荷以及特殊事件(例如地區(qū)節(jié)假日)期間的峰值,因此大量的服務(wù)器在特定的時(shí)間段內(nèi)通常是閑置的。這就釋放了非高峰時(shí)段內(nèi)大量可用的計(jì)算資源。利用這些可能的異構(gòu)資源,以彈性方式合理分配給各種任務(wù)。這是Facebook目前正努力探索的一大機(jī)會(huì)。對(duì)于機(jī)器學(xué)習(xí)應(yīng)用程序,這提供了將可擴(kuò)展的分布式訓(xùn)練機(jī)制的優(yōu)勢(shì)應(yīng)用到大量的異構(gòu)資源(例如具有不同RAM分配的CPU和GPU平臺(tái))的機(jī)會(huì)。但是,這也會(huì)帶來一些挑戰(zhàn)。在這些低利用率的時(shí)期,大量可用的計(jì)算資源將從根本上導(dǎo)致分布式訓(xùn)練方法的不同。調(diào)度程序首先必須正確地平衡跨越異構(gòu)硬件的負(fù)載,這樣主機(jī)就不必為了同步性而等待其他進(jìn)程的執(zhí)行。當(dāng)訓(xùn)練跨越多個(gè)主機(jī)時(shí),調(diào)度程序還必須要考慮網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)和同步所需的成本。如果處理不當(dāng),機(jī)架內(nèi)或機(jī)架間同步所產(chǎn)生的流量可能會(huì)很大,這將極大地降低訓(xùn)練的速度和質(zhì)量。