騰訊大數據背靠強大的研發能力與多年數據產品建設,已有APP服務產品:
一、騰訊移動分析(MTA)
二、騰訊移動推送(信鴿)
三、騰訊推薦
如今迎來了新一代高維度的分佈式機器學習框架Angel正式開源!git
通過漫長的準備和打磨,新一代的Angel終於開源了。Github地址:github.com/tencent/ang… 歡迎你們Star,Fork和提PR。新一代的Angel由騰訊和北京大學聯合開發,兼顧業界的高可用性和學術界的創新性,歡迎分佈式架構師,算法工程師和數據科學家一塊兒深刻使用和協同開發,激發機器學習領域更多的創新應用和良好生態。github
做爲一個高維度的分佈式機器學習框架,Angel的第一次對外亮相是在去年的五月[1],並在去年12月份KDDChina大會上[2],宣佈將全面進行開源。爲了迎接對外開源,團隊成員對Angel進行了屢次重構和升級,可謂是淬火重煉。在此期間,Angel的架構反覆改進,性能持續提高。開源前夕,它的性能已經超越了XGBoost和Spark。新一代的Angel,性能更快,功能更強,開發更方便。其改進主要集中在三方面:算法
本文將從架構和性能兩方面,對新一代Angel,作一個初步的介紹,讓你們瞭解它的改進。關於更加具體和深刻的介紹,還請移步GitHub。編程
在新一代的Angel開發中,咱們對系統進行了一次重要的升級,引入了PSAgent,對PSServer的服務端進行隔離,從而提供了PS-Service的功能。升級後,系統的架構設計以下:緩存
引入PSAgent後,PSClient再也不直接和PSServer打交道了,而是經過PSAgent來溝通。做爲新加的中間層PSAnget,有以下幾個特性:安全
PSAgent的引入,解耦了PSServer和Worker,使得Angel具有了PSService的能力。Angel的PSServer,再也不只服務於Angel的Client,其它機器學習框架,只要實現AngelPSClient接口了,都能能夠接入Angel。性能優化
PSService的抽象,爲Angel接入Spark和深度學習框架,從架構的層面上提供了便利服務器
標準Parameter Server功能之一,就是要提供Model的拉取(pull/get)和推送(push/update)。 不少早期PS,拿HBase,Redis等分佈式存儲系統,簡單改改,進行模型的更新和獲取,就搭建了一個簡單的PS系統。網絡
但實際應用中,算法對PSServer上的參數獲取和更新,卻遠遠不僅這麼簡單,尤爲是當複雜的算法須要實施一些特定的優化的時候,簡單的PS系統,就徹底不能應對這些需求了。架構
舉個例子,有時候某些算法,要獲得
矩陣模型
中某一行的最大值,若是PS系統,只有基本的Pull接口,那麼PSClient,就只能先將該行的全部列,都從參數服務器上拉取回來,而後在Worker上計算獲得最大值,這樣會產生不少的網絡通訊開銷,對性能會有影響。而若是咱們有一個自定義函數,每一個PSServer在遠程先計算出n個局部最大值,再交換確認全局最大值,這時只要返回1個數值就能夠了,這樣的方式,計算開銷接近,但通訊開銷將大大下降。
爲了解決相似的問題,Angel引入和實現psFunc的概念,對遠程模型的獲取和更新的流程進行了封裝和抽象。它也是一種用戶自定義函數(UDF),但都和PS操做密切相關的,所以被成爲psFunc,簡稱psf,總體架構以下:
隨着psFunc的引入,模型的計算,也會發生在PSServer端。PSServer也將有必定的模型計算職責,而不是單純的模型存儲功能。合理的設計psFunc,將大大的加速算法的運行。
做爲目前很是流行的分佈式內存計算框架,Spark 的核心概念是RDD
,而RDD
的關鍵特性之一,是其不可變性
,它能夠規避分佈式環境下複雜的各類奇奇怪怪的並行問題,快速開發各類分佈式數據處理算法。然而在機器學習的時代,這個設計反而制約了Spark的發展。由於機器學習的核心是迭代
和參數更新
,而RDD的不可變性,不適合參數反覆屢次更新的需求,所以諸多Spark機器學習算法的實現,很是的曲折和不直觀。
如今,基於Angel提供的PSService
和psFunc
,Spark能夠充分利用Angel的PS,用最小的修改代價,具有高速訓練大模型的能力,寫出更加優雅的機器學習算法代碼。
Spark on Angel實現的基本架構設計以下:
能夠看出,該實現很是靈活,它對Spark沒有任何侵入式的修改,是一種插件式設計,所以徹底兼容社區Spark,對原生Spark的程序不會有任何影響。它的基本執行流程以下
關於Spark on Angel的具體開發,可參考:《Spark on Angel編程手冊》 。在線上,基於真實的數據,咱們對Spark on Angel和Spark的作了性能對比測試,結果以下:
LR算法 | Spark | Spark on Angel | 加速比例 |
---|---|---|---|
SGD LR (step_size=0.05,maxIter=100) | 2.9 hour | 2.1 hour | 27.6% |
L-BFGS LR (m=10, maxIter=50) | 2 hour | 1.3 hour | 35.0% |
OWL-QN LR (m=10, maxIter=50) | 3.3 hour | 1.9 hour | 42.4% |
顯而易見,Spark on Angel能輕鬆得到30%或更多的加速比,越複雜的算法和模型,性能提升的比例越大。雖然PSServer會耗費了額外的資源,可是比起算法編寫的便捷和性能的提高,這是划算的。對於Spark的老用戶,這是低成本切入Angel的一個途徑,也是算法工程師基於Spark實現高難度算法的優雅姿式。
Spark on Angel是Angel生態圈的第一個成員,後續會有更多基於PS-Service的框架接入,包括深度學習
新版本的Angel,添加了諸多新功能,最終的目的,就是讓算法工程師能更加從容地進行算法優化,融入更多的算法的Trick,讓算法的性能,獲得了一個飛躍的提高。
爲了更加直觀的看到性能差別,每一個對比都在騰訊的機器學習平臺TeslaML上,提供了工做流的連接,鵝廠工程師均可以觀察到運行結果。
衆所周知,XGBoost的強項之一,就是GBDT算法,性能飛快,使用簡單,在衆多算法比賽中,是選手們的最愛。儘管如此,Angel的GBDT算法,卻仍是超越了它,這是一個很是不錯的性能背書。
框架 | Worker | PS | 創建20棵樹時間 |
---|---|---|---|
Angel | 50 個(內存:10G / Worker) | 10個 (內存:10G / PS) | 58 min |
XGBoost | 50個 (內存:10G / Worker) | N/A | 2h 25 min |
衆所周知,LDA是一個很是消耗資源的主題模型算法,新一代的Angel,在LDA上的性能,不但超越了Spark,也已經超越了以前開源過的Petuum。(因爲Petuum已經不開源多時,因此比對數據,這裏就再也不貼出了)
框架 | Worker | PS | 時間 |
---|---|---|---|
Angel | 20個(內存:8G/Worker) | 20個(內存:4G/PS) | 15min |
Spark | 20個(內存:20G/Worker) | N/A | >300min |
LR是廣告推薦中普遍應用的一個算法,Angel分別提供了利用Gradient Descent、ADMM兩種優化方法計算的LR算法。這兩種算法,不管是耗費的資源,仍是性能、收斂速度,都遠比原生的Spark實現優越。
框架 | Worker | PS | 迭代100次時間 |
---|---|---|---|
Angel | 50個(內存:10G/Worker) | 20個(內存: 5G/PS) | 20min |
Spark | 50個(內存:14G/Worker) | N/A | 145min |
框架 | Worker | PS | 收斂退出 |
---|---|---|---|
Angel | 100個(內存:10G/Worker) | 50個(內存:5G/PS) | 27 min |
Spark | 200個(內存:20G/Worker) | N/A | 145 min |
一把好的寶劍,通過千錘百煉,講究的是剛柔並濟,不但削鐵如泥,也要有極好的韌性,百折不斷。一樣的,一個好的開源項目,也是如此。它不但須要有強大的功能和性能,也須要有良好的適配性,能造成好的生態。
超大樣本和超高維度的機器學習,在騰訊的多個真實生產環境中,有着很是廣泛的應用場景,這是Angel的切入點,但不是終點和約束,在將來,Angel還將深刻到圖計算和深度學習領域,藉助開源的力量,作出更多的探索,不管是Wider仍是Deeper的模型,Angel都但願能像天使同樣,在多個機器學習框架上爲它們提速,幫助業務提高效果。
騰訊大數據平臺關注大數據平臺構建、數據挖掘、數據應用等。信息共享,促進行業交流。經過多年產品建設,騰訊大數據已成功爲開發者提供騰訊移動分析(MTA)、騰訊移動推送(信鴿)、騰訊推薦等數據產品,同時與騰訊雲合做,推出大數據處理套件(數智),對外提供了可靠、安全、易用的大數據處理能力。