摘要:詳見騰訊正式版發布基于與的機器學習高性能計算平臺在談及新一代平臺時,黃明表示,是此次平臺升級的一大亮點,而只是生態圈的第一個成員。對此,黃明表示,在的開發過程中,我們一直都是在同和對標性能。
機器之心原創
作者:高靜宜
2017 年 6 月 16 日,騰訊新一代高性能計算平臺 Angel 在 Github 上低調開源。開源兩周,這個項目在 Github 上持續得到關注,截至目前為止,已收獲 183 Watch,1693 Star,389 Fork,也吸引了許多業界工程師對分布式機器學習平臺架構的優化與算法性能的提升展開了深入的討論與交流。
Github 上,其他團隊的研發人員與 Angel 開發團隊就問題進行探討
這并不是 Angel 的首次亮相,去年 5 月,面向高維度機器學習的分布式計算框架 Angel 進入大眾視野;12 月 18 日,在深圳舉辦的騰訊大數據技術峰會暨 KDD China 技術峰會上,騰訊大數據宣布推出了面向機器學習的第三代高性能計算平臺 Angel,主打易用性,不僅提供機器學習算法庫以及友好的編程接口,還內置數據自動切分、數據計算和模型劃分的自動方案及異步控制等功能并支持多種高維度機器學習場景。(詳見《騰訊大數據將開源高性能計算平臺 Angel,機器之心專訪開發團隊》)
當時,騰訊曾表示將于 2017 年一季度開放其源代碼,為什么超出預期一個季度才開源 Angel 平臺?歷時半年,Angel 平臺在技術方面有哪些更新與優化?是否有重大升級?為此,機器之心專訪騰訊數據平臺部智能學習平臺技術負責人黃明,深入了解新一代 Angel 平臺的背后的故事以及技術方面的亮點。
新一代 Angel 平臺由騰訊和北京大學聯合開發,黃明介紹,這半年來,團隊做了大量的重構工作,包括相關自動化單元測試以及中文詳細文檔準備。在重構過程中,團隊還做了兩個大動作:一是引入 Spark on Angel,二是把性能優化到比 XGBoost 還快。「這其中的工作量是非常大的,超出了最初的預期,很多事情就這樣連帶著做了,還好老大們沒給太大的壓力。一直到 6 月中旬我們覺得項目挺完善了,各個性能比對都充分了,才正式開源了這個平臺。一開始,我們并沒有想宣傳這件事,只在騰訊內部發表了相關文章,沒想到機器之心很快就發現了我們的動作,幫助我們把 Github 上的相關信息分享給大家了。」黃明笑著解釋道。(詳見《騰訊 Angel 1.0 正式版發布:基于 Java 與 Scala 的機器學習高性能計算平臺》)
在談及新一代 Angel 平臺時,黃明表示,Spark on Angel 是此次平臺升級的一大亮點,而 Spark 只是 Angel 生態圈的第一個成員。「之前業界有過不少關于 Spark on PS 的討論,Yahoo 也有相關的研究,但是并沒開源。有一個小的開源項目 Glint,也是做 Spark on PS 的,但是在性能和功能上都有所欠缺,比如不支持 psFunc,而且也沒有人維護。這次騰訊開源 Angel 的時候,直接將 Spark on Angel 也開源了,希望能夠帶動更多的 Spark 工程師投入到機器學習的領域中,利用 Spark 和 Angel 配合來做機器學習。另外,透露一下,在下一個小版本中,會推出 Spark Streaming on Angel,Angel 也將可以支持在線學習。」
經過反復的改進與迭代,Angel 在性能、功能以及開發者易用性都有了顯著的提升,開源前夕,Angel 就已經具備超越 XGBoost 和 Spark 的性能表現。此次升級主要表現在三個方面:
?生態性: 引入 PSAgent,支持 PS-Service,便于接入其它機器學習框架 ?函數性: 融合函數式編程特性,自定義 psFunc,利于開發復雜算法 ?靈活性: 支持 Spark-on-Angel,Spark 無需修改內核,運行于 PS 模式之上
以下為新一代 Angel 開源平臺架構升級以及性能優勢方面的具體介紹。
三大架構升級
1.PSService
據 Andy 介紹,在新一代的 Angel 開發中,研發團隊對系統進行了一次重要升級,引入了 PSAgent,對 PSServer 的服務端進行隔離,從而提供了 PSService 的功能。升級后,系統的架構設計如下:
新加入的中間層 PSAnget 有以下特性:
?對外屏蔽 PSServer 中的模型分片,路由以及模型重組等復雜細節,提供封裝好的模型操作接口 ?內置 Hogwild! 機制,包含模型緩存和模型預取等性能優化 ?提供模型緩存(Cache)的更新和合并的功能,大大降低網絡通信開銷
PSAgent 的引入使 PSClient 不再直接和 PSServer 打交道,而是通過 PSAgent 進行溝通。這樣的調整解耦了 PSServer 和 Worker,使 Angel 具備了 PSService 的能力。同時,Angel 的 PSServer 也不再只服務于 Angel 的 Client,只要能夠實現 AngelPSClient 接口,其它機器學習框架也能可以接入 Angel。
PSService 不僅為新一代 Angel 打下了堅實的基礎,也從架構的層面上,為接入 Spark 和深度學習計算框架提供了可能。
2.psFunc
提供 Model 的拉取(pull/get)和推送(push/update)是標準 Parameter Server 的一個功能。很多早期的 PS 是在 HBase,Redis 等分布式存儲系統的基礎上,進行簡單的模型更新和獲取而搭建的。
但在實際應用中,算法對 PSServer 上參數的獲取和更新,卻并非這樣簡單。尤其是在復雜的算法需要實施一些特定的優化時,簡單的 PS 系統就無法應對這些需求了。以求取矩陣模型中某一行的最大值為例,如果 PS 系統只有基本的 Pull 接口,那么 PSClient 只能先將該行的所有列都從參數服務器上拉取回來,然后再在 Worker 上計算得到最大值。這個過程會產生許多網絡通信開銷,對性能造成影響。同樣的情況下,如果可以設置一個自定義函數,那么每個 PSServer 就可以先遠程計算出 n 個局部最大值,再交換確認全局最大值,只需返回 1 個數值就可以完成任務。這樣的方式算產生的計算開銷接近,但通信開銷卻將大大降低。
為了解決類似的問題,Angel 引入并實現 psFunc 的概念,對遠程模型的獲取和更新的流程進行了封裝和抽象。這也是一種用戶自定義函數(UDF),因與 PS 操作密切相關,也被成為 psFunc,簡稱 psf,其整體架構如下:
psFunc 的引入促使 PSServer 端也會發生模型計算,相應地,PSServer 也會承擔一定的模型計算職責,而不是單純的實現模型存儲功能。「用戶可以靈活地自定義自己的算子,合理設計 psFunc 能夠大幅度加速算法運行。」黃明解釋道。
3.Spark on Angel
Spark 是目前非常流行的分布式內存計算框架,其核心概念是 RDD。不可變性是 RDD 的關鍵特性之一,它可以規避分布式環境下各種奇怪的復雜并行問題,進而快速開發各種分布式數據處理算法。然而在機器學習的時代,這個設計反而制約了 Spark 的發展。這源于機器學習核心——迭代和參數更新,RDD 的不可變性并不適合參數反復多次更新的需求,因此許多 Spark 機器學習算法的實現都非常的曲折而且不直觀。
在 Angel 提供的 PSService 和 psFunc 基礎上,Spark 可以充分利用 Angel 的 PS,可以以最小的修改代價,實現高速訓練大模型的能力。
Spark on Angel 實現的基本架構設計如下:
這個實現過程較為靈活,利用插件式設計,對 Spark 沒有任何侵入式修改,完全兼容社區 Spark,對原生 Spark 程序不會產生任何影響。它的基本執行流程如下:
?啟動 SparkSession ?初始化 PSContext,啟動 Angel 的 PSServer ?創建 PSModelPool, 申請到 PSVector ?核心實現
在 RDD 運算中,直接調用 PSVector 進行模型更新,讓真正運行的 Task 調用 AngelPSClient 對遠程 PSServer 進行操作。
?終止 PSContext ?停止 SparkSession
在線上,基于真實的數據,研發團隊對 Spark on Angel 和 Spark 的做了性能對比測試,結果如下:
顯而易見,Spark on Angel 能輕松獲得 30% 甚至更多的加速比,而且越復雜的算法和模型,性能提高的比例越大。雖然 PSServer 會耗費了額外的資源,但是考慮算法編寫的便捷以及性能的提升方面,這仍是一個劃算、合適的選擇。對于 Spark 的老用戶,這是低成本切入 Angel 的一個途徑,也是算法工程師基于 Spark 實現高難度算法的有效方式。
三大性能提升
新版本 Angel 添加諸多新功能的最終目的,就是讓算法工程師能更加從容地進行算法優化,進而讓算法的性能可以得到了一個飛躍的提升。
1.GBDT
眾所周知,近年來 XGBoost 在眾多算法比賽中大放異彩。GBDT 算法正是 XGBoost 的強項之一,不過,Angel 的 GBDT 算法仍在性能上實現了超越。
(數據:騰訊內部某性別預測數據集,3.3×105 特征,1.2×108 樣本)
可以看到,這次發布的性能比對版本相較之前有所不同,其中加入了 XGBoost 的比較。對此,黃明表示,「在 Angel 的開發過程中,我們一直都是在同 Petuum 和 Spark 對標性能。但是在我們進行開源工作時,Petuum 已經接受風投不再開源了(2016 年 12 月)。而且,我們在開源的過程中,其實是不斷地對 Angel 做架構升級和代碼優化的,如果只針對 Spark 進行對標的話,是很沒挑戰的事。當時有個同事覺得,XGBoost 的 GBDT 算法是業界的標桿之一,因為做 Kaggle 比賽的人基本都會考慮使用,那么我們是不是可以超越它?于是我們頭腦風暴了一下,就把這個定為重構目標之一了。一開始,差距還是比較大的,后來我們進行了優化,也做了很多工作,包括在基于 psFunc 重構完成后,把一些最佳分裂點的計算和合并,移到 psServer 上做,才超越了 XGBoost。」
2.LDA
LDA 是一個非常消耗資源的主題模型算法,新一代的 Angel 在 LDA 上的性能不但超越了 Spark,而且已經超越了之前開源過的 Petuum。Andy 解釋稱:「本來我們計劃對標 Petuum,不過 Petuum 早已不再開源了,所以很多方面也不再具備可比性,不過我們的性能與 Pettum 相比可以快五倍左右。」
(數據:PubMED)
3.GD-LR
LR 是廣告推薦中廣泛應用的一個算法,Angel 分別提供了利用 Gradient Descent、ADMM 兩種優化方法計算的 LR 算法。這兩種算法,無論是耗費的資源,還是性能、收斂速度,都遠比原生的 Spark 實現優越。
(1). GD-LR
(數據: 騰訊內部某推薦數據,5×107 特征,8×107 樣本)
(2).ADMM-LR
(數據:騰訊內部某推薦數據,5 千萬特征,1 億樣本)
關于這個 ADMM-LR 算法的比較,黃明笑談,「其實開源版本的 Spark 是沒有這個算法的,也是我們之前為了支持騰訊內部業務而開發的。而原來開發 Spark 版本的時候,我們持續優化了很久,基本把 Spark 性能壓榨到了極致。以至于 Spark on Angel 版本的算法,比它快不了多少,所以這里就被列出來了。不過還好,就是這樣子,Angel 版本的算法還是比 Spark 版本的,快了很多的。」
在談到這次開源的性能比對時,黃明提到,他們的原則是基于生產數據以及現網環境,盡量保證公平。首先,數據集是相同的,都以騰訊正式的數據集為主。由于數據量都非常大,因此跑起來很耗費資源,需要在現網集群上運行。在做運維的同學的協助之下,才能有相對合適的環境來比對。黃明解釋道,「比如有些數據集,Spark 跑起來的話,需要分配 50G 內存給 Driver 才可能跑得過去,其實不是所有現網集群都具備運行這個作業能力的。我們也需要反復嘗試和調優各種參數,才能讓 PK 雙方盡可能公平地在同樣的 Worker,Core,內存,網絡條件下運行。這個過程其實又把開源延遲了 1 個月。不過從整體上來看,我們覺得這個花費還是值得的。」
最后黃明表示:「在此之前,Angel 平臺一直只在騰訊內部使用,而今的開源仍處于初級階段,后續會基于 PS-Service,接入更多深度學習的框架,例如 TensorFlow,來切入深度學習領域。希望 Angel 可以吸引更多的開發者用戶加入我們的生態中來,借助開源的力量讓大家共同探索未來機器學習領域的各種可能性。」
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/83769.html
摘要:而道器相融,在我看來,那煉丹就需要一個好的丹爐了,也就是一個優秀的機器學習平臺。因此,一個機器學習平臺要取得成功,最好具備如下五個特點精辟的核心抽象一個機器學習平臺,必須有其靈魂,也就是它的核心抽象。 *本文首發于 AI前線 ,歡迎轉載,并請注明出處。 摘要 2017年6月,騰訊正式開源面向機器學習的第三代高性能計算平臺 Angel,在GitHub上備受關注;2017年10月19日,騰...
摘要:年月,小邪正式入職阿里巴巴,首次接觸淘寶商城項目開啟了其十年的阿里技術生涯,去年月加入阿里云,任飛天八部掌門人。技術成長角色轉變也是職責轉變在阿里云意味著更貼近客戶,這對小邪來說是最大的改變。 摘要: 從2008年到2018年,從阿里巴巴中間件團隊到飛天八部——小邪與阿里的十年。 編者按:從2008年到2018年,從阿里巴巴中間件團隊到飛天八部——小邪與阿里的十年。 2008年4月,小...
閱讀 3091·2023-04-25 15:44
閱讀 1876·2019-08-30 13:11
閱讀 2830·2019-08-30 11:11
閱讀 3004·2019-08-29 17:21
閱讀 1306·2019-08-29 15:38
閱讀 898·2019-08-29 12:49
閱讀 1793·2019-08-28 18:19
閱讀 3222·2019-08-26 14:01