阿里重磅開源全球首個批流一體機器學習平臺Alink,Blink功能已全部貢獻至Flink
自 2019 年 1 月起,阿里巴巴逐步將內部維護的 Blink 回饋給 Flink 開源社區,目前貢獻代碼數量已超過 100 萬行。國內包括騰訊、百度、字節跳動等公司,國外包括 Uber、Lyft、Netflix 等公司都是 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 Query Processor
(1)Meta 兼容,支持直接讀取 Hive catalog,版本覆蓋1.x,2.x到3.x
(2)數據格式兼容,支持直接讀取 Hive 表,同時也支持寫成 Hive 表的格式
(3)UDF 兼容,支持在 Flink SQL 內直接調用 Hive 的UDF,UDTF,UDAF
-
增加了對 NativePython UDF 的支持,用戶可以用Python開發自己的業務邏輯
-
很好的支持了 Python 類庫的依賴管理,Python用戶不僅可以自定義Python UDF 而且可以與其他現有的Python library進行集成
-
在架構上引入了BeamPortability Framework,Flink與Beam社區共同打造功能便捷,性能優越的Python UDF支持框架
-
與Flink資源管理框架進行集成,實現了對Python UDF資源的管控
(1)原生的資源管理,可以根據作業的資源需求動態去申請TaskManager,不需要依賴外部系統或組件
(2)更加方便的任務提交,不需要安裝kubectl等工具,可以達到和Yarn相似的體驗
提問:在 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 開源項目鏈接:
https://github.com/alibaba/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 跟 SparkML 對比基本上差不多,只要大家工程化都做得足夠好,離線學習無法打出代差,真正的代差一定是設計上的理念不一樣。設計上、產品形態、技術形態不一樣才會有代差明顯的優勢。
相比 SparkML,我們的基調是批式算法基本一致,包括功能和性能,Alink 可以支持算法工程師常用的所有算法,包括聚類、分類、回歸、數據分析、特征工程等,這些類型的算法是算法工程師常用的。我們開源之前也對標了 SparkML 所有的算法,做到了 100% 對標。除此之外,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 整套處理做成非常易用、好用的解決方案,這是大家最需要的。現在可能一個個零散的點大家已經做到了,很多東西都能找到對應的開源項目,但是需要有一個整體的平臺把所有技術串起來。
莫問: 明年我們會開源一個新的項目 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,離不開數據格式的定義,離不開不同計算引擎的協同,這是更大的一個概念。我們明年會在這方面投入更多資源,也會聯合其他的公司一起來做。