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

大濤學長發表於2019-12-09
自 2019 年 1 月起,阿里巴巴逐步將內部維護的 Blink 回饋給 Flink 開源社群,目前貢獻程式碼數量已超過 100 萬行。國內包括騰訊、百度、位元組跳動等公司,國外包括 Uber、Lyft、Netflix 等公司都是 Flink 的使用者。

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

今年 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 中比較關鍵的設計和通用的最佳化。以下是該版本將包含的主要功能和技術亮點前瞻:
1. 完成Blink/Flink merge
(1) 更加強大的Blink Query Processor
  • DDL 增強,支援在建表語句中定義計算列和 watermark
  • 生產級別的Batch支援,完整支援 TPC-H 和TPC-DS 測試集,其中 TPC-DS 10T的效能是Hive3.0的7倍 (2)完成scheduler的重構,支援更靈活batch排程策略
(3)更完善,更細粒度,更靈活的資源管理
  • 對 TaskExecutor 的記憶體模型進行了梳理,解決了 RockDB 記憶體難以配置和管控、TM 啟動前後記憶體計算不一致等長期存在的問題
  • 簡化了記憶體計算邏輯,降低了配置難度
  • 對運算元級別的資源用量進行更精細的管理,解決運算元資源超用帶來的效能及穩定性問題,提高資源利用效率
2.Hive相容性生產可用
(1)Meta 相容,支援直接讀取 Hive catalog,版本覆蓋1.x,2.x到3.x (2)資料格式相容,支援直接讀取 Hive 表,同時也支援寫成 Hive 表的格式 (3)UDF 相容,支援在 Flink SQL 內直接呼叫 Hive 的UDF,UDTF,UDAF
3.更加強大的Python支援
  • 增加了對 NativePython UDF 的支援,使用者可以用Python開發自己的業務邏輯
  • 很好的支援了 Python 類庫的依賴管理,Python使用者不僅可以自定義Python UDF 而且可以與其他現有的Python library進行整合
  • 在架構上引入了BeamPortability Framework,Flink與Beam社群共同打造功能便捷,效能優越的Python UDF支援框架
  • 與Flink資源管理框架進行整合,實現了對Python UDF資源的管控
4.支援原生K8S整合
(1)原生的資源管理,可以根據作業的資源需求動態去申請TaskManager,不需要依賴外部系統或元件 (2)更加方便的任務提交,不需要安裝kubectl等工具,可以達到和Yarn相似的體驗
5.新增多個主流機器學習演算法庫
(1)包括邏輯迴歸,隨機森林,KMeans等
提問:在 1.10 版本中,Blink 全部功能都已經進入 Flink,而這距離上一次 1.9 釋出剛過去三個月,那也是 Blink 首次併入 Flink 的版本釋出,距離去年阿里宣佈要開源 Blink 也不過一年時間。為什麼 Blink 的 Merge 進度能做到這麼快?過程中遇到了哪些問題?你們是如何解決的?
莫問: 我們投入了很多資源,包括有數十位技術人員來做這個事情,並行度比較大,所以才能在比較短的時間內貢獻多達 150 萬行程式碼。
提問:整個過程中有沒有遇到什麼比較棘手的問題? 莫問: 社群是一個相對開放透明的場景,不像自己的專案可以比較隨意地改動,而是要走一個民主的過程,包括要經過社群的討論、大家的認可,要保證程式碼的質量等。我們既要做到快速推進,還要保證質量和社群的公平性,這個挑戰還是很大的。
提問:所以你們怎麼平衡這兩件事情?
莫問: 整個 Flink 社群的合作模式是比較高效的,社群不同模組的負責人每週都會有視訊會議,可能是不同國家的社群討論,這些都做得非常高效,專案管理做得非常好。在這種機制的保證下,我們可以讓程式碼快速進入同時保證迭代的速度。其實這對工程效率的開發也是非常大的挑戰。說白了,我們投入了很多技術人員做這件事,但也不是隻看數量。我們投入的很多人手本身就是 Apache 專案的 PMC 和 Committer,而不完全是普通的工程師,這些人本身對於 Apache 專案的工作機制和流程都比較熟悉,他們的效率和作戰能力不能按一個人這麼算。社群就是這樣,不是人多的問題,還需要合適的人。
提問:您上午在演講中提到 Flink 正在成為一個真正的 Unified Engine。有趣的是,我們近期已經不止一次聽到不同的計算引擎提出類似的說法,比如 Spark 的核心理念也是成為“統一資料分析平臺”,能否請您談談 Flink 的設計理念?二者的統一有什麼相同點和不同點?
莫問:Flink 的核心理念我們強調過很多次,它的本質計算思想是流處理核心。流處理核心就是所有的都是基於 Stream 來處理,批可以看作是一個有限的流。像今天提到的線上的 Stateful Function 也是 Event Driven,所有的 Event 不停地進入做函式計算,做線上有狀態的計算,然後把結果給使用者,再不停地迭代。其實線上服務也是無限的,也是不會停止的處理,不停地有人訪問,有人處理。Flink 的核心是基於流計算的 Core,去覆蓋 Offline 和 Online,這樣它跟 Spark 還是不太一樣的。Spark 認為所有東西都是基於 Batch 的,而流是無數個 Batch 湊在一起,這一點不太一樣。
但大家在宏觀上的願景都是類似的,用一套計算引擎技術或大資料處理的技術,來解決儘量多的場景,這樣從使用者的角度來說學習成本更低、開發效率更高、運維成本也更低。所以大家的目標和理念是一致的,只不過在實現這個目標的方法上的選擇是不一樣的。
**提問:下面這個問題我們之前問過 Databricks 的工程師,今天也想問問您,如果我要做統一的平臺,你也要做統一平臺,那會不會存在最後到底誰能真正統一誰的問題?
**莫問: 我覺得大家並不是說做什麼,什麼就一定會贏,一定會好。從我個人態度來說,技術還是需要有一定良性的競爭,這樣才能相互學習,同時條條大路通羅馬,不一定哪一個絕對正確,可能不同場景有不同的偏好或不同的特定區域的需求,或適應的場景不一樣。解決類似問題有兩三家公司共存,這種狀態是比較健康的,就像資料庫領域有 MySQL、PostgreSQL 等,線上服務也類似,起碼得有兩家大公司在一起競爭,是比較合適的。但最終哪個做得更好,還是取決於是否能把自己的理論做到極致。因為理論是理論,你的理論和我的理論聽起來各有千秋,但是誰最後能贏看的是細節,包括使用者體驗。你是否按照正確的方法在做,細節做得夠不夠好,而不是大家聽起來思路一樣就沒有區別了。細節和社群生態的發展、推進過程都很重要。

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

Flink 在機器學習領域的進展一直是眾多開發者關注的焦點,今年 Flink 迎來了一個小里程碑:機器學習演算法平臺 Alink 開源,這也宣告了 Flink 正式切入 AI 領域。
Alink 開源專案連結:
Alink 是阿里巴巴機器學習演算法團隊從 2017 年開始基於實時計算引擎 Flink 研發的新一代機器學習演算法平臺,提供豐富的演算法元件庫和便捷的操作框架,開發者可以一鍵搭建覆蓋資料處理、特徵工程、模型訓練、模型預測的演算法模型開發全流程。作為業界首個同時支援批式演算法、流式演算法的機器學習平臺,Alink 提供了 Python 介面,開發者無需 Flink 技術背景也可以輕鬆構建演算法模型。Alink 這個名字取自相關名稱(Alibaba, Algorithm, AI, Flink,Blink)的公共部分。
據悉,Alink 已被廣泛運用在阿里巴巴搜尋、推薦、廣告等多個核心實時線上業務中。在剛剛落幕的天貓雙 11 中,單日資料處理量達到 970PB,每秒處理峰值資料高達 25 億條。Alink 成功經受住了超大規模實時資料訓練的檢驗,並幫助提升 4% CTR(商品點選轉化率)。
提問:能否先介紹一下 FlinkML 和 Alink 的概況,以及二者的關係?
莫問:FlinkML 是 Flink 社群現存的一套機器學習演算法庫,這一套演算法庫已經存在很久而且更新比較緩慢。Alink 是基於新一代的 Flink,完全重新寫了一套,跟 FlinkML 沒有程式碼上的關係。Alink 由阿里巴巴大資料團隊開發,開發出來以後在阿里巴巴內部也用了,然後現在正式開源出來。
未來我們希望 Alink 的演算法逐漸替換掉 FlinkML 的演算法,可能 Alink 就會成為新一代版本的 FlinkML,當然替換還需要一個比較漫長的過程。Alink 包含了非常多的機器學習演算法,往 Flink 貢獻或釋出的時候也需要比較大的頻寬,我們擔心整個過程耗時會比較長,所以先把 Alink 單獨開源出來,大家如果有需要的可以先用起來。後面貢獻進展比較順利的情況下,Alink 應該能完全合併到 FlinkML,也就是直接進入 Flink 生態的主幹,這對於 Alink 來說是最好的歸宿,到這個時候 FlinkML 就可以跟 SparkML 完全對應起來了。
提問:除了 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 場景的方向上。
**提問:阿里是什麼時候決定開源 Alink 的? ** 莫問: 去年 Blink 開源的時候,我們就在考慮是否把 Alink 一起開源了。但是後來覺得,第一個開源還沒做,不敢一下子步子邁得這麼大,要一步步來,而且 Blink 開源也要準備很多東西。當時我們沒有辦法做到兩個大的專案同時開源,所以就先把 Blink 開源做好。
Blink 開源以後,我們想是不是把 Alink 的演算法推到 Flink 就好了。但是發現往社群貢獻確實是比較複雜的過程,Blink 在推的時候已經佔用了很大的頻寬,而社群的頻寬就那麼多,沒有辦法同時做多件事情。社群也需要一段時間消耗,所以決定先把 Blink 消耗掉,貢獻完了,社群吃得下,然後再把 Alink 逐步貢獻回社群。這是沒有辦法跨越的一個過程。
開源是一個很慎重的過程,不能隨意想開就開一個。孩子不能管生不管養,要發東西就要有一個長期的計劃,要負責任的,得給大家一個很明確的訊號,這是有長期計劃的,不是放了開源就結束了,以後肯定會有使用者問你們放上去以後管不管?如果我們不想好這些問題,對使用者來說就適得其反,大家覺得你並沒有給大家一個清晰的訊號,大家也不敢用。
提問:相比 SparkML,Alink 的亮點是什麼?對於開發者來說在哪些方面會比較有吸引力?
莫問:Alink 一是依賴於 Flink 計算引擎層;第二 Flink 框架中有 UDF 的運算元,Alink 本身對演算法做了很多最佳化,包括在演算法實現上做了細節的最佳化,比如通訊、資料訪問、迭代資料處理的流程等多方面的最佳化。基於這些最佳化可以讓演算法執行的效率更高,同時我們還做了很多配套工具,讓易用性更好。同時 Alink 還有一個核心技術,就是做了很多 FTRL 的演算法,是天然針對線上學習的。線上學習需要高頻快速更新的迭代演算法,這種情況下 Alink 有天然的優勢,像今日頭條、微博的資訊流都會經常遇到這樣的線上場景。

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

在離線學習上 Alink 跟 SparkML 對比基本上差不多,只要大家工程化都做得足夠好,離線學習無法打出代差,真正的代差一定是設計上的理念不一樣。設計上、產品形態、技術形態不一樣才會有代差明顯的優勢。
相比 SparkML,我們的基調是批式演算法基本一致,包括功能和效能,Alink 可以支援演算法工程師常用的所有演算法,包括聚類、分類、迴歸、資料分析、特徵工程等,這些型別的演算法是演算法工程師常用的。我們開源之前也對標了 SparkML 所有的演算法,做到了 100% 對標。除此之外,Alink 最大的亮點是有流式演算法和線上學習,在自己的特色上能做到獨樹一幟,這樣對使用者來說沒有短板,同時優勢又很明顯。

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

Alink 支援的機器學習演算法

後續規劃和未來展望

提問:接下來 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 整套處理做成非常易用、好用的解決方案,這是大家最需要的。現在可能一個個零散的點大家已經做到了,很多東西都能找到對應的開源專案,但是需要有一個整體的平臺把所有技術串起來。
提問:Flink 在一定程度上也想做這樣的?
莫問: 明年我們會開源一個新的專案 AI Flow,目前還沒有 Ready,我們希望 AI Flow 可以透過一個工作流程把資料處理、預處理,包括模型的訓練、模型管理、模型上線、動態更新,更新完拿到反饋,反饋之後怎麼反向最佳化流程,整個系統串起來。其中每個環節都可以使用不同的引擎來實現,用 Flink OK,用 Spark 也 OK,就看最後哪個好用。比如可以用 Flink 做大資料處理,TensorFlow 做深度學習訓練,FlinkML 做流式訓練,把這些都串聯起來給使用者提供一個端到端的解決方案,這是很有前景的一個專案。
提問:這是不是跟 Databricks 的 MLflow 有點類似?
莫問:AI Flow 大於 MLflow,因為 MLflow 只定義了資料格式,AI Flow 可能跟 Kubeflow 更像,AI Flow 偏工作流程,MLflow 偏重於資料格式,沒有覆蓋特別完整的工作流程,但我們也不排除 MLflow 將來越做越大。
為什麼我們要做這個東西?因為我們在阿里巴巴內部非常熟悉整個搜尋推薦廣告最核心的系統怎麼玩,如何一步步流程化才能形成一套大腦去調控整個流量,甚至是搜尋流量、推薦流量、廣告流量,在業務流量和現金流量去 battle 等,這是整個商業化最核心的系統,這個系統就是基於大資料 +AI 的方案,而這套方案離不開 workflow,離不開資料格式的定義,離不開不同計算引擎的協同,這是更大的一個概念。我們明年會在這方面投入更多資源,也會聯合其他的公司一起來做。


本文為雲棲社群原創內容,未經允許不得轉載。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69947441/viewspace-2667570/,如需轉載,請註明出處,否則將追究法律責任。

相關文章