0
本文作者: 宗仁 | 2016-12-19 22:33 |
雷鋒網(wǎng)按:昨天,騰訊大數(shù)據(jù)技術(shù)峰會暨KDD China技術(shù)峰會上在深圳召開,騰訊數(shù)據(jù)平臺部總經(jīng)理,首席數(shù)據(jù)專家蔣杰做了騰訊大數(shù)據(jù)平臺Angel即將全面開源的報告,雷鋒網(wǎng)現(xiàn)場摘編如下。
大家好,很多人已經(jīng)知道騰訊獲得了今年的Sort benchmark的排序的4項冠軍,很多朋友來問我,騰訊是怎么做到的,背后支撐的究竟是什么樣的技術(shù)?今天,我借這個機(jī)會,跟大伙來講講背后的一些故事。
相信很多人看過我們在很多城市機(jī)場投放的這個廣告,這個廣告里面畫的是一個賽跑的選手,排序比賽,就跟奧運會的百米賽跑一樣,都要很快。但我想說的是,其實我們更像一個長跑選手,我們在跑馬拉松,這場馬拉松,我們跑了7年。
回顧過去幾年的比賽的成績,幾年前冠軍都是被美國企業(yè)壟斷的,最近三年則是BAT拿了冠軍。應(yīng)該說,這幾年,國內(nèi)互聯(lián)網(wǎng)的發(fā)展速度不比美國慢,與此同時,以BAT為代表的國內(nèi)互聯(lián)網(wǎng)企業(yè)的計算能力也不落后于美國。
過去幾年,獲得冠軍的團(tuán)隊,用的基本上都是Hadoop和Spark,其實騰訊的大數(shù)據(jù)平臺,也是始于Hadoop的。我們之所以能獲得四項的冠軍,是我們經(jīng)歷了幾年的打磨,追求極致,我們希望最大限度地壓榨機(jī)器的性能。
首先,從成本的角度,只有把硬件壓榨到極致,成本才會低。我們采用的是OpenPower架構(gòu)的機(jī)器,按節(jié)點數(shù)計算,我們規(guī)模只有去年冠軍的六份一,按照今年的硬件價格,我們總的TCO成本遠(yuǎn)低于去年冠軍。
在調(diào)度層面,我們對調(diào)度算法做了深度優(yōu)化,使得每臺機(jī)器的CPU、內(nèi)存、網(wǎng)絡(luò)、磁盤IO等每個環(huán)節(jié)都能發(fā)揮到極致。本次比賽的其中兩項為MinuteSort,比拼的就是一分鐘內(nèi)的排序數(shù)據(jù)量,這個時間調(diào)度的效率就變得非常重要,而這兩項比賽我們比去年提升了5倍,是提升幅度最高的;這也從另一個方面說明了我們在調(diào)度效率上的領(lǐng)先性??偨Y(jié)為一句話,就是最大限度地壓榨了硬件的性能,才讓我們?nèi)〉眠@個成績。
目前我們用于比賽的這個集群,已經(jīng)在我們的現(xiàn)網(wǎng)中用起來了,在高性能計算、圖計算、深度學(xué)習(xí)等領(lǐng)域支撐騰訊的現(xiàn)網(wǎng)應(yīng)用。
回顧我們走過的7年,我們是2009年1月開始基于Hadoop來開發(fā)我們的大數(shù)據(jù)平臺,七年的征程,我們歷經(jīng)了3代平臺的發(fā)展。
2009-2011年是我們的第一代平臺,我們的第一代平臺,只支持批量計算的場景,主要就是報表,這個過程,我們重點發(fā)展了平臺的可擴(kuò)展性,我們不斷增大集群的規(guī)模,從09年的幾十臺,發(fā)展到現(xiàn)在總規(guī)模接近3萬臺??偨Y(jié)成幾個字,第一代就是規(guī)?;?/p>
第二代,用三個字總結(jié)就是實時化。這是2012年到2014年。主要支持在線分析和實時計算的場景,比如實時報表,實時查詢、實時監(jiān)控等。
第三代是去年到現(xiàn)在,主要建設(shè)機(jī)器學(xué)習(xí)平臺,支持騰訊各業(yè)務(wù)數(shù)據(jù)挖掘的需求。這是從數(shù)據(jù)分析到數(shù)據(jù)挖掘的轉(zhuǎn)變,三個字總結(jié)就是“智能化“。
第一代是離線計算的架構(gòu),是基于Hadoop開發(fā)的, 我們起名叫TDW,騰訊分布式數(shù)據(jù)倉庫的意思。
社區(qū)的Hadoop迭代慢,單一集群規(guī)模小,穩(wěn)定性和易用性都很差,不能達(dá)到騰訊的要求,因此我們按騰訊的業(yè)務(wù)運營標(biāo)準(zhǔn),做了深度定制開發(fā),我們著重發(fā)展集群的規(guī)模,解決Master單點瓶頸不能擴(kuò)展的問題,我們優(yōu)化了調(diào)度策略來提高Job的并發(fā)性,也加強HA容災(zāi)建設(shè),還有很關(guān)鍵的一點的是,我們豐富了Hadoop的周邊生態(tài),建設(shè)了配套的工具和產(chǎn)品來降低用戶的使用門檻,語法上,我們兼容Oracle的語法,方便騰訊各產(chǎn)品部門做程序的遷移,Hadoop大數(shù)據(jù)的性能很強,但是小數(shù)據(jù)分析的效率很差,我們就集成了PostgreSQL來提升小數(shù)據(jù)的分析性能,打通Hadoop和PG的訪問界限。
就這樣,我們從最開始的幾十臺、到幾百臺、到幾千臺,幾年以后,在2013年單一集群達(dá)到4400臺,2014年單一集群突破8800臺,處于業(yè)界領(lǐng)先的水平。目前我們的總規(guī)模接近3萬臺。
TDW的建成,解決了我們內(nèi)部三大業(yè)務(wù)痛點。
第一,它使我們具備了T/P級的數(shù)據(jù)處理能力,幾十億、百億級的數(shù)據(jù)量,基本上30分鐘就能算出來。
第二,它的成本很低,我們可以使用很普通的PC Server,就能達(dá)到以前小型機(jī)一樣的效果;
第三,容災(zāi)方面,原來只要有機(jī)器宕機(jī),業(yè)務(wù)的數(shù)據(jù)肯定就有影響,各種報表、數(shù)據(jù)查詢,都出不來?,F(xiàn)在TDW的機(jī)器宕機(jī),業(yè)務(wù)完全無感知,系統(tǒng)會自動做切換、數(shù)據(jù)備份等等的事情。
正是解決了業(yè)務(wù)的這些痛點,業(yè)務(wù)部門都愿意把計算遷移到TDW。到2012年底,我們把所有原來在Oracle和mysql上跑的報表都切換到TDW。
TDW的建成,讓我們具備了融合所有產(chǎn)品平臺的數(shù)據(jù)的能力。
以前的各產(chǎn)品的數(shù)據(jù)都是分散在各自的DB里面的,是一個個數(shù)據(jù)孤島,現(xiàn)在,我們以用戶為中心,建成了十億用戶量級、每個用戶萬維特征的用戶畫像體系。
以前的用戶畫像,只有十幾個維度主要就是用戶的一些基礎(chǔ)屬性,比如年齡、性別、地域等,以前構(gòu)建一次要耗費很多天,數(shù)據(jù)都是按月更新,有了TDW,我們每天更新一次。這個用戶畫像,應(yīng)用在騰訊所有跟精準(zhǔn)推薦相關(guān)的產(chǎn)品里面。
再舉個推薦的例子。推薦相信大家現(xiàn)在都耳熟能詳,但是放在6年前,這還是一個剛剛新興起的應(yīng)用;TDW為我們提供了一個快速切入快速支撐的能力。通過 MapReduce的編程范式,基于TDW 的平臺,我們可以專注于各種推薦算法邏輯本身的實現(xiàn),比如大家常見的CF, MF, LR 這些算法,以及各種 hash 聚類算法;這個時候的推薦技術(shù),面對海量的用戶群體訪問,更多還是基于一種實時查詢的服務(wù)方式。
第一代平臺解決了量大的痛點,但是在速度方面還有問題,數(shù)據(jù)是離線的,任務(wù)計算是離線的,實時性差。所以,我們建設(shè)了第二代的大數(shù)據(jù)平臺。在第一代基礎(chǔ)上,集成了Spark,同時,還融合了Storm流式計算的框架。這一代平臺的集成,讓我們的計算的粒度從原來的小時,發(fā)展到分鐘,直至秒級。
數(shù)據(jù)采集方面,我們構(gòu)建了TDBank,讓原來通過接口機(jī)傳文件的方式,T+1的粒度,變成了毫秒級的實時采集。在這個采集平臺里面,我們自研的消息中間件,每天采集的消息條數(shù)超過6.5萬億,可以說是世界上消息量最大的消息中間件。同時,我們還有高可靠版本的消息中間件,能支持像金融、計費等高一致性的需求,保證消息不丟。
在資源調(diào)度層面,我們基于Yarn,發(fā)展了我們的Gaia調(diào)度平臺,Yarn只支持CPU和內(nèi)存的維度,而我們的Gaia還支持網(wǎng)絡(luò)以及磁盤IO的維度,Yarn只支撐離線計算,Gaia能支持在線的場景,另外,我們還支持doctor,我們平臺現(xiàn)在每天有1.5億container。
再拿剛才提到的推薦例子,基于第一代平臺的推薦應(yīng)用會碰到2個問題,一個是隨著用戶量,訪問量的增多,產(chǎn)生的數(shù)據(jù)會越來越多,多到在有限的時間根本不可能批處理的計算完,還有一點是用戶的行為模式變化很快,需要更快的去更新各種維度的用戶畫像;數(shù)據(jù)的實時采集讓用戶行為,實時畫像的計算成為可能,這構(gòu)成了流式計算的 數(shù)據(jù)流,分布式的流式計算實時更新各個維度的統(tǒng)計量,進(jìn)一步形成了推薦算法的實時訓(xùn)練數(shù)據(jù),從而把上一代的 offline 的推薦系統(tǒng)變成了 online 的實時推薦系統(tǒng)。在廣告的推薦應(yīng)用上,我們可以看到每一次的實時加快,都帶來了更大的點擊率提升。
第二代的平臺,實時性和體量方面,都能滿足絕大多數(shù)業(yè)務(wù)需求。但隨著我們的數(shù)據(jù)量越來越大,我們的瓶頸很快也出現(xiàn)了。我們在Spark上做數(shù)據(jù)訓(xùn)練的時候,每一輪的迭代,在更新數(shù)據(jù)的時候,都會遇到網(wǎng)絡(luò)方面的瓶頸,因為更新數(shù)據(jù)的地方是一個單點,如果數(shù)據(jù)的維度很大,這套框架就無法支撐。
在我們的實際應(yīng)用中,千萬級的維度,都可以run得不錯,但是上了億級,性能就非常低了,甚至跑不出來。
所以,我們必須要建設(shè)一個能支持超大規(guī)模數(shù)據(jù)集的一套系統(tǒng),能滿足billion級別的維度的數(shù)據(jù)訓(xùn)練,而且,這個系統(tǒng)必須能滿足我們現(xiàn)網(wǎng)應(yīng)用需求的一個工業(yè)級的系統(tǒng)。它能解決big data,以及big model的需求,它既能做數(shù)據(jù)并行,也能做模型并行。
一個是基于第二代平臺的基礎(chǔ)上做演進(jìn),解決大規(guī)模參數(shù)交換的問題。另外一個,就是新建設(shè)一個高性能的計算框架。
我們看了當(dāng)時業(yè)內(nèi)比較流行的幾個產(chǎn)品
GraphLab,主要做圖模型,容錯差;
Google的Distbelief,還沒開源;
還有CMU Eric Xing的Petuum,當(dāng)時很火,不過它更多是一個實驗室的產(chǎn)品,易用性和穩(wěn)定性達(dá)不到我們的要求。
看了一圈,我們決定自研,走自研的路。我們前兩代都是基于開源的,第三代則開始了自研的歷程。其實在第二代,我們已經(jīng)嘗試自研,我們消息中間件,不論是高性能的,還是高可靠的版本,都是我們自研的。他們經(jīng)歷了騰訊億萬流量的考驗,這也給了我們在自研方面很大的信心。因此,第三代整體的計算框架方面,我們也走了自研的道路。第三代的平臺,核心是一個叫Angel的高性能計算平臺。我們聚焦在高性能的計算框架方面,同時,也是我們往機(jī)器學(xué)習(xí)、深度學(xué)習(xí)演進(jìn)的一個路線。
相比第二代,第三代的計算框架,可以支持10億級維度的算法訓(xùn)練,由以前的數(shù)據(jù)并行,到可以支持模型并行。
同時,我們第三代的平臺,還支持GPU深度學(xué)習(xí),支持文本、語音、圖像等非結(jié)構(gòu)化的數(shù)據(jù)。
Angel是基于參數(shù)服務(wù)器的一個架構(gòu),它跑在我們的Gaia平臺上面的。它支持BSP、SSP、ASP三種計算模式;
支持?jǐn)?shù)據(jù)并行以及工業(yè)界更看重的模型并行,因為我們主要碰到的還是模型大的問題;
另外,在網(wǎng)絡(luò)上我們有個原創(chuàng)的嘗試,我們用了港科大楊老師的團(tuán)隊做的諸葛弩來做網(wǎng)絡(luò)調(diào)度。ParameterServer優(yōu)先服務(wù)較慢的Worker,當(dāng)模型較大時,能明顯降低等待時間,任務(wù)總體耗時下降5%~15%。
Angel提供很豐富的算法,支持LR、SVM、LDA、GDBT等等,并且集成了非常豐富的數(shù)學(xué)函數(shù)庫。
另外,還提供非常友好的編程界面,能跟Spark、MR對接,你能像用MR、Spark一樣編程。
Angel跟其他平臺相比,比如Petuum,和spark等,就我們的測試結(jié)果,在同等量級下,Angel的性能要優(yōu)于其他平臺。比如我們用Netflix的數(shù)據(jù)跑的SGD算法,大家看一下這個圖的對比。
同時,Angel更適合超大規(guī)模的數(shù)據(jù)訓(xùn)練。目前Angel支持了很多騰訊內(nèi)部的現(xiàn)網(wǎng)業(yè)務(wù)。這里舉兩個例子,比如,在構(gòu)建用戶畫像方面,以前都是基于Hadoop和Spark來做,跑一次模型要1天甚至幾天,話題只有1k;而在Angel上,20多億文檔、幾百萬個詞,3000億的token,1個小時就跑完了。
以前Spark能跑的,現(xiàn)在Angel快幾十倍;以前Spark跑不了的,Angel也能輕松跑出來。再看一個case,視頻的點擊預(yù)測,同等數(shù)據(jù)量下,Angel的性能是Spark的44倍以上。用了Angel以后,我們維度從千萬擴(kuò)展到億,訓(xùn)練時間從天縮短到半小時,而準(zhǔn)確度也有不小的提升。
Angel不僅僅是一個只做并行計算的平臺,它更是一個生態(tài)。
我們圍繞Angel,建立了一個小生態(tài)圈,它支持Spark之上的MLLib,支持上億的維度的訓(xùn)練;我們也支持更復(fù)雜的圖計算模型;同時支持Caffe、TensorFlow、Torch等深度學(xué)習(xí)框架,實現(xiàn)這些框架的多機(jī)多卡的應(yīng)用場景。
各位,臨近尾聲了,我想總結(jié)一下騰訊大數(shù)據(jù)平臺發(fā)展的三個階段:
我們從離線計算起步,經(jīng)過實時計算階段,進(jìn)入了機(jī)器學(xué)習(xí)的時代。
我們從跟隨開源,發(fā)展到自研,我們的發(fā)展歷經(jīng)了規(guī)?;?、實時化,以及智能化的變遷。最后,我要借這個機(jī)會跟大家公布一個消息,那就是:我們的大數(shù)據(jù)平臺將全面開源。
我們會在明年上半年把Angel以及Angel周邊的系統(tǒng)進(jìn)行開源。我們平臺源自開源,我們的發(fā)展離不開開源,所以我們會以最大的力度擁抱開源。
其實在開源的道路上,我們一直都在參與:
我們第一代平臺的核心,TDW-Hive,已經(jīng)在2014年就開源了;
我們還在很多社區(qū)項目貢獻(xiàn)了很多核心代碼,培養(yǎng)了好幾個committer。
而未來,我們的開源力度只會越來越大。
在雷鋒網(wǎng)眼里,Angel是騰訊完全自主的大數(shù)據(jù)平臺,按照騰訊的說法無論是在性能還是實用性,Angel比其它平臺都有很大的優(yōu)勢,但讓業(yè)界為之震驚的還是騰訊將其開源,而且開源的力度也是騰訊過去2代計算平臺無法比擬的,毋庸置疑,對下游廠商來講,這是一個利好消息。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。