天天看點

開源 | 全球首個批流一體機器學習平台 Alink背景什麼是 Alink ?開源主要功能和優勢案例

作者 | 品數

開源 | 全球首個批流一體機器學習平台 Alink背景什麼是 Alink ?開源主要功能和優勢案例

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

阿裡資深算法專家楊旭(花名:品數),将為大家詳細介紹本次Alink主要功能和特點,希望與業界同仁共同攜手,推動Flink社群進一步發展。

Github 下載下傳位址:

https://github.com/alibaba/Alink

背景

随着大資料時代的到來和人工智能的崛起,機器學習所能處理的場景更加廣泛和多樣。建構的模型需要對批量資料進行處理,為了達到實時性的要求還需要直接對流式資料進行實時預測,還要具備将模型應用在企業應用和微服務上能力。為了取得更好的業務效果,算法工程師們需要嘗試更多更複雜的模型,需要處理更大的資料集,使用分布式叢集已經成為常态;為了及時對市場的變化進行反應,越來越多的業務選用線上學習方式直接處理流式資料、實時更新模型。

我們團隊一直從事算法平台的研發工作,感受到了高效能的算法元件和便捷操作平台對開發者的幫助。針對正在興起的機器學習廣泛而多樣的應用場景,我們在2017年開始基于Flink研發新一代的機器學習算法平台,使得資料分析和應用開發人員能夠輕松搭建端到端的業務流程。項目名稱定為Alink,取自相關名稱(Alibaba, Algorithm, AI, Flink, Blink)的公共部分。

什麼是 Alink ?

Alink 是阿裡巴巴計算平台事業部PAI團隊從 2017 年開始基于實時計算引擎 Flink 研發的新一代機器學習算法平台,提供豐富的算法元件庫和便捷的操作架構,開發者可以一鍵搭建覆寫資料處理、特征工程、模型訓練、模型預測的算法模型開發全流程。

借助Flink在批流一體化方面的優勢,Alink能夠為批流任務提供一緻性的操作。在實踐過程中,Flink原有的機器學習庫FlinkML的局限性顯露出來(僅支援10餘種算法,支援的資料結構也不夠通用),但我們看重Flink底層引擎的優秀性能,于是基于Flink重新設計研發了機器學習算法庫,于2018年在阿裡集團内部上線,随後不斷改進完善,在阿裡内部錯綜複雜的業務場景中鍛煉成長。

從我們研發Alink的第一天開始,就一直與社群緊密交流合作。多次在Flink Forward大會上介紹我們在機器學習算法庫研發方面的最新進展,分享技術心得。

作為業界首個同時支援批式算法、流式算法的機器學習平台,Alink 提供了 Python 接口,開發者無需 Flink 技術背景也可以輕松建構算法模型。

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

開源

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

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

FlinkML 和 Alink 的關系

FlinkML 是 Flink 社群現存的一套機器學習算法庫,這一套算法庫已經存在很久而且更新比較緩慢。Alink 是基于新一代的 Flink,完全重新寫了一套,跟 FlinkML 沒有代碼上的關系。Alink 由阿裡巴巴計算平台事業部PAI團隊研發,開發出來以後在阿裡巴巴内部也用了,然後現在正式開源出來。

未來我們希望 Alink 的算法逐漸替換掉 FlinkML 的算法,可能 Alink 就會成為新一代版本的 FlinkML,當然替換還需要一個比較漫長的過程。今年上半年我們積極參加新版FlinkML API的設計,分享Alink API設計的經驗;Alink的Params等概念被社群采納;6月份開始貢獻FlinkML代碼,已送出了40餘個PR,包括算法基礎架構、基礎工具類及若幹算法實作。

Alink 包含了非常多的機器學習算法,往 Flink 貢獻或釋出的時候也需要比較大的帶寬,我們擔心整個過程耗時會比較長,是以先把 Alink 單獨開源出來,大家如果有需要的可以先用起來。後面貢獻進展比較順利的情況下,Alink 應該能完全合并到 FlinkML,也就是直接進入 Flink 生态的主幹,這對于 Alink 來說是最好的歸宿,到這個時候 FlinkML 就可以跟 SparkML 完全對應起來了。

相比 SparkML,Alink 的亮點是什麼?

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

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

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

主要功能和優勢

豐富高效的算法庫

Alink擁有豐富的批式算法和流式算法,不僅實作了豐富高效的算法,還提供了友善的python使用接口,幫助資料分析和應用開發人員能夠從資料處理、特征工程、模型訓練、預測, 端到端地完成整個流程。

如下圖所示,Alink提供的開源算法子產品中,每一個子產品都包含流式和批式算法。比如線性回歸,包含批式線性回歸訓練,流式線性回歸預測和批式線性回歸預測。

開源 | 全球首個批流一體機器學習平台 Alink背景什麼是 Alink ?開源主要功能和優勢案例

友好的使用體驗

為了提供更好的互動式和可視化體驗,我們提供了PyAlink on notebook,使用者可以通過PyAlink的python包使用Alink。支援單機運作,也支援叢集送出。并且打通Operator(Alink算子)和DataFrame的接口,進而使得Alink整個算法流程無縫融入python。PyAlink也提供使用Python函數來調用UDF或者UDTF。

PyAlink在notebook中使用如下圖,展示了一個模型訓練預測,并列印出預測結果的過程:

開源 | 全球首個批流一體機器學習平台 Alink背景什麼是 Alink ?開源主要功能和優勢案例

★ PyAlink 的下載下傳安裝

PyAlink提供了下載下傳安裝包,需要Python 3.5及以上版本。

詳細的下載下傳安裝說明,請通路:

https://github.com/alibaba/Alink#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B--pyalink-%E4%BD%BF%E7%94%A8%E4%BB%8B%E7%BB%8D

★ PyAlink的使用

我們在github上放了5個示例,為ipynb格式,大家可以直接運作體驗。

PyAlink示例位址:

https://github.com/alibaba/Alink/tree/master/pyalink

這裡也通過動畫形式,展示一組PyAlink的使用示例:

示例1

開源 | 全球首個批流一體機器學習平台 Alink背景什麼是 Alink ?開源主要功能和優勢案例

示例2

開源 | 全球首個批流一體機器學習平台 Alink背景什麼是 Alink ?開源主要功能和優勢案例

高效的疊代計算架構

我們也開源了Alink的中間函數庫,它是在我們基于Flink開發機器學習算法,不斷優化性能的過程中總結和積累下來的。對于Flink社群的算法開發者會有非常大的幫助,可以基于我們的中間函數庫,快速地開發出新的算法,而且相對于直接使用Flink的基本接口開發,性能上會有成倍的提升。

中間函數庫中最重要的是 Iterative Communication/Computation Queue (簡稱ICQ),是我們面向疊代計算場景總結的一套疊代通信計算架構,它內建了記憶體緩存技術和記憶體資料通信技術。我們把每個疊代步抽象為多個ComQueueItem(通信子產品與計算子產品)串聯形成的隊列。 相對于Flink基礎的IterativeDataSet有顯著的性能提升,而且代碼量相當,可讀性更強。

ComQueueItem包括計算和通信兩種類型。同時,ICQ還提供了初始化功能,用于将DataSet緩存到記憶體中,緩存的形式包括Partition和Broadcast兩種形式。前者将DataSet分片緩存至記憶體,後者将DataSet整體緩存至每個worker的記憶體。預設支援了AllReduce通信模型。此外,ICQ還允許指定疊代終止條件。

基于ICQ疊代開發LBFGS算法的代碼如下所示:

DataSet <Row> model = new IterativeComQueue()
            .initWithPartitionedData(OptimVariable.trainData, trainData)
            .initWithBroadcastData(OptimVariable.model, coefVec)
            .initWithBroadcastData(OptimVariable.objFunc, objFuncSet)
            .add(new PreallocateCoefficient(OptimVariable.currentCoef))
            .add(new PreallocateCoefficient(OptimVariable.minCoef))
            .add(new PreallocateLossCurve(OptimVariable.lossCurve, maxIter))
            .add(new PreallocateVector(OptimVariable.dir, new double[] {0.0, OptimVariable.learningRate}))
            .add(new PreallocateVector(OptimVariable.grad))
            .add(new PreallocateSkyk(OptimVariable.numCorrections))
            .add(new CalcGradient())
            .add(new AllReduce(OptimVariable.gradAllReduce))
            .add(new CalDirection(OptimVariable.numCorrections))
            .add(new CalcLosses(OptimMethod.LBFGS, numSearchStep))
            .add(new AllReduce(OptimVariable.lossAllReduce))
            .add(new UpdateModel(params, OptimVariable.grad, OptimMethod.LBFGS, numSearchStep))
            .setCompareCriterionOfNode0(new IterTermination())
            .closeWith(new OutputModel())
            .setMaxIter(maxIter)
            .exec();
           

案例

案例1、情感分析

情感分析是對帶有情感色彩(褒義貶義/正向負向)的主觀性文本進行分析,以确定該文本的觀點、喜好、情感傾向。這個案例中,我們對一個酒店評論的資料集進行分析。

資料集:

https://raw.githubusercontent.com/SophonPlus/ChineseNlpCorpus/master/datasets/ChnSentiCorp_htl_all/ChnSentiCorp_htl_all.csv

資料預覽:

開源 | 全球首個批流一體機器學習平台 Alink背景什麼是 Alink ?開源主要功能和優勢案例

首先,我們定義一個pipeline,這個pipeline包含了缺失值填充、中文分詞、停用詞過濾、文本向量化、邏輯回歸等元件。

開源 | 全球首個批流一體機器學習平台 Alink背景什麼是 Alink ?開源主要功能和優勢案例

接着,我們使用上述定義的pipeline進行模型訓練、批式預測,以及結果評估。

開源 | 全球首個批流一體機器學習平台 Alink背景什麼是 Alink ?開源主要功能和優勢案例

采用不同的文本向量化方式和分類模型,可以迅速直覺地比較模型的效果:

開源 | 全球首個批流一體機器學習平台 Alink背景什麼是 Alink ?開源主要功能和優勢案例

案例2、FTRL線上學習

在網絡廣告中,點選率(CTR)是衡量廣告效果的一個非常重要的名額。是以,點選預測系統在贊助搜尋和實時競價中具有重要的應用價值。該 Demo 使用 Ftrl 方法實時訓練分類模型,并進行實時預測和實時評估。

https://www.kaggle.com/c/avazu-ctr-prediction/data
開源 | 全球首個批流一體機器學習平台 Alink背景什麼是 Alink ?開源主要功能和優勢案例

首先,我們搭建一個用于做特征工程的pipeline,它由标準化和特征哈希兩個元件串聯而成,并通過訓練得到一個pipeline model。

開源 | 全球首個批流一體機器學習平台 Alink背景什麼是 Alink ?開源主要功能和優勢案例

其次,我們用邏輯回歸元件進行批式訓練,得到一個初始模型。

開源 | 全球首個批流一體機器學習平台 Alink背景什麼是 Alink ?開源主要功能和優勢案例

接着,我們使用FTRL訓練元件進行線上訓練,用FTRL預測元件進行線上預測。

開源 | 全球首個批流一體機器學習平台 Alink背景什麼是 Alink ?開源主要功能和優勢案例

最後,我們用一個二分類評估元件進行線上評估。

開源 | 全球首個批流一體機器學習平台 Alink背景什麼是 Alink ?開源主要功能和優勢案例

評估結果可實時展現在notebook,友善開發人員實時監控模型狀況。

開源 | 全球首個批流一體機器學習平台 Alink背景什麼是 Alink ?開源主要功能和優勢案例

未來的規劃

Alink邁出了開源的第一步,接下來我們會繼續和社群合作,根據使用者的回報,在功能、性能、易用性等方面,發展完善Alink,解決Flink使用者在使用機器學習算法方面的問題;另一方面,我們還會繼續積極向FlinkML送出算法代碼,後面貢獻進展比較順利的情況下,Alink 應該能完全合并到 FlinkML,也就是直接進入 Flink 生态的主幹,這對于 Alink 來說是最好的歸宿,到這個時候 FlinkML 就可以跟 SparkML 完全對應起來了。

我們衷心的希望更多的人加入,一起把Apache Flink開源社群做得更好!