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