Apache Flink ML 2.1.0 釋出公告

ApacheFlink 發表於 2022-07-19
Flink
來源|Apache Flink 官方部落格

Apache Flink 社群很榮幸地宣佈 Apache Flink ML 2.1.0 版本正式釋出!本次釋出的版本重點改進了 Flink ML 的基礎設施,例如 Python SDK,記憶體管理,以及效能測試框架,來幫助開發者基於 Flink ML 開發具有高效能,高穩定性,以及高易用性的機器學習演算法庫。

基於本次發版中提出的改進,以及我們得到的效能測試結果,我們相信 Flink ML 的基礎設施已經準備好提供給社群開發者使用,來開發高效能的、支援 Python 環境的機器學習演算法庫。

我們鼓勵您下載該版本 [1] 並通過 Flink 郵件列表 [2]JIRA [3] 與社群分享您的反饋!我們希望您喜歡新版本,並且我們期待了解您的使用體驗。

重要特性

1. 運算元介面和基礎設施

1.1 支援運算元級別粒度的記憶體管控

在之前的版本中,機器學習運算元的內部狀態資料,例如需要被快取並在每輪迭代中重複讀取的訓練資料,是被儲存在 state backend 中。這些資料之前只能是全量放在記憶體中,或者全量放在磁碟上。前一種情況,狀態資料量大的情況下,可能導致 OOM 和降低作業穩定性。後一種情況,由於每輪迭代會需要從磁碟讀取全量資料並且進行反序列化,在狀態資料量不大的情況下,效能低於把資料放在記憶體中的做法。這個問題增加了開發者開發高效能和高穩定性運算元的難度。

在本次發版中,我們改進了 Flink ML 的基礎設施,允許指定一個運算元可以使用的託管記憶體配額。在運算元狀態資料量低於配額的情況下,這些狀態資料會被存放在 Flink 的管控記憶體中。當運算元狀態資料量高於配額時,超出配額的資料會被存放在磁碟上,以避免產生 OOM。演算法開發者可以使用這個機制允許運算元對於不同的輸入資料量,都能提供最佳效能。開發者可以參考 KMeans 運算元的程式碼來學習使用這個機制。

1.2 開發線上訓練演算法的基礎設施的改進

Flink ML 的一個重要目標是推動線上訓練演算法的發展。在上一個版本中,我們通過提供 setModelData() 和 getModelData() 方法,讓線上訓練演算法的模型資料能以無限資料流的形式被傳輸和儲存,增強了 Flink ML API 對於線上訓練演算法的支援能力。本次發版進一步改進和驗證了 Flink ML 基礎設施對於線上訓練演算法的支援能力。

本次發版新增了 2 個線上訓練演算法 (i.e. OnlineKMeans and OnlineLogisticRegression),並提供了單元測試,驗證和測試了這些演算法的正確性。這兩個演算法引入了 global batch size,模型版本等概念,並提供了指標和介面來設定和讀取相應的資訊。雖然這兩個演算法的預測準確率還沒經過調優,但是這些工作將幫助我們進一步建立開發線上訓練演算法的最佳實踐。我們希望越來越多的社群貢獻者能加入我們,共同完成這個目標。

1.3 演算法效能測試框架

一個易於使用的效能測試框架對於開發和維護高效能的 Flink ML 演算法庫是至關重要的。本次發版新增了一個效能測試框架,支援編寫可插拔可複用的資料生成器,可以讀入 JSON 格式的配置,並將效能測試結果以 JSON 格式輸出,以支援可定製化的效能測試結果視覺化分析。我們提供了開箱可用的指令碼將效能測試結果轉換為圖表。感興趣的讀者可以閱讀這份文件 [4] 來了解如何使用這個測試框架。

2. Python SDK

本次發版增強了 Python SDK 的基礎設施,支援 Python 運算元呼叫相應的 Java 運算元來完成訓練和推理。Python 運算元可以提供和 Java 運算元相同的效能。這個功能可以極大提升 Python 演算法庫的開發效率,讓演算法開發者可以為一套演算法同時提供 Python 和 Java 演算法庫,而無需重複實現演算法的核心邏輯。

3. 演算法庫

本次發版延續之前的演算法庫開發工作,為多種機器學習演算法類別新增了代表性的演算法,來驗證 Flink ML 基礎設施的功能和效能。

以下是本次發版中新增加的演算法:

  • 特徵工程: MinMaxScaler, StringIndexer, VectorAssembler, StandardScaler, Bucketizer
  • 線上學習: OnlineKmeans, OnlineLogisiticRegression
  • 迴歸演算法: LinearRegression
  • 分類演算法: LinearSVC
  • 評估演算法: BinaryClassificationEvaluator

為了幫助使用者學習和使用 Flink ML 演算法庫,我們在 Apache Flink ML 網站 [5] 上為每個演算法提供了相應的 Python 和 Java 樣例程式。並且我們提供了每個演算法的效能測試配置檔案 [6] 以支援使用者驗證 Flink ML 的效能。感興趣的讀者可以閱讀這份文件 [4] 來了解如何執行這些演算法的效能測試。

升級說明

有關升級過程中可能需要做出的調整及確認,請參閱原文釋出公告 [7]

釋出說明和相關資源

使用者可以檢視釋出說明 [8] 來獲得修改和新功能的詳細列表。
原始碼可以從 Flink 官網的下載頁面 [1] 獲得,最新的 Flink ML Python 釋出可以從 PyPI [9] 獲得。

貢獻者列表

Apache Flink 社群感謝對此版本做出貢獻的每一位貢獻者:

Yunfeng Zhou, Zhipeng Zhang, huangxingbo, weibo, Dong Lin, Yun Gao, Jingsong Li and mumuhhh.

參考連結

[1] https://flink.apache.org/down...

[2] https://flink.apache.org/comm...

[3] https://issues.apache.org/jir...

[4] https://github.com/apache/fli...

[5] https://nightlies.apache.org/...

[6] https://github.com/apache/fli...

[7] https://flink.apache.org/news...

[8] https://issues.apache.org/jir...

[9] https://pypi.org/project/apac...


點選進入 Flink 中文學習網

更多 Flink 相關技術問題,可掃碼加入社群釘釘交流群
第一時間獲取最新技術文章和社群動態,請關注公眾號~

img

活動推薦

阿里雲基於 Apache Flink 構建的企業級產品-實時計算Flink版現開啟活動:
99 元試用 實時計算Flink版(包年包月、10CU)即有機會獲得 Flink 獨家定製衛衣;另包 3 個月及以上還有 85 折優惠!
瞭解活動詳情:https://www.aliyun.com/produc...

image.png