12月18日,深圳 - 騰訊大數據宣布推出面向機器學習的第三代高性能計算平臺——Angel,并預計于2017年一季度開放其源代碼,鼓勵業界工程師、學者和技術人員大規模學習使用,激發機器學習領域的更多創新應用與良好生態發展。
InfoQ采訪了騰訊大數據負責人蔣杰,本文根據采訪稿件以及姚星和蔣杰在騰訊大數據技術峰會暨 KDD China 技術峰會上的演講內容整理而來。
研發背景
騰訊公司是一家消息平臺+數字內容的公司,本質上也是一家大數據公司,每天產生數千億的收發消息,超過10億的分享圖片,高峰期間百億的收發紅包。每天產生的看新聞、聽音樂、看視頻的流量峰值高達數十T。這么大的數據量,處理和使用上,首先業務上存在三大痛點:
第一,需要具備T/P級的數據處理能力,幾十億、百億級的數據量,基本上30分鐘就要能算出來。
第二,成本需低,可以使用很普通的PC Server,就能達到以前小型機一樣的效果;
第三,容災方面,原來只要有機器宕機,業務的數據肯定就有影響,各種報表、數據查詢,都會受到影響。
其次是需要融合所有產品平臺的數據的能力。“以前的各產品的數據都是分散在各自的DB里面的,是一個個數據孤島,現在,需要以用戶為中心,建成了十億用戶量級、每個用戶萬維特征的用戶畫像體系。以前的用戶畫像,只有十幾個維度主要就是用戶的一些基礎屬性,比如年齡、性別、地域等,構建一次要耗費很多天,數據都是按月更新”。
另外就是需要解決速度和效率方面的問題,以前的數據平臺“數據是離線的,任務計算是離線的,實時性差”。
“所以,我們必須要建設一個能支持超大規模數據集的一套系統,能滿足billion級別的維度的數據訓練,而且,這個系統必須能滿足我們現網應用需求的一個工業級的系統。它能解決big data,以及big model的需求,它既能做數據并行,也能做模型并行。”
經過7年的不斷發展,歷經了三代大數據平臺:第一代DTW(騰訊分布式數據倉庫),到基于Spark融合Storm的第二代實時計算架構,到現在形成了第三代的平臺,核心為Angel的高性能計算平臺。
Angel項目在2014年開始準備,15年初正式啟動,剛啟動只有4個人,后來逐步壯大。項目跟北京大學和香港科技大學合作,一共有6個博士生加入到騰訊大數據開發團隊。目前在系統、算法、配套生態等方面開發的人員,測試和運維,以及產品策劃及運維,團隊超過30人。
Angel平臺是使用Java和Scala混合開發的機器學習框架,用戶可以像用Spark, MapReduce一樣,用它來完成機器學習的模型訓練。
Angel采用參數服務器架構,支持十億級別維度的模型訓練。采用了多種業界最新技術和騰訊自主研發技術,如SSP(Stale synchronous Parallel)、異步分布式SGD、多線程參數共享模式HogWild、網絡帶寬流量調度算法、計算和網絡請求流水化、參數更新索引和訓練數據預處理方案等。
這些技術使Angel性能大幅提高,達到常見開源系統Spark的數倍到數十倍,能在千萬到十億級的特征維度條件下運行。
自今年初在騰訊內部上線以來,Angel已應用于騰訊視頻、騰訊社交廣告及用戶畫像挖掘等精準推薦業務。未來還將不斷拓展應用場景,目標是支持騰訊等企業級大規模機器學習任務。
騰訊為何要選擇自研?
首先需要一個滿足十億級維度的工業級的機器學習平臺,蔣杰表示當時有兩種思路:一個是基于第二代平臺的基礎上做演進,解決大規模參數交換的問題。另外一個,就是新建設一個高性能的計算框架。
當時有研究業內比較流行的幾個產品:GraphLab,主要做圖模型,容錯差;Google的Distbelief,還沒開源;還有CMU Eric Xing的Petuum,當時很火,不過它更多是一個實驗室的產品,易用性和穩定性達不到要求。
“其實在第二代,我們已經嘗試自研,我們消息中間件,不論是高性能的,還是高可靠的版本,都是我們自研的。他們經歷了騰訊億萬流量的考驗,這也給了我們在自研方面很大的信心”。
第三代高性能計算平臺
“同時,我們第三代的平臺,還需要支持GPU深度學習,支持文本、語音、圖像等非結構化的數據”。
Angel的整體架構
Angel架構圖
Angel是基于參數服務器的一個架構,整體架構上參考了谷歌的DistBelief。Angel在運算中支持BSP、SSP、ASP三種計算模型,其中SSP是由卡耐基梅隆大學EricXing在Petuum項目中驗證的計算模型,能在機器學習的這種特定運算場景下提升縮短收斂時間。Angel支持數據并行及模型并行。
在網絡上有原創的嘗試,使用了港科大楊強教授的團隊做的諸葛弩來做網絡調度,
ParameterServer優先服務較慢的Worker,當模型較大時,能明顯降低等待時間,任務總體耗時下降5%~15%。
另外,Angel整體是跑在Gaia(Yarn)平臺上面的。
主要的模塊有3個:
Master:主控節點,負責資源申請和分配,以及任務的管理。
ParameterServer:包含多個節點,可對參數進行橫向擴展,解決參數匯總更新的單點瓶頸,支持BSP,SSP,ASP等多種計算模型,隨著一個任務的啟動而生成,任務結束而銷毀,負責在該任務訓練過程中的參數的更新和存儲。
WorkerGroup:一個WG包含多個Worker,WG內部實現模型并行,WG之間實現數據并行, 獨立進程運行于Yarn的Container中。
Angel已經支持了20多種不同算法,包括SGD、ADMM優化算法等,我們也開放比較簡易的編程接口,用戶也可以比較方便的編寫自定義的算法,實現高效的ps模型。并提供了高效的向量及矩陣運算庫(稀疏/稠密),方便了用戶自由選擇數據、參數的表達形式。在優化算法方面,Angel已實現了SGD、ADMM,并支持Latent DirichletAllocation (LDA)、MatrixFactorization (MF)、LogisticRegression (LR) 、Support Vector Machine(SVM) 等。
Angel的優勢包括幾點:
能高效支持超大規模(十億)維度的數據訓練;同樣數據量下,比Spark、Petuum等其他的計算平臺性能更好;有豐富的算法庫及計算函數庫,友好的編程接口,讓用戶像使用MR、Spark一樣編程;豐富的配套生態,既有一體化的運營及開發門戶,又能支持深度學習、圖計算等等其他類型的機器學習框架,讓用戶在一個平臺能開發多種類型的應用。Angel做過哪些優化?
Angel是基于參數服務器的一個架構,與其他平臺相比,在性能上很多優化。首先,我們能支持BSP、SSP、ASP三種不同計算和參數更新模式,其次,我們支持模型并行,參數模型可以比較靈活進行切分。第三,我們有個服務補償的機制,參數服務器優先服務較慢的節點,根據我們的測試結果,當模型較大時,能明顯降低等待時間,任務總體耗時下降5%~15%。最后,我們在參數更新的性能方面,做了很多優化,比如對稀疏矩陣的0參數以及已收斂參數進行過濾,我們根據參數的不同數值類型進行不同算法的壓縮,最大限度減少網絡負載,我們還優化了參與獲取與計算的順序,邊獲取參數變計算,這樣就能節省20-40%的計算時間。
我們除了在性能方面進行深入的優化,在系統易用性上我們也做了很多改進。第一,我們提供很豐富的機器學習算法庫,以及數學運算算法庫;第二,我們提供很友好的高度抽象的編程接口,能跟Spark、MR對接,開發人員能像用MR、Spark一樣編程;第三,我們提供了一體化的拖拽式的開發及運營門戶,用戶不需要編程或只需要很少的開發量就能完成算法訓練;第四,我們內置數據切分、數據計算和模型劃分的自動方案及參數自適應配置等功能,并屏蔽底層系統細節,用戶可以很方便進行數據預處理;最后一點,Angel還能支持多種高緯度機器學習的場景,比如支持Spark的MLLib,支持Graph圖計算、還支持深度學習如Torch和TensorFlow等業界主流的機器學習框架,提供計算加速。
Angel的性能項目測試結果
同等數據量下的性能測試。Angel跟其他平臺相比,比如Petuum,和spark等,在同等量級下的測試結果,Angel的性能要優于其他平臺。比如用Netflix的數據跑的SGD算法,結果可以看上圖中的對比。
超大規模數據的訓練測試。目前Angel支持了很多騰訊內部的現網業務。舉兩個例子,比如,在構建用戶畫像方面,以前都是基于Hadoop和Spark來做,跑一次模型要1天甚至幾天,話題只有1k;而在Angel上,20多億文檔、幾百萬個詞,3000億的token,1個小時就跑完了。以前Spark能跑的,現在Angel快幾十倍;以前Spark跑不了的,Angel也能輕松跑出來。
大規模數據集的訓練能力。例如騰訊視頻的點擊預測,同等數據量下,Angel的性能是Spark的44倍以上。用了Angel以后,維度從千萬擴展到億,訓練時間從天縮短到半小時,而準確度也有很大的提升。
為什么開源?
Angel不僅僅是一個只做并行計算的平臺,它更是一個生態,我們圍繞Angel,建立了一個小生態圈,它支持Spark之上的MLLib,支持上億的維度的訓練;我們也支持更復雜的圖計算模型;同時支持Caffe、TensorFlow、Torch等深度學習框架,實現這些框架的多機多卡的應用場景。
Angel的生態圈
騰訊大數據平臺來自開源的社區,受益于開源的社區中,所以我們自然而然地希望回饋社區。開源,讓開放者和開發者都能受益,創造一個共建共贏的生態圈。在這里,開發者能節約學習和操作的時間,提升開發效率,去花時間想更好的創意,而開放者能受益于社區的力量,更快完善項目,構建一個更好的生態圈。
我們目前希望能豐富Angel配套生態圈,進一步降低用戶使用門檻,促進更多開發人員,包括學校與企業,參與共建Angel開源社區。而通過推動Angel的發展,最終能讓更多用戶能快速、輕松地建立有大規模計算能力的平臺。
我們一直都向社區做貢獻,開放了很多源代碼,培養了幾個項目的committer,這種開放的腳步不會停止。
小結
騰訊公司通過18年的發展今天已經成為了世界級的互聯網公司。“在技術上,我們過去更加關注的是工程技術,也就是海量性能處理能力、海量數據存儲能力、工程架構分布容災能力。未來騰訊必將發展成為一家引領科技的互聯網公司,我們將在大數據、核心算法等技術領域上進行積極的投入和布局,和合作伙伴共同推動互聯網產業的發展。”