开发者解读:为什么蚂蚁要用融合计算这种新计算模式?
導讀:如今大部分人工智能應用是基于監督學習范式開發的,即模型在線下進行訓練,然后部署到服務器上進行線上預測,這樣的開發方式在實時響應上存在較大的局限。隨著計算和 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;還有一體式的全圖計算,所謂大的包含圖計算的場景;然后還有硬件與計算的結合,我們有硬件團隊專門做硬件方面的優化使之與計算更加適配,這是我們整體的計劃。
其他新技術還有比如數據湖以及圖計算相關的,包括超大規模圖計算、快速動態圖計算、統一的圖語言等,這些領域我們也都一直在關注。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的开发者解读:为什么蚂蚁要用融合计算这种新计算模式?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 系统性能提升利刃 | 缓存技术使用的实践
- 下一篇: Express 的使用