天天看點

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

随着近年來深度學習技術的發展,各種機器學習平台也紛紛湧現或從專用走向了開源。到現在,一家科技巨頭沒有一個主導的機器學習平台都不好意思跟人打招呼。比如谷歌有 TensorFlow、微軟有 CNTK、Facebook 是 Torch 的堅定支援者、IBM 強推 Spark、百度開源了 PaddlePaddle、亞馬遜也在前段時間高調宣布了對 MXNet 的支援。

現在,騰訊也加入了這一浪潮。在 12 月 18 日于深圳舉辦的騰訊大資料技術峰會暨 KDD China 技術峰會上,騰訊大資料宣布推出了面向機器學習的「第三代高性能計算平台」——Angel,并表示将于 2017 年一季度開放其源代碼。

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

騰訊副總裁姚星在大會發言中說道:「人工智能的發展在過去 60 年中幾經沉浮,今年終于發出了璀璨光芒,很大的原因就是跟雲計算和大資料有關,這是一種演進發展的必然結果。如何處理好大資料,如何在有限的計算資源上對這些大資料進行深入挖掘和分析,這是未來整個産業發展和更新的一個大課題。我相信大資料将成為這次産業更新的基礎,核心算法将成為這次産業更新的靈魂。」

在這次會議上,騰訊資料平台部總經理、首席資料專家蔣傑詳細分享了騰訊大資料的發展之路以及 Angel 系統建構的生态圈層。據介紹,Angel 是騰訊大資料部門釋出的第三代計算平台,使用 Java 和 Scala 語言開發的面向機器學習的高性能分布式計算架構,由騰訊大資料與香港科技大學、北京大學聯合研發。它采用參數伺服器架構,解決了上一代架構的擴充性問題,支援資料并行及模型并行的計算模式,能支援十億級别次元的模型訓練。

不僅如此,Angel 還采用了多種業界最新技術和騰訊自主研發技術,性能更高、系統更具易用性。自今年年初在騰訊内部上線以來,Angel 已應用于騰訊視訊、騰訊社交廣告及使用者畫像挖掘等精準推薦業務。Angel 更是騰訊大資料下一代的核心計算平台。

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

近期,機器之心對騰訊資料平台部總經理、首席資料專家蔣傑進行了一次專訪,請他詳細談了談 Angel 的開發和開放背後的故事。(注:後文還附有蔣傑在本次會議上的演講)

一、Angel 特點與優勢

為什麼會選擇在這個時間點開源 Angel?你怎麼看待目前市面上開源的機器學習平台?相比于其他平台,Angel 的優勢是什麼?

并不是我們刻意選擇一個時間,而是水到渠成的過程。Angel 已在騰訊内部使用了一段時間,系統穩定性和性能經過了騰訊業務的檢驗,系統達到了一定成熟度,是以現在到了開放給所有使用者的時候,希望能激發更多開放創意,讓這個好平台逐漸轉化成有價值的生态系統。

目前的一些主要機器學習平台:

1)Spark(MLlib): 采用 MapReduce 的計算模型進行分布式機器學習的計算,通用性較好,但不是很适應大規模的模型。

2)Petuum: Petuum 驗證了 SSP 的可行性,這是它帶來的最大的貢獻,功能方面也比較完備,不過在一定程度來說,更像是一個實驗室的産品,離工業界的應用還有一段距離。

3)TensorFlow: Google 開源的機器學習系統,用來替代 DistBelief。提供了 Tensor 流程式設計模型,主要的優勢在于為深度學習提供了通用的算子和 GPU 并行計算,目前 TensorFlow 開源的版本比較适用于單機多卡的環境,在多機多卡上性能有瓶頸。

Angel 的哪一項特性最能吸引開發者?

更高性能、更易用,并且在騰訊内部經曆過十億級别的大規模應用的考驗,适合工業界使用。

根據這個資料(下圖),Angel 的疊代時間顯著優于 Spark,尤其是在模型較大的時候差距更是明顯,達到這種效果的主要技術進步是什麼?請通俗地解釋一下。

Angel 的模型,是分布式存放于多台高性能 Parameter Server 之上的,并且對模型的 pull & push 都做了專門的優化,對于大部分的機器學習算法,在模型越大的情況下,比起 Spark 的單點模型廣播方式,性能自然越好。

請對比一下 Angel 與 Spark、Petuum、GraphLab(Turi 底層技術,被 Apple 收購)等平台。

Spark 的通用性很好,但架構上不适應大規模參數交換,是以我們才研發了 Angel。Petuum 驗證了 SSP 的可行性,這是它帶來的最大的貢獻,功能方面也比較完備,不過在一定程度來說,更像是一個實驗室的産品,離工業界的應用還有一段距離。GraphLab 圖方面很強,但是很多機器學習算法不适合抽象為圖模型,是以通用性方面不夠好,另外,容錯性一般。

至于 Angel,我們主要融合了 Spark 和 Petuum 的優點,避免它們的一些短闆,我們在性能、易用性、可靠性方面做了很大的加強。

為什麼考慮用 Java & Scala 來開發這個系統?而不是通常的 C/C++?

主要是一個延續性的考慮,騰訊大資料平台起源于 Hadoop 和 Spark,都是基于 Java,考慮到使用者的習慣,是以使用相同的語言,對于他們來說接受成本更低。另外,Scala 在接口更加的豐富和有表現力,也會對使用者更加友好。

另外是部署和更新的簡單性,之前公司的分布式平台用的是 Java 架構為主,在這些機器上進行 Angel 運作資源的申請,都是透明的,遷移代價很低。

目前我們了解到 Angel 在模型方面已經支援了 Latent DirichletAllocation (LDA)、MatrixFactorization (MF)、LogisticRegression (LR) 、Support Vector Machine(SVM),而這些模型都離不開矩陣運算。可否談談 Angel 在矩陣運算上做了哪些優化?

目前提供 Vector, Matrix 庫,支援各種表達形式(稀疏或稠密)和常見存儲格式(CSR,COO 等),支援常用資料類型和線性代數計算。

你們在參數伺服器上做了哪些優化?和 DistBeilef 相比,又有哪些不同?

Angel 是基于參數伺服器的一個架構,與其他平台相比,我們做了很多優化。首先,我們能支援 BSP、SSP、ASP 三種不同計算和參數更新模式,其次,我們支援模型并行,參數模型可以比較靈活進行切分。第三,我們有個服務補償的機制,參數伺服器優先服務較慢的節點,根據我們的測試結果,當模型較大時,能明顯降低等待時間,任務總體耗時下降 5%~15%。最後,我們在參數更新的性能方面,做了很多優化,比如對稀疏矩陣的 0 參數以及已收斂參數進行過濾,我們根據參數的不同數值類型進行不同算法的壓縮,最大限度減少網絡負載,我們還優化了參與擷取與計算的順序,邊擷取參數變計算,這樣就能節省 20-40% 的計算時間。

關于 DistBeilef,我們閱讀過跟它相關的一些論文和資料,原理上有一定類似,但因為它沒有開源,是以沒有辦法進行具體細節上的比較,但目前谷歌也用 TensorFlow 來替換它了。

能夠支援數億甚至數十億的特征次元需要對系統基礎架構和算法本身進行多方面的改進,特别是在算法方面,需要對每個算法進行特别的優化。Angel 在基礎架構(infrastructure)和算法方面都做了哪些主要優化?

正如剛才所說,Angel 是基于分布式參數伺服器的一個架構,它解決了 Spark 上做參數更新的網絡及計算的瓶頸,同時,我們在參數更新、網絡排程、降低網絡負載等等做了很多架構上面的優化,可以支援資料并行和模型并行,這樣才能支援更大的模型。

在算法方面,其實算法種類繁多,每種都有自己特定的優化方法,但有架構上,會有一些通用的優化方法:

  • 對傳輸的算法模型進行低精度壓縮,用較少的位元組傳輸浮點數,減少網絡流量,加快系統速度;
  • 每個計算節點建立索引,隻向 PS 擷取本節點需要的模型子集;
  • 過濾掉對模型影響較小的更新值,降低網絡傳輸資料量等。

除了這些通用的方式,Angel 針對每種算法也做了大量有針對性的優化,例如 GBDT、LDA 等。

  • GBDT:在 PS 端提供自定義的 Pull 函數,在 server 端完成樹節點的分裂,避免将整個梯度直方圖發送到計算節點,極大減少網絡流量。計算節點向 PS 端 Push 本地的梯度直方圖時,使用低精度壓縮。
  • LDA:Angel 實作了各種 LDA 的 sampler,可以根據具體應用場景選取最合适的 sampler;充分利用了資料稀疏的特點和非均勻分布的特點,提供高效的壓縮方式,降低傳輸資料量;根據資料的分布情況來進行矩陣的劃分政策,進而達到 ps 的負載均衡;對不同的詞做了細粒度的排程,可以根據詞-話題矩陣和文檔-話題矩陣的大小來選擇是在 worker 上做計算還是在 server 上做計算,進而減少網絡開銷。

Angel 和 Spark 一樣屬于 in-memory 計算嗎 in-memory 計算的一個難點在于資源配置和記憶體管理。在騰訊内部,Angel-as-a-service 是如何做到能夠處理不同規模、頻率、算法、時間需求的工作量的?

是的,Angel 也屬于 in-memory 計算,但是,Angel 占用的記憶體會比 Spark 小很多,因為 Angel 主要針對機器學習,專門進行了優化。另外,Angel 并不是一個常駐服務,每個計算任務獨立,它的生命周期和計算任務一緻,不長期占用。我們可以通過參數來設定 Angel 占用的資源量,也可以通過訓練資料量和模型計算一個預設的資源占用量。

二、Angel 與深度學習

Angel 對深度學習和強化學習的支援怎麼樣?支援 GPU 嗎?

Angel 支援基于 GPU 的深度學習,它支援 DL4J,另外,目前 Angel 還能支援如 Caffe、Torch 和 TensorFlow 等業界主流的機器學習架構,提供計算加速。兩年前我們就開始在效果廣告領域嘗試使用深度學習,深度學習+線上學習在我們的效果廣告取得很好的效果。我們也在廣告領域開始強化學習的應用實驗,并探索深度學習+強化學習的融合。

在 TensorFlow、MXNet 等其它架構上已經實作的模型遷移到 Angel 上的難度有多大?

我們在整體架構層面有相容不同計算架構的設計考慮,同時我們建設了很多相對應配套的工具來降低遷移成本,是以,整體遷移難度很低。

三、安全和隐私

随着資訊安全和資料保密需求的日益增加,騰訊的基于雲的大資料分析服務面臨哪些資訊安全和資料隐私的要求?這些要求如何影響了像 Angel 一樣的系統的設計和實作?

資料安全一直是騰訊首要關注的,我們在資料安全方面有很多規範,技術方面也會要求各層的平台進行全力安全保障。具體到 Angel,它有完善的使用者認證和權限控制體系,確定非法使用者無法登陸系統,合法的使用者也隻能看到自己的資料;其次,Angel 的資料存儲在具有高容錯性和可用性的分布式存儲系統上,資料不會丢失,同時資料是分片的,同時也有獨特加密格式,此外不同業務之間的資料是隔離的;最後,Angel 擁有完善的監控體系和日志審計,非法通路會被及時發現和處理。

四、背景與展望

在 Sort Benchmark 大賽中騰訊團隊獲得了 GraySort 和 MinuteSort 兩項的冠軍,速度大幅提升背後應用的技術是怎樣的?為何能獲得如此大的速度提升?

比賽冠軍,可以說是騰訊大資料平台的厚積薄發,我們的平台發展了 7 年,曆經了三代的演進,經曆了離線計算、實時計算、機器學習的三大階段的發展,我們的平台每天都在經受着騰訊數以萬億計的業務量的考驗,騰訊的業務量大并行業務類型複雜,迫使我們在高性能計算及資源排程方面必須适應業務的要求,必須靈活、性能高,并要有很好的靈活性。正式有了這些積累,才讓我們在比去年更低的成本的條件下取得比去年提升幾倍的成績。

騰訊内部已經用到了哪些基于 Angel 的産品?在推廣中有哪些問題嗎?

Angel 定位于大規模機器學習的計算,自今年初上線以來,已應用于騰訊視訊、騰訊社交廣告、使用者畫像挖掘等精準推薦業務,效果非常明顯。目前基本上所有的 BG 都有業務在使用并且使用者越來越多。推廣過程中問題不少,主要是使用者對一個新事物的接受需要一個逐漸的适應過程,有一定的學習和業務遷移成本,是以,我們在易用性方面以及業務遷移方面做很多工作,降低使用者的使用的門檻。

開發這個架構投入了多少資源?開發團隊有多少人?

Angel 項目在 2014 年開始準備,2015 年初正式啟動,剛啟動隻有 4 個人,後來逐漸壯大。項目跟北京大學和香港科技大學合作,一共有 6 個博士生加入到我們的開發團隊。目前在系統、算法、配套生态等方面開發的人員,測試和運維,以及産品策劃及運維,團隊超過 30 人。

Angel 已經支援了 SGD、ADMM 優化算法,後續還将支援哪些算法?

主要看使用者需求,應用有需要的,我們就會支援。

能談一下 Angel 此次開源的原因和意義嗎?Angel 後續的短期計劃和長期計劃是什麼?

騰訊大資料平台來自于開源社群、受益于開源社群,是以我們自然而然地希望回饋社群。開源,讓開放者和開發者都能受益,創造一個共建共赢的生态圈。在這裡,開發者能節約學習和操作的時間,提升開發效率,去花時間想更好的創意,而開放者能受益于社群的力量,更快完善項目,建構一個更好的生态圈。我們一直都在回饋社群,開放了很多源代碼,培養了幾個項目的 committer,這種開放的腳步不會停止。

開源隻是個開頭,後續我們會努力做好社群建設,我們會投入比較多的資源來響應社群的需求,我們會為 Angel 建設更多更好的配套生态來支援更多的業務場景。

目前國内外幾大科技巨頭都在主推一個開源平台,騰訊此次開源後,如果看待這種競争格局,以及騰訊在這方面的競争優勢?

競争一直都會存在,競争促使進步,會讓整個行業發展更快,所有從業人員和使用者都是好事。至于各企業的平台,每家都有自己的優勢,也有不足,開源能促使短闆被優化。讓競争來的更猛烈些吧。

為什麼命名 Angel?開發中有什麼有趣的故事嗎?

我們開發的初衷是一個可以計算更大模型,速度快到飛起來,像插上翅膀一樣的平台,也希望它對使用者足夠友好,門檻低,易用性高,會是一個友好善良的平台形象。另外,這個項目對我們幾個開發人員來說非常重要,心裡很寶貝這個項目,是以自然而然想到了 Angel。

以下是騰訊資料平台部總經理、首席資料專家蔣傑在本次會議上的演講整理:

很多人已經知道騰訊獲得了今年的 Sort Benchmark 的排序的 4 項冠軍,很多朋友來問我:騰訊是怎麼做到的,背後支撐的究竟是什麼樣的技術?

今天,我借這個機會,跟大夥來講講背後的一些故事。

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

相信很多人看過我們在很多城市機場投放的這個廣告,這個廣告裡面畫的是一個賽跑的選手。排序比賽就跟奧運會的百米賽跑一樣,都要很快。但我想說的是:其實我們更像一個長跑選手,我們在跑馬拉松。這場馬拉松,我們跑了 7 年。

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

回顧過去幾年的比賽成績,幾年前冠軍都是被美國企業壟斷的,最近三年則是 BAT 拿了冠軍。應該說,這幾年,國内網際網路的發展速度不比美國慢,與此同時,以 BAT 為代表的國内網際網路企業的計算能力也不落後于美國。

過去幾年,獲得冠軍的團隊用的基本上都是 Hadoop 和 Spark。其實騰訊的大資料平台,也是始于 Hadoop。

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

我們之是以能獲得四項的冠軍,是我們經曆了幾年的打磨,追求極緻,我們希望最大限度地壓榨機器的性能。

首先,從成本的角度,隻有把硬體壓榨到極緻,成本才會低。我們采用的是 OpenPower 架構的機器,按節點數計算,我們規模隻有去年冠軍的六分之一。按照今年的硬體價格,我們總 TCO 成本遠低于去年的冠軍。

在排程層面,我們對排程算法做了深度優化,使得每台機器的 CPU、記憶體、網絡、磁盤 IO 等每個環節都能發揮到極緻。本次比賽的其中兩項為 MinuteSort,比拼的就是一分鐘内的排序資料量。在這裡,時間排程的效率就變得非常重要,而在這兩項比賽上我們比去年提升了 5 倍——是提升幅度最高的;這也從另一個方面說明了我們在排程效率上的領先性。總結為一句話就是:最大限度地壓榨了硬體的性能,才讓我們取得了這個成績。

目前我們用于比賽的這個叢集,已經在我們的現網中用起來了,在高性能計算、圖計算、深度學習等領域支撐着騰訊的現網應用。

回顧我們走過的 7 年,我們是 2009 年 1 月開始基于 Hadoop 來開發我們的大資料平台,七年的征程,我們曆經了 3 代平台的發展。

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

2009-2011 年是我們的第一代平台。我們的第一代平台隻支援批量計算的場景,主要就是報表。在這個過程中我們重點發展了平台的可擴充性。我們不斷增大叢集的規模——從 09 年的幾十台發展到了現在總規模接近 3 萬台。總結起來:第一代就是「規模化」。

第二代用三個字總結就是「實時化」。這是 2012 年到 2014 年,主要支援線上分析和實時計算的場景,比如實時報表、實時查詢、實時監控等。

第三代是去年到現在,主要是建設機器學習平台來支援騰訊各業務資料挖掘的需求。這是從資料分析到資料挖掘的轉變,三個字總結就是「智能化」。、

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

第一代是離線計算的架構,是基于 Hadoop 開發的,我們起名叫 TDW——騰訊分布式資料倉庫(Tencent distributed Data Warehouse)。

社群的 Hadoop 疊代慢,單一叢集規模小,穩定性和易用性都很差,不能達到騰訊的要求,是以我們按騰訊的業務營運标準,做了深度定制開發,我們着重發展叢集的規模,解決 Master 單點瓶頸不能擴充的問題,我們優化了排程政策來提高 Job 的并發性,也加強了 HA 容災建設;還有很關鍵的一點的是,我們豐富了 Hadoop 的周邊生态,建設了配套的工具和産品來降低使用者的使用門檻。文法上,我們相容 Oracle 的文法,友善騰訊各産品部門做程式的遷移。Hadoop 大資料的性能很強,但是小資料分析的效率很差,我們就內建了 PostgreSQL 來提升小資料的分析性能,進而打通 Hadoop 和 PG 的通路界限。

就這樣,我們從最開始的幾十台、到幾百台、到幾千台。幾年以後,在 2013 年單一叢集達到了 4400 台,2014 年單一叢集突破了 8800 台,處于業界領先的水準。目前我們的總規模接近 3 萬台。

TDW 的建成解決了我們内部三大業務痛點:

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

第一,它使我們具備了 T/P 級的資料處理能力,幾十億、百億級的資料量,基本上 30 分鐘就能算出來。

第二,它的成本很低,我們可以使用很普通的 PC Server,就能達到以前小型機一樣的效果;

第三,容災方面,原來隻要有機器當機,業務的資料肯定就有影響,各種報表、資料查詢都出不來。現在 TDW 的機器當機,業務完全無感覺,系統會自動做切換、資料備份等等的事情。

正是解決了業務的這些痛點,業務部門都願意把計算遷移到 TDW。到 2012 年底,我們把所有原來在 Oracle 和 MySQL 上跑的報表都切換到 TDW。

TDW 的建成,讓我們具備了融合所有産品平台的資料的能力。

以前的各産品的資料都是分散在各自的資料庫裡面的,是一個個資料孤島,現在,我們以使用者為中心,建成了十億使用者量級、每個使用者萬維特征的使用者畫像體系。

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

以前的使用者畫像,隻有十幾個次元——主要就是使用者的一些基礎屬性,比如年齡、性别、地域等。以前建構一次要耗費很多天,資料都是按月更新,有了 TDW,我們每天更新一次。

這個使用者畫像已經應用在騰訊所有跟精準推薦相關的産品裡面。

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

推薦相信大家現在都耳熟能詳,但是放在 6 年前,這還是一個剛剛新興起的應用;TDW 為我們提供了一個快速切入快速支撐的能力。通過 MapReduce 的程式設計範式,基于 TDW 的平台,我們可以專注于各種推薦算法邏輯本身的實作,比如大家常見的 CF、MF、LR 這些算法、以及各種 hash 聚類算法;這個時候的推薦技術,面對海量的使用者群體通路,更多還是基于一種實時查詢的服務方式。

第一代平台解決了量大的痛點,但是在速度方面還有問題——資料是離線的,任務計算是離線的,實時性差。是以,我們建設了第二代大資料平台。

在第一代基礎上,內建了 Hadoop 的第二代——Spark,同時,還融合了 Storm 流式計算的架構。這一代平台的內建,讓我們的計算速度從原來的小時,發展到分鐘,直至秒級。

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

資料采集方面,我們建構了 TDBank,讓原來通過接口機傳檔案的方式,T+1 的粒度,變成了毫秒級的實時采集。在這個采集平台裡面,我們自研的消息中間件每天采集的消息條數超過 6.5 萬億,可以說是世界上消息量最大的消息中間件。同時,我們還有高可靠版本的消息中間件,能支援像金融、計費等高一緻性的需求,保證消息不丢。

在資源排程層面,我們基于 Yarn,發展了我們的 Gaia 排程平台,Yarn 隻支援 CPU 和記憶體的次元,而我們的 Gaia 還支援網絡以及磁盤 IO 的次元,Yarn 隻支撐離線計算,Gaia 能支援線上的場景,另外,我們還支援 Docker,我們平台現在每天有 1.5 億 container。

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

再拿剛才提到的推薦例子,基于第一代平台的推薦應用會碰到 2 個問題,一個是随着使用者量和通路量的增多,産生的資料會越來越多,多到在有限的時間根本不可能批處理地計算完,還有一點是使用者的行為模式變化很快,需要更快地去更新各種次元的使用者畫像;資料的實時采集讓使用者行為實時畫像的計算成為可能,這構成了流式計算的資料流。分布式的流式計算實時更新各個次元的統計量,進一步形成了推薦算法的實時訓練資料,進而把上一代的 offline 的推薦系統變成了 online 的實時推薦系統。在廣告的推薦應用上,我們可以看到每一次的實時加快,都帶來了更大的點選率提升。

第二代的平台,實時性和體量方面都能滿足絕大多數業務需求。但随着我們的資料量越來越大,我們的瓶頸很快也出現了。

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

我們在 Spark 上做資料訓練的時候,每一輪的疊代,在更新資料的時候,都會遇到網絡方面的瓶頸——因為更新資料的地方是一個單點,如果資料的次元很大,這套架構就無法支撐。在我們的實際應用中,千萬級的次元都可以運作得不錯,但是上了億級,性能就非常低了,甚至跑不出來。

是以,我們必須要建設一個能支援超大規模資料集的一套系統,能滿足 billion(十億)級别的次元的資料訓練;而且,這個系統必須能滿足我們現網應用的工業級需求。它能解決 big data 和 big model 的需求,它既要能做資料并行,也要能做模型并行。

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

在這個問題上,存在兩種解決的思路:一個是基于第二代平台的基礎上做演進,解決大規模參數交換的問題。另外一個,就是建立設一個高性能的計算架構。

我們看了當時業内比較流行的幾個産品:GraphLab(主要做圖模型,容錯差);Google 的 Distbelief(還沒開源);還有 CMU Eric Xing 的 Petuum(當時很火,不過它更多是一個實驗室的産品,易用性和穩定性達不到我們的要求)。

看了一圈,我們決定自研,走自研的路。我們前兩代都是基于開源的,第三代則開始了自研的曆程。其實在第二代,我們已經嘗試自研,我們消息中間件——不論是高性能的,還是高可靠的版本——都是我們自研的。它們經曆了騰訊億萬流量的考驗,這也給了我們在自研方面很大的信心。

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

是以,第三代整體的計算架構方面,我們也走了自研的道路。第三代的平台,核心是一個叫 Angel 的高性能計算平台。

我們聚焦在高性能的計算架構方面,同時,也是我們往機器學習、深度學習演進的一個路線。

相比第二代,第三代的計算架構,可以支援 10 億級次元的算法訓練,由以前的資料并行,到可以支援模型并行。同時,我們第三代的平台,還支援 GPU 深度學習,支援文本、語音、圖像等非結構化的資料。

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

Angel 是基于參數伺服器的一個架構,它跑在我們的 Gaia 平台上面的。它支援 BSP、SSP、ASP 三種計算模式;支援資料并行以及工業界更看重的模型并行(因為我們主要碰到的還是模型大的問題);另外,在網絡上我們有個原創的嘗試,我們用了港科大楊老師的團隊做的諸葛弩來做網絡排程;Parameter Server 優先服務較慢的 Worker,當模型較大時,能明顯降低等待時間,任務總體耗時下降 5%~15%。

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

Angel 提供很豐富的算法,支援 LR、SVM、LDA、GBDT 等等,并且內建了非常豐富的數學函數庫,另外,還提供非常友好的程式設計界面,能跟 Spark、MR 對接,你能像用 MR、Spark 一樣程式設計。

Angel 跟其他平台(比如 Petuum 和 Spark 等)相比,就我們的測試結果,在同等量級下,Angel 的性能要優于其他平台。比如我們用 Netflix 的資料跑的 SGD 算法,大家看一下這個圖的對比:

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

同時,Angel 更适合超大規模的資料訓練。目前 Angel 支援了很多騰訊内部的現網業務。這裡舉兩個例子,比如,在建構使用者畫像方面,以前都是基于 Hadoop 和 Spark 來做,跑一次模型要 1 天甚至幾天,話題隻有 1k;而在 Angel 上,200 多億文檔、幾百萬個詞、3000 億的 token,1 個小時就跑完了。以前 Spark 能跑的,現在 Angel 快幾十倍;以前 Spark 跑不了的,Angel 也能輕松跑出來。

再看一個案例。視訊的點選預測,同等資料量下,Angel 的性能是 Spark 的 44 倍以上。用了 Angel 以後,我們次元從千萬擴充到億,訓練時間從天縮短到半小時,而準确度也有不小的提升。

騰訊大資料将開源高性能計算平台 Angel,機器之心專訪開發團隊

Angel 不僅僅是一個隻做并行計算的平台,它更是一個生态,我們圍繞 Angel,建立了一個小生态圈,它支援 Spark 之上的 MLLib,支援上億的次元的訓練;我們也支援更複雜的圖計算模型;同時支援 Caffe、TensorFlow、Torch 等深度學習架構,實作這些架構的多機多卡的應用場景。

各位,臨近尾聲了,我想總結一下騰訊大資料平台發展的三個階段:我們從離線計算起步,經過實時計算階段,進入了機器學習的時代。我們從跟随開源,發展到自研,我們的發展曆經了規模化、實時化,以及智能化的變遷。

最後,我要借這個機會跟大家公布一個消息,那就是:我們的大資料平台将全面開源。

我們會在明年上半年把 Angel 以及 Angel 周邊的系統進行開源。我們平台源自開源,我們的發展離不開開源,是以我們會以最大的力度擁抱開源。其實在開源的道路上,我們一直都在參與:我們第一代平台的核心 TDW-Hive 在 2014 年就開源了;我們還在很多社群項目貢獻了很多核心代碼,培養了好幾個 committer。而未來,我們的開源力度隻會越來越大。

謝謝大家。

©本文為機器之心原創文章,轉載請聯系本公衆号獲得授權。

繼續閱讀