close

Facebook 的應用機器學習平臺

近一年來,FreeWheel正在將業務系統遷移到微服務架構,而Go語言因其原生對HTTP服務開發的良好支持及易於容器化部署的特點,成為我們微服務開發的首選語言。




為什麼要把事件溯源用作數據存儲和檢索技術?什麼是架構影響?何時該用平臺而不是框架來滿足需求?InfoQ采訪瞭兩位專傢以瞭解更多信息。




在2017年的紐約QCon大會上,Shriya Arora呈現瞭“Personalizing Netflix with Streaming Datasets”的演講,分享瞭Netflix的一個數據作業遷移案例,他們使用Flink替代瞭原先基於批處理的ETL。




近一年來,FreeWheel正在將業務系統遷移到微服務架構,而Go語言因其原生對HTTP服務開發的良好支持及易於容器化部署的特點,成為我們微服務開發的首選語言。




排查Java的內存問題可能會非常困難,但是正確的方法和適當的工具能夠極大地簡化這一過程。JVM會報告各種OutOfMemoryError信息。在本文中,我們將會介紹如何閱讀這些報告並且會看一下消除錯誤的各種工具。




機器學習是Facebook許多重要產品和服務的核心技術。這篇論文來自Facebook的17位科學傢和工程師,向世界介紹瞭Facebook應用機器學習的軟件及硬件架構。

本著 賦予人們建立社區的力量,使世界更緊密地聯系在一起 的使命,到2017年12月,Facebook已經將全球超過二十億人連接在一起。同時,在過去幾年裡,機器學習在實際問題上的應用正在發生一場革命,這場革命的基石便是機器學習算法創新、大量的模型訓練數據和高性能計算機體系結構進展的良性循環。在Facebook,機器學習提供瞭驅動幾乎全部用戶服務的關鍵動力,包括News Feed、語音和文本翻譯、照片和實時視頻分類等服務。

Facebook在這些服務中用到瞭各種各樣的機器學習算法,包括支持向量機、梯度提升決策樹和多種的神經網絡。Facebook的機器學習架構主要包括內部 機器學習作為服務 工作流、開源機器學習框架、以及分佈式訓練算法。從硬件角度看,Facebook利用瞭大量的CPU和GPU平臺來訓練模型,以支持必要的訓練頻率,以滿足服務的延遲需求。

關鍵摘要:


機器學習在幾乎所有的服務中都有應用,而計算機視覺隻代表一小部分的資源需求。

Facebook采用多種機器學習方法,包括但不限於神經網絡。

大量的數據通過機器學習管道,這一點所帶來的工程效率的挑戰,遠遠不是計算節點可以解決的。

Facebook目前在很大程度上依賴於CPU進行測試階段的推斷,以及CPU和GPU進行訓練,但是也在不斷地從每瓦特性能的視角創造和評估新的硬件解決方案。


1)訓練階段:搭建模型,一般在線下(offline)進行。

2)推斷階段:在生產中運行訓練好的模型,並且進行一系列的實時預測,該階段在線上(online)進行。

Facebook機器學習的一個顯著特點是大量的數據對模型的訓練有潛在的影響。這些數據的規模在整個架構的跨度上有許多意義。

A.主要機器學習應用服務


News Feed(Facebook信息流服務)排序算法可以讓人們在每次訪問Facebook時第一眼看到與他們最相關的故事。首先訓練一般模型,以選擇最終用來確定內容排序的各種用戶和環境因素。然後,當一個人訪問Facebook時,該模型會從成百上千的候選中生成一組個性化的最佳狀態、圖片以及其他內容來顯示,以及所選內容的最佳排序。

Ads利用機器學習來決定對某一用戶應顯示哪些廣告。Ads模型被訓練來學習如何通過用戶特征、用戶環境、先前的交互以及廣告屬性來更好地預測點擊廣告、訪問網站或購買產品的可能性。

Search服務針對各個垂直行業推出瞭一系列不同的、特定的子搜索,如視頻、照片、人、事件等。分類層運行在各種垂直搜索頂部,來預測要搜索的是哪個方面。

Sigma是整體分類和異常檢測框架,用於許多內部應用,包括站點完整性、垃圾郵件檢測、付款、註冊、未經授權的員工訪問和事件推薦。

Lumos從圖像和內容中提取高級屬性和映射關系,使算法自動理解它。

Facer是Facebook的人臉檢測和識別框架。對於給定圖像,它首先找出圖像中的所有人臉。然後,運行針對特定用戶的面部識別算法,來確定圖中的人臉是你的好友的可能性。Facebook通過這個服務幫助你選擇想在照片中標記的好友。

Language Translation是管理Facebook內容國際化的服務。該系統支持超過45種語言、2000種翻譯方向,每天幫助6億人打破語言障礙,讓他們能夠看到翻譯版本的News Feed。

Speech Recognition將音頻轉換成文本,主要應用於為視頻自動填補字幕。

B. 機器學習模型

Facebook使用的機器學習模型包括邏輯回歸(Logistic Regression,LR)、支持向量機(Support Vector Machine,SVM)、梯度提升決策樹(Gradient Boosted Decision

Tree,GBDT),以及深度神經網絡(Deep Neural Network,DNN)。LR和SVM用於訓練和預測的效率很高。GBDT使用額外的計算資源可以提高準確性。DNN是最具表現力的模型,有能力達到最高的準確性,但是它利用的資源最多(計算量至少超過像LR和SVM這樣的線性模型一個數量級)。

在DNN中,主要使用的網絡類型有三種:多層感知器(Multi-Layer Perceptrons,MLP)一般用於結構化的輸入特原木餐桌工廠|原木餐桌工廠推薦征(如排序),卷積神經網絡(Convolutional Neural Networks,CNN)作為空間處理器(如圖像處理),以及循環神經網絡(RNN、LSTM)主要用於序列處理器(如語言處理)。

Facebook產品或服務使用的機器學習算法。

C.Facebook內部 機器學習作為服務

Facebook有幾個內部平臺和工具包,目的是簡化在Facebook產品中利用機器學習的任務。例如FBLearner、Caffe2和PyTorch。FBLearner包含三個工具,每一個都重點負責機器學習管道的不同部分。FBLearner利用內部作業調度程序在GPU和CPU的共享池分配資源、安排工作。Facebook大多數的機器學習訓練通過FBLearner平臺完成。這些工具和平臺協同工作的目的是提高機器學習工程師的生產力,並幫助他們專註於算法的創新。

Facebook機器學習流和架構。

FBLearner Feature Store(特征倉庫)。許多機器學習建模任務的出發點是聚集和生成特征。特征倉庫本質上是一個可以用於訓練和實時預測的多個特征生成器的目錄,並且也可以將它看做一個市場,多個團隊可以在這裡共享並發現特征。

FBLearner Flow是Facebook用於模型訓練的機器學習平臺。Flow是一個通道管理系統,執行workflow(工作流),其中描述瞭訓練或評測模型的步驟,以及所需資源。workflow是由離散的單元構成的,稱作操作器(operater),每個operator都有輸入和輸出。Flow也含有實驗管理的工具以及一個簡單的用戶界面,來跟蹤每個workflow執行或實驗中生成的所有工件和數據。

FBLearn台北原木餐桌|台北原木餐桌工廠er Predictor(預測器)是Facebook內部的推理引擎,采用Flow中訓練的模型提供實時的預測。

D. 深度學習框架

Facebook使用兩種完全不同、但協同工作的深度學習框架:PyTorch,主要用於優化研究環境,和Caffe2,用於優化生產環境。

Caffe2是Facebook的內部訓練和部署大規模機器學習模型的框架。Caffe2關註產品要求的幾個關鍵的特征:性能、跨平臺支持,以及基本的機器學習算法。Caffe2的設計使用的是模塊化的方法,所有的後端實現(CPU,GPU,和加速器)共享一個統一的圖表示。單獨的執行引擎滿足不同圖的執行需求,並且Caffe2加入瞭第三方庫(例如,cuDNN、MKL,和Metal),以在不同的平臺上優化運行。

PyTorch是Facebook人工智能研究所用的框架。它的前端註重靈活性、調試以及動態神經網絡,能夠快速進行實驗。由於它依賴Python,所以它沒有針對生產和移動部署而優化。當研究項目產生瞭有價值的結果時,模型需要轉移到生產中。傳統方法是通過在產品環境中用其他框架來重寫訓練流程來實現轉移。最近Facebook開始搭建ONNX工具來簡化這一轉移過程。

ONNX,該深度學習工具系統在整個行業中仍處於初期階段。由於不同的框架(Caffe2和PyTorch)針對不同的問題有各自的優點,因此在不同的框架或平臺之間交換訓練好的模型是目前的一大生產需求。在2017年底,Facebook與其他相關團隊合作推出ONNX(Open Neural Network Exchange,開源神經網絡交換),是一種以標準方式表示深度學習模型的格式,以便在不同的框架和供應商優化庫之間實現互操作。Facebook內部使用ONNX作為將PyTorch環境下的研究模型轉移到高性能生產環境Caffe2中的首要方法。

機器學習的資源解讀

A.Facebook硬件資源總結

Facebook的架構有著悠久的歷史,為主要的軟件服務提供高效的平臺,包括自定義的服務器、存儲和網絡支持,以滿足每個主要工作的資源需求。Facebook目前支持8個主要的計算和存儲框架,對應8個主要服務。

2U Chassis,具有三個計算插槽,支持兩種可供選擇的服務器類型。一個是單插槽CPU服務器(1xCPU),包含4個Monolake服務器子卡,另一個是雙插槽CPU服務器(2xCPU)。

為瞭加速更大以及更深神經網絡的訓練過程,Facebook打造瞭Big Basin,最新一代GPU服務器。

最初的Big Basin GPU服務器包含8塊NVIDIA Tesla P100 GPU加速器。

與之前的Big Sur GPU服務器相比,Big Basin平臺在每瓦特性能上有瞭極大的提高,受益於單精度浮點運算從7 teraflops到15.7 teraflops的提高,以及900GB/s的帶寬。

B. 訓練階段資源配置

不同服務的機器學習訓練平臺、頻率、持續時間。

計算類型和位置


在GPU進行訓練:Lumos, Speech Recognition、Language Translation。

在CPU進行訓練:News Feed、Sigma。

在CPU和GPU上進行訓練:Facer(整體模型在GPU上每隔幾年進行訓練,因為該模型比較穩定,用戶特定模型在1xCPU進行訓練)、Search(利用多個獨立的垂直搜索,並將預測分類器應用在最合適的領域)。


訓練過程大量利用生產存儲的數據,出於性能和帶寬的原因,生產環境中GPU需要佈局在數據獲取的附近。每個模型利用的數據都在快速增加,所以靠近數據源的位置隨時間而變得越來越重要。

內存、存儲,以及網絡

從內存容量的角度來看,CPU平臺和GPU平臺都提供瞭足夠的訓練空間。例如Facer,在32GB RAM的1xCPU上訓練用戶特定的SVM模型。Facebook的機器學習會用到大部分存儲數據,這也為數據存儲附近的計算資源的放置創建瞭區域性偏好。隨著時間的推移,大多數服務顯示出利用更多用戶數據的趨勢,因此這將增加對其他Facebook服務的依賴性,同時也增加瞭數據訪問的網絡帶寬。

規模考慮與分佈式實木家具工廠|實木家具工廠宜蘭 訓練

訓練神經網絡需要用隨機梯度下降算法來優化參數權重,通過對數據分批(batch、mini-batch)評估的迭代權重更新來完成。傳統的模型在一個機器上完成訓練,訓練性能可以通過增加模型、數據並行達到最優。但是考慮到訓練所需數據會隨時間而增長,硬件限制會增加整體的訓練延遲和收斂時間,甚至到無法接受的地步。為瞭克服這些硬件帶來的局限性,分佈式訓練是一個解決方案,也是目前AI領域很活躍的研究方向之一。

一個常見的假設是,跨機器的數據並行需要一個專門的連接。然而,在關於分佈式訓練的工作中,研究人員發現基於以太網的網絡就足夠提供近似線性的擴展能力。

C. 推斷階段的資源配置

訓練完成後,在線推斷步驟包括將模型加載到機器上,並用實時輸入運行該模型,以生成實時結果。

在線推斷資源要求

這裡以Ads排序模型來介紹在線推斷模型的工作。Ads排序模型過濾掉成百上千的廣告,隻在News Feed中顯示前1-5個。這是通過對越來越小的廣告子集進行逐漸復雜的排序計算過濾的結果。排序計算使用一個類MLP的模型,包含稀疏嵌入層,每一次過濾都在縮小廣告的范圍。稀疏嵌入層是內存密集型的,對於後面的過濾操作,參數會越來越多,它會從MLP過濾分離,在單獨的服務器上運行。

從計算角度來說,大量的在線推斷運行在1xCPU(單插槽)或2xCPU(雙插槽)上,對於Facebook的服務,1xCPU比2xCPU更節能高效,因此要盡可能的將模型從2xCPU遷移到1xCPU上。

數據中心規模的機器學習

除瞭資源需求外,在數據中心規模部署機器學習時還有一些重要因素要考慮,包括重要數據的要求,以及在面對災難時的可靠性。

A.從數據到模型

對於Facebook的許多復雜機器學習應用,例如Ads和Feed Ranking,每一個訓練任務需要處理的數據量超過上百的百萬字節(terabytes)。此外,復雜的預處理操作用於確保數據的清理和規范化,以便高效傳輸和學習。這就對存儲、網絡和CPU提出瞭很高的資源要求。

Facebook采用將數據負載和訓練負載分開的方法來解決這一問題。將不同的負載分配給不同的機器:數據處理機器 reader 從存儲中讀取數據,處理並壓縮它們,隨後傳遞給訓練機器 trainer ,訓練機器隻需要快速高效地執行訓練操作。

B. 使用規模

Facebook必須維護大量的服務器,以在任何時間都可以處理峰值負載。

在特殊日期,由於用戶活動的變化,會導致日負荷高峰,大量的服務器池往往在某些時間段內處於閑置狀態,這為非峰值時間提供瞭大量的計算資源。對於機器學習應用程序,這提供瞭一個充分利用分佈式訓練機制的機會,這些機制可以擴展到大量的異質資源(例如不同的CPU和GPU平臺,具有不同的RAM分配)。例如,在1xCPU結構中,有四個主機共享一個50G的NIC,如果4個主機試圖同時與其他主機同步梯度,共享的NIC馬上就會變成瓶頸,導致丟失包以及響應超時。因此,需要在網絡拓撲和調度器之間進行協同設計,以在非峰值時間有效地利用空閑的服務器。

C. 災難發現

當Facebook全球計算、存儲和網絡痕跡的一部分丟失時,能夠無縫地處理該問題一直是Facebook Infrastructure的長期目標。在內部,Facebook的災難恢復小組定期進行演練,以識別和補救全球架構和軟件堆棧中最薄弱的環節。破壞行動包括把整個數據中心離線而幾乎不被發覺,以確保Facebook的任何一個全球數據中心的丟失對業務造成最小的幹擾。

如果不訓練模型會發生什麼?

作者分析瞭使用機器學習的三個關鍵服務,來說明如果在訓練過程中模型不能進行頻繁地更新所帶來的影響。

Community Integrity(社區完整性):Facebook的Community Integrity團隊充分利用機器學習技術來檢測文本、圖像和視頻中的攻擊性內容。攻擊內容檢測是垃圾郵件檢測的一種特殊形式。對手會不斷尋找新的方法繞過Facebook的鑒別器,向用戶顯示不良內容。如果不能進行完全訓練,會導致無法抵禦這些不良內容。

News Feed:在用戶每次訪問Facebook時為每一個用戶識別最相關的內容,將顯著地依賴於最先進的機器學習算法,以便正確地找到並為該內容排序。舊的News Feed模型對該服務會產生質的影響。即使是一周的訓練計算損失也會阻礙News Feed團隊探索新模型和新參數的能力。

Ads:該服務為人們尋找並展示最好的廣告,對機器學習有重要的依賴性。研究人員發現,利用過時的機器學習模型的影響是以小時衡量的。換句話說,使用一天前的模型比使用一小時前的模型影響更糟。

災難恢復的架構支持

2017年12月Facebook全球數據中心位置。

隨著深度學習在多個產品中得到應用,GPU計算和大數據之間的佈局越來越重要。並且面向巨型區域存儲的戰略支點使計算-數據的共同佈局變得更加復雜。巨型區域的概念意味著少量的數據中心區域將容納大部分Facebook的數據。並且容納整個GPU機群的區域並不位於存儲的巨型區域內。

因此,除瞭協同定位的重要性計算數據,很快就要考慮如果完全失去存儲GPU的區域可能發生什麼事情。這一考慮推動瞭多樣化GPU物理位置的需求。

未來方向:硬件、軟件及算法的協同設計

增加計算強度通常會提高底層硬件的效率,所以在延遲允許的范圍下,用更大的batchsize進行訓練是可取的。計算范圍內的機器學習工作負載將受益於更寬的SIMD單元、專用卷積或矩陣乘法引擎,以及專門的協同處理器。

有些情況下,每個計算節點的小批次是固定要求,這通常會降低計算密集度。因此,當完整的模型不適用於固定的SRAM或最後一級緩存時,可能會降低表現性能。這可以通過模型壓縮、量化和高帶寬存儲器來解決這一問題。

減少訓練時間和加快模型交付需要分佈式訓練。分佈式訓練需要細致的網絡拓撲和調度的協同設計,以有效地利用硬件達到良好的訓練速度和質量。分佈式訓練中最常用的並行形式是數據並行,這就要求梯度下降在所有的節點上同步。

在Facebook,研究人員發現瞭應用機器學習平臺的規模和驅動決策方面設計中出現的幾個關鍵因素:數據與計算機聯合佈局的重要性、處理各種機器工作負載的重要性,不僅僅是計算機視覺,以及來自日計算周期的空閑容量的機會。在設計端到端的解決方案時,研究人員考慮瞭每一個因素,這些解決方案包括定制設計的、現成的、開放源碼的硬件,以及一個平衡性能和可用性的開源軟件生態系統。這些解決方案為服務瞭全球超過21億人的大規模機器學習工作提供瞭動力,反映瞭專傢們在機器學習算法和系統設計方面的跨學科努力。

論文原文:Applied Machine Learning at Facebook: A Datacenter Infrastructure Perspective

感謝蔡芳芳對本文的審校。


您需要 註冊一個InfoQ賬號 或者

登錄 才能進行評論。在您完成註冊後還需要進行一些設置。

獲得來自InfoQ的更多體驗。






我們發現您在使用ad blocker。

我們理解您使用ad blocker的初衷,但為瞭保證InfoQ能夠繼續以免費方式為您服務,我們需要您的支持。InfoQ絕不會在未經您許可的情況下將您的數據提供給第三方。我們僅將其用於向讀者發送相關廣告內容。請您將InfoQ添加至白名單,感謝您的理解與支持。
arrow
arrow

    pdtvf19997 發表在 痞客邦 留言(0) 人氣()