天天看點

Apache Flink ML 2.1.0 釋出公告

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] ​​flink.apache.org/downloads.h…​​

[2] ​​flink.apache.org/community.h…​​

[3] ​​issues.apache.org/jira/browse…​​

[4] ​​github.com/apache/flin…​​

[5] ​​nightlies.apache.org/flink/flink…​​

[6] ​​github.com/apache/flin…​​

[7] ​​flink.apache.org/news/2022/0…​​