Facebook基于数据中心的机器学习实践
周圣盛???文
張懷政 校正
引言
“賦予人們建立社區的力量,讓世界更緊密地聯系在一起”是Facebook的使命。為了完成這樣的目標,Facebook連接了全球兩億的用戶(2017年12月)。為了提供更好的服務質量以達到最大的用戶滿意度,Facebook大量應用了機器學習在它的各種服務上面,比如頁面推薦、廣告推薦、語音識別、翻譯、圖像與視頻分類等。但是Facebook是一家服務于全球用戶的企業,用戶與用戶產生的數據量巨大,而且其數據中心分布在世界各地,這些都給Facebook建設機器學習服務帶來了巨大挑戰。
Facebook的機器學習
圖1展示了Facebook的一個機器學習流程與用到的基礎設施示例,其機器學習主要包括兩步:
(1)? 訓練(Training):使用機器學習算法結合數據訓練模型,一般離線訓練;
(2)? 預測(Inference):使用訓練好的模型進行在線實時預測。
圖1. Facebook的機器學習流程與基礎設施示例
Facebook基于機器學習創建的主要服務如下:
表1. Facebook基于機器學習的主要服務
從表1中我們可以看出,Facebook使用機器學習給用戶提供了豐富的智能服務。而且每個服務可能包含了更多的子服務,比如翻譯服務,Facebook支持45種語言兩兩雙向翻譯,其使用的模型數量就高達2000多種。為了更好的訓練、上線以及管理這些服務所用到的機器學習模型,Facebook對機器學習進行了服務化治理。注意這里的服務指的是模型服務,而不是上文提到的具體的應用服務。正如圖1中所展示的那樣,在Facebook內部,模型的訓練、上線以及管理等都是使用FBLearner來完成的。FBLearner是一個統一的機器學習與調度平臺,它包含了以下幾個模塊:
FBLearner Feature Store:用于抽取并存儲特征以供模型的訓練和實時預測;
FBLearner Flow:用于模型的訓練,Flow使用工作流來描述一個模型的訓練任務,通過對工作流的調度來完成訓練;
FBLearner Predictor:模型的預測引擎,用于模型的在線實時預測。
FBLearner對主流的機器學習框架(如Caffe2、TensorFlow、PyTorch等)進行了抽象與封裝,也就是說FBLearner感知不到其內部使用的是什么框架。
資源對機器學習的影響
機器學習中的訓練和預測有著不一樣的資源需求、頻率以及時長,所以對訓練和預測應該采取不一樣的資源分配策略。
Facebook不光是一個應用軟件服務提供商,它也設計并開源了很多硬件架構,如圖2所示的Big Basin GPU服務器就是目前Facebook在用的主要的GPU服務器。這款GPU服務器支持NVIDIA Tesla P100 GPU以及V100 GPU,GPU之間使用NVLink進行連接,從而提供了高速的數據交互。
圖2 Big Basin GPU服務器,在一個3U機箱中可以放8個GPU
Facebook大量使用了CPU服務器和GPU服務器應對機器學習,訓練主要使用CPU和GPU,而預測主要使用CPU。GPU適用于一些高負載的運算場景,這正是訓練的一個重要特征,而且訓練也不會發生的太頻繁。此外,GPU的實時性沒有CPU好,所以在線上實時預測的場景中,CPU可以發揮出更大的優勢。表2顯示了Facebook不同服務訓練使用的資源類型、訓練頻率以及時長,不難發現,不同服務模型訓練所需資源類型、訓練頻率、時長都不一樣,這里給出的數據來自Facebook的最佳實踐,不一定適用于其他公司,但是可以作為參考。
表2 服務的離線訓練所需資源類型、頻率以及時長
數據中心級別的機器學習
圖3顯示的是Facebook全球的數據中心分布(2017年12月數據),可以發現Facebook的數據中心分布在全球各地。在進行機器學習訓練的過程中,一個很重要的輸入就是數據,而且Facebook用戶產生的數據極大,某些服務(如News Feed)在訓練的時候需要PB級別的數據,如果每次訓練都要將這么大的數據量從數據倉庫傳輸到訓練節點上,那么對網絡帶寬的要求會非常大,對于跨數據中心的數據傳遞也會十分耗時。另外,基于如此巨大的數據量進行訓練,往往會帶來非常大的資源消耗,為了不影響用戶的服務質量,必須設計一套切實可行的解決方案。
圖3 Facebook全球數據中心分布圖(2017年12月)
針對以上提到的一些問題,Facebook通過不斷探索和實踐,給了我們一些可以應對的方針。Facebook主要通過以下手段克服上面提到的幾個問題:
針對距離遠而且數據量大的問題,Facebook采用的方案是縮短數據中心和訓練中心的距離,這樣數據傳輸耗時就會縮短很多。另外Facebook將讀取數據的機器“readers”和用來訓練的機器“trainers”物理上分離,也就是說用來訓練的trainers只需要專心的跑訓練,不需要從數據中心讀取數據,而是依賴于“readers”從數據中心拉取數據。
針對訓練十分消耗資源的問題,Facebook觀察到一個區域的機器的負載狀況滿足日間活動特性(Diurnal),如圖4所示,其實確實如此,因為大多數用戶白天使用App、網站等服務的頻率會比較高,夜里比較少。所以Facebook的訓練大多數跑在夜間,這樣可以最大程度上提高硬件資源利用率,同時減少和用戶服務競爭資源。
圖4 Facebook服務器集群24小時的負載狀況(2017年12月19日)
總結
該文章簡單介紹了Facebook基于數據中心的機器學習實踐,從大公司應用機器學習建立智能服務的過程中我們可以看出,工業界對于機器學習的應用,會更加考慮服務可用性、預測實時性、訓練速度、數據中心的網絡傳輸、資源利用率等指標。為了建設更完善的機器學習平臺,Facebook從硬件架構、模型訓練與服務框架、數據中心建設等方面都在不停的嘗試新方案。正是不斷創新的解決方案,才讓Facebook給其20億用戶帶來了穩定且高質量的服務。
引用
Hazelwood, Kim, et al. "Applied machine learning at facebook: A datacenter infrastructure perspective." 2018 IEEE International Symposium on High Performance Computer Architecture (HPCA). IEEE, 2018.
資料免費送(點擊鏈接下載)
加入運維管理VIP群(點擊鏈接查看)
掃描以下二維碼加入學習群
總結
以上是生活随笔為你收集整理的Facebook基于数据中心的机器学习实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广东移动数据中心攻关“液/气双通道散热技
- 下一篇: 大型监控网络系统如何规划ip地址?