Categories
程式開發

阿里開源全球首個批流一體機器學習平台Alink,Blink功能已全部貢獻至Flink


11月28日,Flink Forward Asia 2019在北京國家會議中心召開,阿里在會上發布Flink 1.10版本功能前瞻,同時宣布基於Flink的機器學習算法平台Alink正式開源,這也是全球首個批流一體的算法平台,旨在降低算法開發門檻,幫助開發者掌握機器學習的生命全週期。在去年的Flink Forward China峰會上,阿里宣布將開源Flink的內部分支Blink,把阿里內部對Flink的優化工作全部開放給開源社區,在業內引發熱烈討論,其中有期待也有懷疑。一年後的今天,阿里是否兌現了去年所作的承諾? Blink的合併工作進展如何?剛剛開源的Alink算法平台有哪些獨特之處? AI前線在會上對阿里巴巴資深技術專家、實時計算負責人王峰(花名莫問)進行了獨家專訪,讓我們一起來看看Flink的最新變化,以及阿里基於Flink又有哪些新的工作成果。

自2019年1月起,阿里巴巴逐步將內部維護的Blink回饋給Flink開源社區,目前貢獻代碼數量已超過100萬行。國內包括騰訊、百度、字節跳動等公司,國外包括Uber、Lyft、Netflix等公司都是Flink的使用者。

阿里開源全球首個批流一體機器學習平台Alink,Blink功能已全部貢獻至Flink 1

今年8月發布的Flink 1.9.0是阿里內部版本Blink合併入Flink後的首次發版,在今天的Flink Forward 2019大會上,阿里發布了Flink 1.10版本功能前瞻,正式版本預計於2020年1月發布。

Flink 1.10版本功能前瞻:Blink全部功能進入Flink

據介紹,Flink 1.10版本可以看作一個比較重要的里程碑式版本,至此,Blink全部功能都已經進入Flink,包括Blink中比較關鍵的設計和通用的優化。以下是該版本將包含的主要功能和技術亮點前瞻:

  • 完成Blink/Flink merge

    • 更加強大的Blink Query Processor
      • DDL 增強,支持在建表語句中定義計算列和 watermark
      • 生產級別的Batch支持,完整支持 TPC-H 和 TPC-DS 測試集,其中 TPC-DS 10T的性能是Hive 3.0的7倍
    • 完成scheduler的重構,支持更靈活batch調度策略
    • 更完善,更細粒度,更靈活的資源管理
      • 對 TaskExecutor 的內存模型進行了梳理,解決了 RockDB 內存難以配置和管控、TM 啟動前後內存計算不一致等長期存在的問題
      • 簡化了內存計算邏輯,降低了配置難度
      • 對算子級別的資源用量進行更精細的管理,解決算子資源超用帶來的性能及穩定性問題,提高資源利用效率
  • Hive兼容性生產可用

    • Meta 兼容,支持直接讀取 Hive catalog,版本覆蓋1.x,2.x到3.x
    • 數據格式兼容,支持直接讀取 Hive 表,同時也支持寫成 Hive 表的格式
    • UDF 兼容,支持在 Flink SQL 內直接調用 Hive 的UDF,UDTF,UDAF
  • 更加強大的Python支持

    • 增加了對 Native Python UDF 的支持,用戶可以用Python開發自己的業務邏輯
    • 很好的支持了 Python 類庫的依賴管理,Python用戶不僅可以自定義Python UDF 而且可以與其他現有的Python library進行集成
    • 在架構上引入了Beam Portability Framework,Flink與Beam社區共同打造功能便捷,性能優越的Python UDF支持框架
    • 與Flink資源管理框架進行集成,實現了對Python UDF資源的管控
  • 支持原生K8S集成

    • 原生的資源管理,可以根據作業的資源需求動態去申請TaskManager,不需要依賴外部系統或組件
    • 更加方便的任務提交,不需要安裝kubectl等工具,可以達到和Yarn相似的體驗
  • 新增多個主流機器學習算法庫

    • 包括邏輯回歸,隨機森林,KMeans等

AI前線:在1.10版本中,Blink全部功能都已經進入Flink,而這距離上一次1.9發布剛過去三個月,那也是Blink首次併入Flink的版本發布,距離去年阿里宣布要開源Blink也不過一年時間。為什麼Blink的Merge進度能做到這麼快?過程中遇到了哪些問題?你們是如何解決的?

莫問:我們投入了很多資源,包括有數十位技術人員來做這個事情,並行度比較大,所以才能在比較短的時間內貢獻多達150萬行代碼。

AI前線:整個過程中有沒有遇到什麼比較棘手的問題?

莫問:社區是一個相對開放透明的場景,不像自己的項目可以比較隨意地改動,而是要走一個民主的過程,包括要經過社區的討論、大家的認可,要保證代碼的質量等。我們既要做到快速推進,還要保證質量和社區的公平性,這個挑戰還是很大的。

AI前線:所以你們怎麼平衡這兩件事情?

莫問:整個Flink社區的合作模式是比較高效的,社區不同模塊的負責人每週都會有視頻會議,可能是不同國家的社區討論,這些都做得非常高效,項目管理做得非常好。在這種機制的保證下,我們可以讓代碼快速進入同時保證迭代的速度。其實這對工程效率的開發也是非常大的挑戰。說白了,我們投入了很多技術人員做這件事,但也不是只看數量。我們投入的很多人手本身就是Apache項目的PMC和Committer,而不完全是普通的工程師,這些人本身對於Apache項目的工作機制和流程都比較熟悉,他們的效率和作戰能力不能按一個人這麼算。社區就是這樣,不是人多的問題,還需要合適的人。

AI前線:您上午在演講中提到Flink正在成為一個真正的Unified Engine。有趣的是,我們近期已經不止一次聽到不同的計算引擎提出類似的說法,比如Spark的核心理念也是成為“統一數據分析平台”,能否請您談談Flink的設計理念?二者的統一有什麼相同點和不同點?

莫問:Flink的核心理念我們強調過很多次,它的本質計算思想是流處理核心。流處理核心就是所有的都是基於Stream來處理,批可以看作是一個有限的流。像今天提到的在線的Stateful Function也是Event Driven,所有的Event不停地進入做函數計算,做在線有狀態的計算,然後把結果給用戶,再不停地迭代。其實在線服務也是無限的,也是不會停止的處理,不停地有人訪問,有人處理。 Flink的核心是基於流計算的Core,去覆蓋Offline和Online,這樣它跟Spark還是不太一樣的。 Spark認為所有東西都是基於Batch的,而流是無數個Batch湊在一起,這一點不太一樣。

但大家在宏觀上的願景都是類似的,用一套計算引擎技術或大數據處理的技術,來解決盡量多的場景,這樣從用戶的角度來說學習成本更低、開發效率更高、運維成本也更低。所以大家的目標和理念是一致的,只不過在實現這個目標的方法上的選擇是不一樣的。

AI前線:下面這個問題我們之前問過Databricks的工程師,今天也想問問您,如果我要做統一的平台,你也要做統一平台,那會不會存在最後到底誰能真正統一誰的問題?

莫問:我覺得大家並不是說做什麼,什麼就一定會贏,一定會好。從我個人態度來說,技術還是需要有一定良性的競爭,這樣才能相互學習,同時條條大路通羅馬,不一定哪一個絕對正確,可能不同場景有不同的偏好或不同的特定區域的需求,或適應的場景不一樣。解決類似問題有兩三家公司共存,這種狀態是比較健康的,就像數據庫領域有MySQL、PostgreSQL等,在線服務也類似,起碼得有兩家大公司在一起競爭,是比較合適的。但最終哪個做得更好,還是取決於是否能把自己的理論做到極致。因為理論是理論,你的理論和我的理論聽起來各有千秋,但是誰最後能贏看的是細節,包括用戶體驗。你是否按照正確的方法在做,細節做得夠不夠好,而不是大家聽起來思路一樣就沒有區別了。細節和社區生態的發展、推進過程都很重要。

開源Alink:Flink機器學習進度幾何?

Flink在機器學習領域的進展一直是眾多開發者關注的焦點,今年Flink迎來了一個小里程碑:機器學習算法平台Alink開源,這也宣告了Flink正式切入AI領域。

Alink開源項目鏈接:https://github.com/alibaba/Alink

Alink是阿里巴巴機器學習算法團隊從2017年開始基於實時計算引擎Flink研發的新一代機器學習算法平台,提供豐富的算法組件庫和便捷的操作框架,開發者可以一鍵搭建覆蓋數據處理、特徵工程、模型訓練、模型預測的算法模型開發全流程。作為業界首個同時支持批式算法、流式算法的機器學習平台,Alink提供了Python 接口,開發者無需Flink技術背景也可以輕鬆構建算法模型。 Alink這個名字取自相關名稱(Alibaba, Algorithm, AI, Flink,Blink)的公共部分。

據悉,Alink已被廣泛運用在阿里巴巴搜索、推薦、廣告等多個核心實時在線業務中。在剛剛落幕的天貓雙11中,單日數據處理量達到970PB,每秒處理峰值數據高達25億條。 Alink成功經受住了超大規模實時數據訓練的檢驗,並幫助提升4% CTR(商品點擊轉化率)。

AI前線:能否先介紹一下FlinkML和Alink的概況,以及二者的關係?

莫問:FlinkML是Flink社區現存的一套機器學習算法庫,這一套算法庫已經存在很久而且更新比較緩慢。 Alink是基於新一代的Flink,完全重新寫了一套,跟FlinkML沒有代碼上的關係。 Alink由阿里巴巴大數據團隊開發,開發出來以後在阿里巴巴內部也用了,然後現在正式開源出來。

未來我們希望Alink的算法逐漸替換掉FlinkML的算法,可能Alink就會成為新一代版本的FlinkML,當然替換還需要一個比較漫長的過程。Alink包含了非常多的機器學習算法,往Flink貢獻或發布的時候也需要比較大的帶寬,我們擔心整個過程耗時會比較長,所以先把Alink單獨開源出來,大家如果有需要的可以先用起來。後面貢獻進展比較順利的情況下,Alink應該能完全合併到FlinkML,也就是直接進入Flink生態的主幹,這對於Alink來說是最好的歸宿,到這個時候FlinkML就可以跟SparkML完全對應起來了。

AI前線:除了Alink以外,Flink當前在機器學習領域的工作還有哪些進展?和其他計算引擎相比,您如何評價當前Flink在機器學習和AI領域的工作,它的競爭力足夠強嗎?

莫問:其實我們還有很多正在進行的工作。機器學習的核心是迭代計算,機器學習訓練就是不停地對數據進行迭代訓練,訓練出來一個模型然後上線。在核心訓練的基礎上,Flink正在設計新的迭代計算,因為Flink是基於流式計算,所以它的迭代計算可以轉化為mini-batch的迭代計算,可以根據數據條目數也可以根據數據段的時長,在流上打出很多細粒度的數據段。

Flink的好處是在流上打細粒度的數據段可行性上沒有問題,因為它本來就是純流式的,截成一段一段沒有問題。而Spark的迭代是把一個數據集做一次迭代,再做一次迭代,這個數據集很難切得特別細,切出來一段就是一次任務的運行,細粒度的挑戰比較大。 Flink的好處是本身可以把粒度截得很細,所以重構原有的迭代計算是可行的。

Flink最早的迭代計算也跟Spark一樣,要么是一批迭代要么是一條一條迭代,完全是兩個極端,我們想把它做一個抽象,可以按照時間、大小來設定迭代的batch大小,就類似於Flink窗口的概念,這樣可以支持嵌套迭代、增量迭代等。我們在引擎層面做好了基於流的迭代技術之後,整個機器學習的訓練就會大幅度加速。雖然算法本身的效果可能是一樣的,但是運行的性能和速度不一樣。

同時它還可以解決在線訓練的問題,比如說互聯網的日誌流、用戶行為是不停產生的,Flink流式迭代可以不間斷地處理用戶產生的實時數據,可以在線迭代更新,模型可以每隔5分鐘更新一次,也可以每隔1分鐘更新一次。這樣它的模型上線是一個7×24小時環狀的更新,這樣一套在線學習的體系會給用戶帶來很大的變化,這個變化不是簡單的30%的提升或者是工程上的優化,而是在使用機器學習的理念上會有優化。

這是我們當前正在做的工作,社區裡也已經開始討論了,可能會作為Flink明年1-2個版本的重點。你可以這麼認為,Flink去年還是Unified Engine,今年開始擁抱AI了,2019年我們做的很多工作是偏SQL的優化,明年我們會更多地切入到AI,就是FlinkML和AI場景的方向上。

AI前線:阿里是什麼時候決定開源Alink的?

莫問:去年Blink開源的時候,我們就在考慮是否把Alink一起開源了。但是後來覺得,第一個開源還沒做,不敢一下子步子邁得這麼大,要一步步來,而且Blink開源也要準備很多東西。當時我們沒有辦法做到兩個大的項目同時開源,所以就先把Blink開源做好。

Blink開源以後,我們想是不是把Alink的算法推到Flink就好了。但是發現往社區貢獻確實是比較複雜的過程,Blink在推的時候已經佔用了很大的帶寬,而社區的帶寬就那麼多,沒有辦法同時做多件事情。社區也需要一段時間消耗,所以決定先把Blink消耗掉,貢獻完了,社區吃得下,然後再把Alink逐步貢獻回社區。這是沒有辦法跨越的一個過程。

開源是一個很慎重的過程,不能隨意想開就開一個。孩子不能管生不管養,要發東西就要有一個長期的計劃,要負責任的,得給大家一個很明確的信號,這是有長期計劃的,不是放了開源就結束了,以後肯定會有用戶問你們放上去以後管不管?如果我們不想好這些問題,對用戶來說就適得其反,大家覺得你並沒有給大家一個清晰的信號,大家也不敢用。

AI前線:相比SparkML,Alink的亮點是什麼?對於開發者來說在哪些方面會比較有吸引力?

莫問:Alink一是依賴於Flink計算引擎層;第二Flink框架中有UDF的算子,Alink本身對算法做了很多優化,包括在算法實現上做了細節的優化,比如通信、數據訪問、迭代數據處理的流程等多方面的優化。基於這些優化可以讓算法運行的效率更高,同時我們還做了很多配套工具,讓易用性更好。同時Alink還有一個核心技術,就是做了很多FTRL的算法,是天然針對在線學習的。在線學習需要高頻快速更新的迭代算法,這種情況下Alink有天然的優勢,像今日頭條、微博的信息流都會經常遇到這樣的在線場景。

阿里開源全球首個批流一體機器學習平台Alink,Blink功能已全部貢獻至Flink 2

在離線學習上Alink跟SparkML對比基本上差不多,只要大家工程化都做得足夠好,離線學習無法打出代差,真正的代差一定是設計上的理念不一樣。設計上、產品形態、技術形態不一樣才會有代差明顯的優勢。

相比SparkML,我們的基調是批式算法基本一致,包括功能和性能,Alink可以支持算法工程師常用的所有算法,包括聚類、分類、回歸、數據分析、特徵工程等,這些類型的算法是算法工程師常用的。我們開源之前也對標了SparkML所有的算法,做到了100%對標。除此之外,Alink最大的亮點是有流式算法和在線學習,在自己的特色上能做到獨樹一幟,這樣對用戶來說沒有短板,同時優勢又很明顯。

阿里開源全球首個批流一體機器學習平台Alink,Blink功能已全部貢獻至Flink 3

Alink支持的機器學習算法

後續規劃和未來展望

AI前線:接下來Flink會按照什麼樣的頻率更新版本?能否透露Flink接下來還會有哪些值得期待的新特性或功能?

莫問:3-4個月,基本上會是一個季度更新一個版本,比如2020年1月份會發1.10,4月份會發1.11。現在還說不好什麼時候切2.0,2.0應該會是一個非常有里程碑意義的版本。現在Flink社區可以看到非常多的點,不僅有AI、機器學習,還有今天主題演講Stephan Ewen提到的Stateful Function,也是非常有前景的。其實在線場景還有很多有前景的東西可以挖掘,Serverless(Faas)也是Flink後面的方向。 Flink社區有一點非常好,它剛剛演進到1.x版本,還有很大的上升空間,社區的生命力和狀態都很好,大家有很多想法想放進去。

AI前線:未來大數據領域還有哪些新的技術方向或趨勢是比較重要的?

莫問:大數據和AI的融合可能是一個很好的機會,大家現在純玩大數據基本上五花八門什麼都玩過了,各種項目層出不窮。 AI也是百花爭鳴,但其實用戶想要的不只是AI,數據在哪? AI沒有數據怎麼玩?得把特徵算好、樣本算好才能訓練出好的模型。這個模型只有經過不斷地迭代反饋才能越來越好。這個過程中數據處理和數據分析非常重要,如果沒有一套完整的反饋體系,大數據+AI的鏈路玩不通。有再好的引擎,如果沒有閉環的計算路徑也無法真正發揮生產或業務上的效果。

所以要把大數據+AI整套處理做成非常易用、好用的解決方案,這是大家最需要的。現在可能一個個零散的點大家已經做到了,很多東西都能找到對應的開源項目,但是需要有一個整體的平台把所有技術串起來。

AI前線:Flink在一定程度上也想做這樣的?

莫問:明年我們會開源一個新的項目AI Flow,目前還沒有Ready,我們希望AI Flow可以通過一個工作流程把數據處理、預處理,包括模型的訓練、模型管理、模型上線、動態更新,更新完拿到反饋,反饋之後怎麼反向優化流程,整個系統串起來。其中每個環節都可以使用不同的引擎來實現,用Flink OK,用Spark也OK,就看最後哪個好用。比如可以用Flink做大數據處理,TensorFlow做深度學習訓練,FlinkML做流式訓練,把這些都串聯起來給用戶提供一個端到端的解決方案,這是很有前景的一個項目。

AI前線:這是不是跟Databricks的MLflow有點類似?

莫問:AI Flow大於MLflow,因為MLflow只定義了數據格式,AI Flow可能跟Kubeflow更像,AI Flow偏工作流程,MLflow偏重於數據格式,沒有覆蓋特別完整的工作流程,但我們也不排除MLflow將來越做越大。

為什麼我們要做這個東西?因為我們在阿里巴巴內部非常熟悉整個搜索推薦廣告最核心的系統怎麼玩,如何一步步流程化才能形成一套大腦去調控整個流量,甚至是搜索流量、推薦流量、廣告流量,在業務流量和現金流量去battle等,這是整個商業化最核心的系統,這個系統就是基於大數據+AI的方案,而這套方案離不開workflow,離不開數據格式的定義,離不開不同計算引擎的協同,這是更大的一個概念。我們明年會在這方面投入更多資源,也會聯合其他的公司一起來做。

更多Flink、Blink和實時流計算的技術乾貨:

Apache Flink 1.9重磅發布!首次合併阿里內部版本Blink重要功能

阿里重磅開源Blink:為什麼我們等了這麼久?

為什麼阿里會選擇 Flink 作為新一代流式計算引擎?