螞蟻金服新計算實踐:基於Ray的融合計算引擎

如今大部分人工智能應用是基於監督學習範式開發的,即模型在線下進行訓練,然後部署到服務器上進行線上預測,這樣的開發方式在實時響應上存在較大的侷限。隨着計算和AI體系逐步成熟,我們希望機器學習應用能更多地在動態環境下運行、實時響應環境中的變化,這推動了機器學習從傳統離線學習逐漸向在線學習演進。相比於傳統的離線機器學習,在線學習可以帶來更快的模型迭代速度,讓模型預測效果更貼真實情況,對於線上的波動更加敏銳。

最近兩年,國內各一線互聯網廠商分別推出自己的在線學習技術體系及相關架構。螞蟻金服從2018年7月開始,基於最新的Ray分佈式引擎自研了金融級的在線學習系統,與傳統在線學習框架相比,在端到端延遲、穩定性、研發效率等方面都有不同程度的提高。

Ray是伯克利大學AMPLab在2017年12月開源的高性能分佈式計算引擎,推出至今不足兩年,在計算框架領域還是一個十足的“新生兒”,雖然業內關注度頗高,但真正將Ray付諸應用的企業並不多,螞蟻金服或許是國內第一個“吃螃蟹”的公司。爲什麼Ray能夠得到螞蟻金服的青睞?它與紅透半邊天的開源計算引擎Spark、Flink相比有什麼獨特的優勢?在Ray的使用過程中可能會遇到哪些問題?螞蟻金服的踩坑經驗有何可借鑑之處?帶着這些問題,InfoQ在近期召開的QCon上海2019大會現場採訪了螞蟻金服資深技術專家周家英(徒離),以下爲採訪問答實錄。

InfoQ:能否請您總體介紹一下螞蟻金服大數據技術架構的演進歷程,包括經歷了哪幾個階段、以及每個階段你們所做的重點工作等。

周家英:螞蟻金服的大數據技術架構早期也是從離線計算階段發展起來的,這一階段大概是在2011年到2013年,當時還是以業界傳統的離線計算爲主,也就是Hadoop。2013年之後,隨着分佈式實時計算系統Storm推出,我們開始逐步將業務轉向實時計算。從2016年開始,團隊經過了一次比較大的轉型,希望打造一套迎接下一代大數據計算的技術體系。一開始我們先嚐試將計算引擎剝離出來,讓業務與計算平臺或中臺體系直接對接,而不是對接具體的某個引擎。在這個階段,我們經歷瞭如特徵中臺、事件中臺或者決策中臺這些概念。

從這往後,大數據引擎、整個大數據體系都發展得非常快。我們不想繼續像趕潮流一樣,圍繞一兩個引擎或者一兩種比較流行的計算模式去建立生態,我們認爲應該有一套穩定的大數據計算架構設計思路,能夠覆蓋所有數據層面的問題。我們希望能逐漸沉澱出自己的一套技術體系,這套體系可以同時兼容和支持業界所有比較活躍的計算引擎,所以我們從2017年開始提出所謂“開放架構”的概念,從針對不同計算引擎單獨建設,轉變成建設一套開放的計算架構。

首先,它是一個致力於解決大數據計算問題的整體架構,在這個架構中會包含不同的計算引擎,但是這些引擎在是以插件化的方式存在的,這意味着,當引擎發生變化的時候,上層的業務是無感知的。基於這個架構,我們在一些關鍵能力上做了大量自研工作,比如我們現在正在做的融合計算引擎。傳統的計算模式和計算引擎是綁定的,從Flink到Spark,一個是流一個是批,雖然這兩個之間可以互相轉換,但是很多的特性在轉換的時候其實沒有那麼順暢,而且在轉換的時候有一些優點會丟失。另外,像圖計算模式其實無法被包括在任何計算引擎之中,因爲這些計算引擎在設計的時候已經綁定了一個模式。我們提出融合計算的概念,就是希望能夠用Ray這個分佈式計算框架同時支持多種計算模式,並內聚地把各個計算模式融合起來。這指的是通過不同的融合手段,在研發、容災、運行幾個階段,把各個計算模式通過一個閉環組合在一起,達到性能最優、效率最佳。另外我們在圖計算、AI以及軟硬件結合方面也有比較多的投入。這是螞蟻金服整個大數據計算的發展歷程。

InfoQ:在整個過程中,螞蟻金服有沒有學習一些國外其他企業的經驗?

周家英:當然,我們並不是憑空或盲目地去做所謂的創新,而是會首先看到業界最先進的技術和經驗。我們會和業界一些實戰派的大型互聯網公司對標,比如Google、Facebook、Amazon等;同時會對標一些更偏研究性質的公司的產品或理念,比如微軟、IBM等;另外我們也會結合自己的業務特點和之前踩過的坑綜合考慮。也就是先看業界最領先的技術從工程方面和研究方面分別有哪些,同時再看之前踩過的坑,以及自己遇到的問題,結合自己的業務場景和規模,從而才確定剛纔我們說的工作重點以及未來規劃。

InfoQ:前面提到了實時數據階段和在線數據階段,二者關鍵的不同是什麼?

周家英:實時數據階段是從離線數據階段發展過來的,雖然比以前更快,但是它所面臨的問題也很直觀。比如數據計算從T+1變成T+分鐘或T+秒,這就是從離線到實時了,但是到底是秒還是分鐘,是可以在一個很大的區間裏切換的,這並不會對線上場景有什麼大的影響。如果是一個監控任務或同步任務,那麼它的時效性可以在實時和離線層面自由過渡。但是在線計算需要與線上業務的一致性對齊,比如我們的業務依賴於數據庫進行計算,只有當數據庫返回結果之後才能繼續支撐下一個業務。我們認爲在線數計算更多是支持線上決策業務的大數據計算場景,而非從離線到實時的簡單轉變。

InfoQ:那麼在線數據階段對技術架構的挑戰主要體現在哪裏?

周家英:挑戰非常多。首先,在線計算意味着一個完全不同的計算模式。比如從計算數據準備的角度來講,它是一個流計算的模型;但是如果要能把它查出來,把它依賴於線上的服務,其實又有一種比如說分佈式服務的概念。如何讓查詢得到的數據越來越快、同時要準,也依賴於寫入數據與計算結果和查詢數據最後結果匹配的情況。這是一個不同的計算模式,會更多樣性一些。同時還有一個很關鍵的點,就是我們以前的所謂離線計算或者說實時計算,其實它和在線的應用是分開的,比如在線應用的SLA、物理機房部署是單獨的一套,而大數據的機房部署又是另外一套,兩邊是相對解耦的,所以我們一般會說,當數據倉庫或數據計算產生問題的時候不會對在線業務產生影響。但是在線計算概念出來以後,就意味着我們的數據計算要和數據業務放在一起,所以整個部署架構、容災體系、SLA標準,都需要全面改變和提升。

InfoQ:與傳統在線學習框架相比,螞蟻金服的在線學習系統在哪些方面做了優化?

周家英:傳統的機器學習是離線的機器學習,它的特徵是迭代週期非常長,數據計算是以天或小時級別來進行的,傳統的在線學習主要是指把批計算變成流計算,將流計算的計算引擎和機器學習訓練的引擎連接在一起,然後兩邊做快速迭代來產生數據模型。而螞蟻的在線學習體系是在業界的基礎上,把不同計算模式由不同引擎拼接起來這樣一個架構變成一套融合的架構,即用一個引擎支持不同的計算模式。我們認爲,流計算是一種計算模式、模型訓練是一種模式、分佈式服務是一種模式,我們把這三種模式彙集在一套計算引擎上面,這個計算引擎就是Ray。總結來說,我們用一個計算引擎覆蓋了在線學習的所有環節,而傳統的在線學習框架可能是用不同的引擎分別解決不同的問題,做的是拼接的工作,這是最大的區別。

InfoQ:爲什麼螞蟻金服選擇基於Ray來自研在線學習系統?你們前期做了哪些技術調研工作?與其他分佈式引擎相比,Ray的優勢和不足分別是什麼?

周家英:我們之所以選擇Ray是因爲除了它以外,其他的計算引擎大多已經和某一種計算模式綁定了,比如Spark推出的時候目標就是代替Hadoop做批計算,雖然它也可以跑流計算,但是Spark是拿批來模擬流;Flink推出的時候是爲了代替Storm做更好的流計算,雖然它也可以跑批計算,但是是拿流來模擬批,而在模擬的過程中都會有一定的缺陷或先天不足。因爲這些計算引擎本身就是爲了一種特定的計算模式設計的,它們天然做不到融合。所以我們在16-17年左右找到了伯克利的AMPLab,他們提出的概念很符合我們之前對計算的想法,就是在下層有一層抽象和通用的分佈式調度能力,我們可以基於這個原始層,在上面抽象出不同的計算模式,同時把通用能力沉澱到下層,最終變成兩個層級:第一層是計算模式,流、批、圖計算、機器學習都是不同的計算模式;而下面一層是分佈式服務,我們認爲這是一個核心層,它必須能解決調度問題、容災問題、資源恢復問題等。通過這樣的前期調研加上後期不斷嘗試並跟伯克利AMPLab及社區溝通,我們最終達成了一致,我們認爲Ray是融合計算中的最佳實踐方案。

Ray的優勢恰恰是一開始設計的時候,沒有把自己綁定成某一種場景或計算模式的解決方案,它是一個真正的原生的分佈式框架,可擴展性非常強。它不具備任何強封裝的特性,所以可以非常靈活地做一些改動。劣勢的話,Ray本身是一個很新的框架。我們認爲一個計算引擎在推出的前三年其實都是非常原始的狀態,它在未來可能會有比較大的變化,或者會進行比較大的改動。

但其實Ray的優勢和劣勢也可以看作兩個互補的特性,它既是一個剛剛推出、很多形態還沒有確定的東西,但它也更原生、更簡單、更容易改造、更容易達成融合的效果,是這樣一個相輔相成的關係。目前來看,我們相信Ray是最適合做雲原生的一套計算架構。

InfoQ:現在還有其他企業也在使用Ray這個引擎嗎?

周家英:從官方社區組織的活動或合作伙伴來看,目前阿里巴巴、Facebook、Amazon這些大公司都有在關注及展開合作,但還處於比較早期的階段,相對來講比例非常少。很多企業可能還只是用Ray最原生的API或者原生的一些功能來解決很小一部分增強學習問題,或者做一些實驗性的使用,像螞蟻金服這樣深度參與配合和大規模上線的可能是世界上唯一一家。

InfoQ:螞蟻金服在使用Ray的過程中踩過哪些坑?基於Ray打造在線學習系統有哪些需要注意的地方?能否分享一下你們的經驗。

周家英:坑有很多。Ray本身是一個非常新的引擎,剛從實驗室出來和能真正到線上生產之間是有非常大的鴻溝的。比如實驗室可能經常使用一個比較小規模的測試集來測試它的性能穩定性等,但是在企業的生產環境裏,它可能需要更大規模的測試集並進行更嚴格的可靠性的保障,可能中間有許多它之前沒有的功能是我們需要再獨立開發並重新貢獻回給社區的,如可用性、性能優化,還有配套的生態,如調優、DevOps工具,以及部署、調度等這樣跟上下游結合的東西。

除了上面這些工程上的坑,還有一些別的問題。比如Ray需要兼容TensorFlow,要實現多語言的調度、多語言的容災等,有很多額外的工作需要做,比如在線訓練過程當中的一些機器學習的特性語言,比如如何進行不同模型的訓練並且不會對其他模型造成影響,比如在線學習如何把噪聲降到最低,如何做版本回滾、如何做在線打通等。

這些都是我們認爲比較大的一些特性,也是傳統機器學習體系難以保證的一些點,螞蟻金服圍繞這些點投入了大量精力並做了大量工作,目前我們有幾十個人撲在這個項目上。我們也希望後續能把這些工作回饋給社區。我們計劃在明年3月的時候將在線學習的這套框架和對Ray所作的改動全部開源,就是不希望其他公司或使用者再去踩一遍和我們相同的坑。

InfoQ:您認爲Ray引擎現在是否足夠成熟?什麼樣的企業或場景適合選用Ray?爲什麼?

周家英:以官方開源的Ray版本來講,它還是一個相對原始、沒有太多功能的原生態的計算引擎,從這個角度來看,如果其他企業想用Ray做Reinforcement Learning或者深度學習的計算可能是比較實用的。那如果對應到我們現在內部的Mobius版本,它包含一套在線學習的整體研發平臺,同時有流模式、在線學習模式、機器學習模式以及分佈式服務等特性的支持。對於這個版本,我認爲所有希望快速進行在線學習作業研發的企業都可以使用,因爲它已經是一個完整的平臺,我們把業務的計算領域封裝得更好,它更適用於生產環境。

InfoQ:你們是什麼時候開始籌劃把Ray的內部版本開源出來的?

周家英:開源的想法在我們開始做這個項目的時候就有了。我們不希望關起門來做一個東西,而是希望在它發展成熟到一定階段之後,把它變成一個大衆都可以去共享的項目和產品。我們既希望它可以服務於不同客戶部門、不同使用者,也希望使用者可以能貢獻更好的Feature進來。

我們希望通過Ray構建在線學習系統,讓整個業界的在線學習能力更進一步,比如端到端延遲更低、可用性更高,或者整體的計算體系更內聚,將Ray開源肯定會有技術方面的積極影響。如果從這個項目的影響來講,我們也希望通過開源,讓更多的Contributer和Committer加入進來,把這個項目的特性或能力做得越來越強,同時也可以讓Ray這個計算引擎被越來越多的人知道。

InfoQ:螞蟻金服接下來還有什麼技術上的規劃?會關注哪些新技術?

周家英:大數據計算未來的技術規劃包括幾點,一個是開放式的計算架構;一個是融合的計算引擎,也就是Ray;還有一體式的全圖計算,所謂大的包含圖計算的場景;然後還有硬件與計算的結合,我們有硬件團隊專門做硬件方面的優化使之與計算更加適配,這是我們整體的計劃。

其他新技術還有比如數據湖以及圖計算相關的,包括超大規模圖計算、快速動態圖計算、統一的圖語言等,這些領域我們也都一直在關注。

採訪嘉賓介紹

周家英(徒離),螞蟻金服資深技術專家,現負責數據技術部在線計算團隊。2011 年加入支付寶後,一直參與支付寶數據相關工作。經歷了螞蟻金服從離線數據,實時數據,到目前在線數據的不同的階段,參與過螞蟻實時數據平臺,Serverless Streaming,在線作業調度,計算元數據,以及新一代計算引擎的建設。熟悉螞蟻數據技術架構演進歷史,對分佈式環境下的在線計算場景及高可用方案有切身體會。

更多國內外一線技術大咖分享請持續關注QCon全球軟件開發大會,訪問官網與技術大咖面對面交流實踐心得。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章