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