開源 | 全球首個批流一體機器學習平臺 Alink

AIBigbull2050發表於2019-12-13
2019-12-06 10:20:44
開源 | 全球首個批流一體機器學習平臺 Alink

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

背景

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

我們團隊一直從事演算法平臺的研發工作,感受到了高效能的演算法元件和便捷操作平臺對開發者的幫助。針對正在興起的機器學習廣泛而多樣的應用場景,我們在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

友好的使用體驗

為了提供更好的互動式和視覺化體驗,我們提供了PyAlink on notebook,使用者可以透過PyAlink的python包使用Alink。支援單機執行,也支援叢集提交。並且打通Operator(Alink運算元)和DataFrame的介面,從而使得Alink整個演算法流程無縫融入python。PyAlink也提供使用Python函式來呼叫UDF或者UDTF。

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

開源 | 全球首個批流一體機器學習平臺 Alink

★ PyAlink 的下載安裝

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

詳細的下載安裝說明,請訪問:%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示例地址:

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

開源 | 全球首個批流一體機器學習平臺 Alink

示例1

開源 | 全球首個批流一體機器學習平臺 Alink

示例2

高效的迭代計算框架

我們也開源了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、情感分析

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

資料集:

資料預覽:

開源 | 全球首個批流一體機器學習平臺 Alink

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

開源 | 全球首個批流一體機器學習平臺 Alink

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

開源 | 全球首個批流一體機器學習平臺 Alink

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

開源 | 全球首個批流一體機器學習平臺 Alink

案例2、FTRL線上學習

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

資料集:

資料預覽:

開源 | 全球首個批流一體機器學習平臺 Alink

首先,我們搭建一個用於做特徵工程的pipeline,它由標準化和特徵雜湊兩個元件串聯而成,並透過訓練得到一個pipeline model。

開源 | 全球首個批流一體機器學習平臺 Alink

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

開源 | 全球首個批流一體機器學習平臺 Alink

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

開源 | 全球首個批流一體機器學習平臺 Alink

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

開源 | 全球首個批流一體機器學習平臺 Alink

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

開源 | 全球首個批流一體機器學習平臺 Alink

未來的規劃

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

作者:楊旭,花名,品數





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

相關文章