不卡av在线播放_欧美成人AU在线看_亚洲一区二区 视频_五月天亚洲无码伊人

Article / 文章中心

Angel團(tuán)隊(duì)負(fù)責(zé)人黃明:歷時(shí)半年,騰訊Angel為了開(kāi)源都經(jīng)歷了些什么?

發(fā)布時(shí)間:2021-11-29 點(diǎn)擊數(shù):966

2017 年 6 月 16 日,騰訊新一代高性能計(jì)算平臺(tái) Angel 在 Github 上低調(diào)開(kāi)源。開(kāi)源兩周,這個(gè)項(xiàng)目在 Github 上持續(xù)得到關(guān)注,截至目前為止,已收獲 183 Watch,1693 Star,389 Fork,也吸引了許多業(yè)界工程師對(duì)分布式機(jī)器學(xué)習(xí)平臺(tái)架構(gòu)的優(yōu)化與算法性能的提升展開(kāi)了深入的討論與交流。微信圖片_20211128220855.jpgGithub 上,其他團(tuán)隊(duì)的研發(fā)人員與 Angel 開(kāi)發(fā)團(tuán)隊(duì)就問(wèn)題進(jìn)行探討


這并不是 Angel 的首次亮相,去年 5 月,面向高維度機(jī)器學(xué)習(xí)的分布式計(jì)算框架 Angel 進(jìn)入大眾視野;12 月 18 日,在深圳舉辦的騰訊大數(shù)據(jù)技術(shù)峰會(huì)暨 KDD China 技術(shù)峰會(huì)上,騰訊大數(shù)據(jù)宣布推出了面向機(jī)器學(xué)習(xí)的第三代高性能計(jì)算平臺(tái) Angel,主打易用性,不僅提供機(jī)器學(xué)習(xí)算法庫(kù)以及友好的編程接口,還內(nèi)置數(shù)據(jù)自動(dòng)切分、數(shù)據(jù)計(jì)算和模型劃分的自動(dòng)方案及異步控制等功能并支持多種高維度機(jī)器學(xué)習(xí)場(chǎng)景。(詳見(jiàn)《騰訊大數(shù)據(jù)將開(kāi)源高性能計(jì)算平臺(tái) Angel,機(jī)器之心專訪開(kāi)發(fā)團(tuán)隊(duì)》)


當(dāng)時(shí),騰訊曾表示將于 2017 年一季度開(kāi)放其源代碼,為什么超出預(yù)期一個(gè)季度才開(kāi)源 Angel 平臺(tái)?歷時(shí)半年,Angel 平臺(tái)在技術(shù)方面有哪些更新與優(yōu)化?是否有重大升級(jí)?為此,機(jī)器之心專訪騰訊數(shù)據(jù)平臺(tái)部智能學(xué)習(xí)平臺(tái)技術(shù)負(fù)責(zé)人黃明,深入了解新一代 Angel 平臺(tái)的背后的故事以及技術(shù)方面的亮點(diǎn)。


新一代 Angel 平臺(tái)由騰訊和北京大學(xué)聯(lián)合開(kāi)發(fā),黃明介紹,這半年來(lái),團(tuán)隊(duì)做了大量的重構(gòu)工作,包括相關(guān)自動(dòng)化單元測(cè)試以及中文詳細(xì)文檔準(zhǔn)備。在重構(gòu)過(guò)程中,團(tuán)隊(duì)還做了兩個(gè)大動(dòng)作:一是引入 Spark on Angel,二是把性能優(yōu)化到比 XGBoost 還快?!高@其中的工作量是非常大的,超出了最初的預(yù)期,很多事情就這樣連帶著做了,還好老大們沒(méi)給太大的壓力。一直到 6 月中旬我們覺(jué)得項(xiàng)目挺完善了,各個(gè)性能比對(duì)都充分了,才正式開(kāi)源了這個(gè)平臺(tái)。一開(kāi)始,我們并沒(méi)有想宣傳這件事,只在騰訊內(nèi)部發(fā)表了相關(guān)文章,沒(méi)想到機(jī)器之心很快就發(fā)現(xiàn)了我們的動(dòng)作,幫助我們把 Github 上的相關(guān)信息分享給大家了?!裹S明笑著解釋道。(詳見(jiàn)《騰訊 Angel 1.0 正式版發(fā)布:基于 Java 與 Scala 的機(jī)器學(xué)習(xí)高性能計(jì)算平臺(tái)》)


在談及新一代 Angel 平臺(tái)時(shí),黃明表示,Spark on Angel 是此次平臺(tái)升級(jí)的一大亮點(diǎn),而 Spark 只是 Angel 生態(tài)圈的第一個(gè)成員?!钢皹I(yè)界有過(guò)不少關(guān)于 Spark on PS 的討論,Yahoo 也有相關(guān)的研究,但是并沒(méi)開(kāi)源。有一個(gè)小的開(kāi)源項(xiàng)目 Glint,也是做 Spark on PS 的,但是在性能和功能上都有所欠缺,比如不支持 psFunc,而且也沒(méi)有人維護(hù)。這次騰訊開(kāi)源 Angel 的時(shí)候,直接將 Spark on Angel 也開(kāi)源了,希望能夠帶動(dòng)更多的 Spark 工程師投入到機(jī)器學(xué)習(xí)的領(lǐng)域中,利用 Spark 和 Angel 配合來(lái)做機(jī)器學(xué)習(xí)。另外,透露一下,在下一個(gè)小版本中,會(huì)推出 Spark Streaming on Angel,Angel 也將可以支持在線學(xué)習(xí)?!?


經(jīng)過(guò)反復(fù)的改進(jìn)與迭代,Angel 在性能、功能以及開(kāi)發(fā)者易用性都有了顯著的提升,開(kāi)源前夕,Angel 就已經(jīng)具備超越 XGBoost 和 Spark 的性能表現(xiàn)。此次升級(jí)主要表現(xiàn)在三個(gè)方面:


微信圖片_20211128220928.jpg

  • ?生態(tài)性: 引入 PSAgent,支持 PS-Service,便于接入其它機(jī)器學(xué)習(xí)框架
  • ?函數(shù)性: 融合函數(shù)式編程特性,自定義 psFunc,利于開(kāi)發(fā)復(fù)雜算法
  • ?靈活性: 支持 Spark-on-Angel,Spark 無(wú)需修改內(nèi)核,運(yùn)行于 PS 模式之上


以下為新一代 Angel 開(kāi)源平臺(tái)架構(gòu)升級(jí)以及性能優(yōu)勢(shì)方面的具體介紹。


三大架構(gòu)升級(jí)


1.PSService


據(jù) Andy 介紹,在新一代的 Angel 開(kāi)發(fā)中,研發(fā)團(tuán)隊(duì)對(duì)系統(tǒng)進(jìn)行了一次重要升級(jí),引入了 PSAgent,對(duì) PSServer 的服務(wù)端進(jìn)行隔離,從而提供了 PSService 的功能。升級(jí)后,系統(tǒng)的架構(gòu)設(shè)計(jì)如下:


微信圖片_20211128220947.jpg新加入的中間層 PSAnget 有以下特性:


  • ?對(duì)外屏蔽 PSServer 中的模型分片,路由以及模型重組等復(fù)雜細(xì)節(jié),提供封裝好的模型操作接口
  • ?內(nèi)置 Hogwild! 機(jī)制,包含模型緩存和模型預(yù)取等性能優(yōu)化
  • ?提供模型緩存(Cache)的更新和合并的功能,大大降低網(wǎng)絡(luò)通信開(kāi)銷


PSAgent 的引入使 PSClient 不再直接和 PSServer 打交道,而是通過(guò) PSAgent 進(jìn)行溝通。這樣的調(diào)整解耦了 PSServer 和 Worker,使 Angel 具備了 PSService 的能力。同時(shí),Angel 的 PSServer 也不再只服務(wù)于 Angel 的 Client,只要能夠?qū)崿F(xiàn) AngelPSClient 接口,其它機(jī)器學(xué)習(xí)框架也能可以接入 Angel。


PSService 不僅為新一代 Angel 打下了堅(jiān)實(shí)的基礎(chǔ),也從架構(gòu)的層面上,為接入 Spark 和深度學(xué)習(xí)計(jì)算框架提供了可能。


2.psFunc


提供 Model 的拉?。╬ull/get)和推送(push/update)是標(biāo)準(zhǔn) Parameter Server 的一個(gè)功能。很多早期的 PS 是在 HBase,Redis 等分布式存儲(chǔ)系統(tǒng)的基礎(chǔ)上,進(jìn)行簡(jiǎn)單的模型更新和獲取而搭建的。


但在實(shí)際應(yīng)用中,算法對(duì) PSServer 上參數(shù)的獲取和更新,卻并非這樣簡(jiǎn)單。尤其是在復(fù)雜的算法需要實(shí)施一些特定的優(yōu)化時(shí),簡(jiǎn)單的 PS 系統(tǒng)就無(wú)法應(yīng)對(duì)這些需求了。以求取矩陣模型中某一行的最大值為例,如果 PS 系統(tǒng)只有基本的 Pull 接口,那么 PSClient 只能先將該行的所有列都從參數(shù)服務(wù)器上拉取回來(lái),然后再在 Worker 上計(jì)算得到最大值。這個(gè)過(guò)程會(huì)產(chǎn)生許多網(wǎng)絡(luò)通信開(kāi)銷,對(duì)性能造成影響。同樣的情況下,如果可以設(shè)置一個(gè)自定義函數(shù),那么每個(gè) PSServer 就可以先遠(yuǎn)程計(jì)算出 n 個(gè)局部最大值,再交換確認(rèn)全局最大值,只需返回 1 個(gè)數(shù)值就可以完成任務(wù)。這樣的方式算產(chǎn)生的計(jì)算開(kāi)銷接近,但通信開(kāi)銷卻將大大降低。


為了解決類似的問(wèn)題,Angel 引入并實(shí)現(xiàn) psFunc 的概念,對(duì)遠(yuǎn)程模型的獲取和更新的流程進(jìn)行了封裝和抽象。這也是一種用戶自定義函數(shù)(UDF),因與 PS 操作密切相關(guān),也被成為 psFunc,簡(jiǎn)稱 psf,其整體架構(gòu)如下:


微信圖片_20211128221011.jpgpsFunc 的引入促使 PSServer 端也會(huì)發(fā)生模型計(jì)算,相應(yīng)地,PSServer 也會(huì)承擔(dān)一定的模型計(jì)算職責(zé),而不是單純的實(shí)現(xiàn)模型存儲(chǔ)功能?!赣脩艨梢造`活地自定義自己的算子,合理設(shè)計(jì) psFunc 能夠大幅度加速算法運(yùn)行?!裹S明解釋道。


3.Spark on Angel


Spark 是目前非常流行的分布式內(nèi)存計(jì)算框架,其核心概念是 RDD。不可變性是 RDD 的關(guān)鍵特性之一,它可以規(guī)避分布式環(huán)境下各種奇怪的復(fù)雜并行問(wèn)題,進(jìn)而快速開(kāi)發(fā)各種分布式數(shù)據(jù)處理算法。然而在機(jī)器學(xué)習(xí)的時(shí)代,這個(gè)設(shè)計(jì)反而制約了 Spark 的發(fā)展。這源于機(jī)器學(xué)習(xí)核心——迭代和參數(shù)更新,RDD 的不可變性并不適合參數(shù)反復(fù)多次更新的需求,因此許多 Spark 機(jī)器學(xué)習(xí)算法的實(shí)現(xiàn)都非常的曲折而且不直觀。


在 Angel 提供的 PSService 和 psFunc 基礎(chǔ)上,Spark 可以充分利用 Angel 的 PS,可以以最小的修改代價(jià),實(shí)現(xiàn)高速訓(xùn)練大模型的能力。


Spark on Angel 實(shí)現(xiàn)的基本架構(gòu)設(shè)計(jì)如下:


微信圖片_20211128221030.jpg這個(gè)實(shí)現(xiàn)過(guò)程較為靈活,利用插件式設(shè)計(jì),對(duì) Spark 沒(méi)有任何侵入式修改,完全兼容社區(qū) Spark,對(duì)原生 Spark 程序不會(huì)產(chǎn)生任何影響。它的基本執(zhí)行流程如下:


  • ?啟動(dòng) SparkSession
  • ?初始化 PSContext,啟動(dòng) Angel 的 PSServer
  • ?創(chuàng)建 PSModelPool, 申請(qǐng)到 PSVector
  • ?核心實(shí)現(xiàn)


在 RDD 運(yùn)算中,直接調(diào)用 PSVector 進(jìn)行模型更新,讓真正運(yùn)行的 Task 調(diào)用 AngelPSClient 對(duì)遠(yuǎn)程 PSServer 進(jìn)行操作。


  • ?終止 PSContext
  • ?停止 SparkSession


在線上,基于真實(shí)的數(shù)據(jù),研發(fā)團(tuán)隊(duì)對(duì) Spark on Angel 和 Spark 的做了性能對(duì)比測(cè)試,結(jié)果如下:


微信圖片_20211128221059.jpg顯而易見(jiàn),Spark on Angel 能輕松獲得 30% 甚至更多的加速比,而且越復(fù)雜的算法和模型,性能提高的比例越大。雖然 PSServer 會(huì)耗費(fèi)了額外的資源,但是考慮算法編寫的便捷以及性能的提升方面,這仍是一個(gè)劃算、合適的選擇。對(duì)于 Spark 的老用戶,這是低成本切入 Angel 的一個(gè)途徑,也是算法工程師基于 Spark 實(shí)現(xiàn)高難度算法的有效方式。


三大性能提升


新版本 Angel 添加諸多新功能的最終目的,就是讓算法工程師能更加從容地進(jìn)行算法優(yōu)化,進(jìn)而讓算法的性能可以得到了一個(gè)飛躍的提升。


1.GBDT


眾所周知,近年來(lái) XGBoost 在眾多算法比賽中大放異彩。GBDT 算法正是 XGBoost 的強(qiáng)項(xiàng)之一,不過(guò),Angel 的 GBDT 算法仍在性能上實(shí)現(xiàn)了超越。


微信圖片_20211128221123.jpg

微信圖片_20211128221127.jpg(數(shù)據(jù):騰訊內(nèi)部某性別預(yù)測(cè)數(shù)據(jù)集,3.3×105 特征,1.2×108 樣本)


可以看到,這次發(fā)布的性能比對(duì)版本相較之前有所不同,其中加入了 XGBoost 的比較。對(duì)此,黃明表示,「在 Angel 的開(kāi)發(fā)過(guò)程中,我們一直都是在同 Petuum 和 Spark 對(duì)標(biāo)性能。但是在我們進(jìn)行開(kāi)源工作時(shí),Petuum 已經(jīng)接受風(fēng)投不再開(kāi)源了(2016 年 12 月)。而且,我們?cè)陂_(kāi)源的過(guò)程中,其實(shí)是不斷地對(duì) Angel 做架構(gòu)升級(jí)和代碼優(yōu)化的,如果只針對(duì) Spark 進(jìn)行對(duì)標(biāo)的話,是很沒(méi)挑戰(zhàn)的事。當(dāng)時(shí)有個(gè)同事覺(jué)得,XGBoost 的 GBDT 算法是業(yè)界的標(biāo)桿之一,因?yàn)樽?Kaggle 比賽的人基本都會(huì)考慮使用,那么我們是不是可以超越它?于是我們頭腦風(fēng)暴了一下,就把這個(gè)定為重構(gòu)目標(biāo)之一了。一開(kāi)始,差距還是比較大的,后來(lái)我們進(jìn)行了優(yōu)化,也做了很多工作,包括在基于 psFunc 重構(gòu)完成后,把一些最佳分裂點(diǎn)的計(jì)算和合并,移到 psServer 上做,才超越了 XGBoost?!?


2.LDA


LDA 是一個(gè)非常消耗資源的主題模型算法,新一代的 Angel 在 LDA 上的性能不但超越了 Spark,而且已經(jīng)超越了之前開(kāi)源過(guò)的 Petuum。Andy 解釋稱:「本來(lái)我們計(jì)劃對(duì)標(biāo) Petuum,不過(guò) Petuum 早已不再開(kāi)源了,所以很多方面也不再具備可比性,不過(guò)我們的性能與 Pettum 相比可以快五倍左右。」

微信圖片_20211128221248.jpg

微信圖片_20211128221253.png

(數(shù)據(jù):PubMED)


3.GD-LR


LR 是廣告推薦中廣泛應(yīng)用的一個(gè)算法,Angel 分別提供了利用 Gradient Descent、ADMM 兩種優(yōu)化方法計(jì)算的 LR 算法。這兩種算法,無(wú)論是耗費(fèi)的資源,還是性能、收斂速度,都遠(yuǎn)比原生的 Spark 實(shí)現(xiàn)優(yōu)越。


(1). GD-LR

微信圖片_20211128221436.jpg


微信圖片_20211128221440.jpg

(數(shù)據(jù): 騰訊內(nèi)部某推薦數(shù)據(jù),5×107 特征,8×107 樣本)


(2).ADMM-LR

微信圖片_20211128221444.jpg

微信圖片_20211128221449.jpg

(數(shù)據(jù):騰訊內(nèi)部某推薦數(shù)據(jù),5 千萬(wàn)特征,1 億樣本)


關(guān)于這個(gè) ADMM-LR 算法的比較,黃明笑談,「其實(shí)開(kāi)源版本的 Spark 是沒(méi)有這個(gè)算法的,也是我們之前為了支持騰訊內(nèi)部業(yè)務(wù)而開(kāi)發(fā)的。而原來(lái)開(kāi)發(fā) Spark 版本的時(shí)候,我們持續(xù)優(yōu)化了很久,基本把 Spark 性能壓榨到了極致。以至于 Spark on Angel 版本的算法,比它快不了多少,所以這里就被列出來(lái)了。不過(guò)還好,就是這樣子,Angel 版本的算法還是比 Spark 版本的,快了很多的。」


在談到這次開(kāi)源的性能比對(duì)時(shí),黃明提到,他們的原則是基于生產(chǎn)數(shù)據(jù)以及現(xiàn)網(wǎng)環(huán)境,盡量保證公平。首先,數(shù)據(jù)集是相同的,都以騰訊正式的數(shù)據(jù)集為主。由于數(shù)據(jù)量都非常大,因此跑起來(lái)很耗費(fèi)資源,需要在現(xiàn)網(wǎng)集群上運(yùn)行。在做運(yùn)維的同學(xué)的協(xié)助之下,才能有相對(duì)合適的環(huán)境來(lái)比對(duì)。黃明解釋道,「比如有些數(shù)據(jù)集,Spark 跑起來(lái)的話,需要分配 50G 內(nèi)存給 Driver 才可能跑得過(guò)去,其實(shí)不是所有現(xiàn)網(wǎng)集群都具備運(yùn)行這個(gè)作業(yè)能力的。我們也需要反復(fù)嘗試和調(diào)優(yōu)各種參數(shù),才能讓 PK 雙方盡可能公平地在同樣的 Worker,Core,內(nèi)存,網(wǎng)絡(luò)條件下運(yùn)行。這個(gè)過(guò)程其實(shí)又把開(kāi)源延遲了 1 個(gè)月。不過(guò)從整體上來(lái)看,我們覺(jué)得這個(gè)花費(fèi)還是值得的?!?


最后黃明表示:「在此之前,Angel 平臺(tái)一直只在騰訊內(nèi)部使用,而今的開(kāi)源仍處于初級(jí)階段,后續(xù)會(huì)基于 PS-Service,接入更多深度學(xué)習(xí)的框架,例如 TensorFlow,來(lái)切入深度學(xué)習(xí)領(lǐng)域。希望 Angel 可以吸引更多的開(kāi)發(fā)者用戶加入我們的生態(tài)中來(lái),借助開(kāi)源的力量讓大家共同探索未來(lái)機(jī)器學(xué)習(xí)領(lǐng)域的各種可能性。