當(dāng)前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]本次分享題目為基于Spark的大規(guī)模推薦系統(tǒng)特征工程及優(yōu)化。



分享嘉賓:陳迪豪?第四范式?架構(gòu)師

編輯整理:劉璐

出品平臺:第四范式天樞、DataFunTalk


導(dǎo)讀: 特征工程在推薦系統(tǒng)中有著舉足輕重的作用,大規(guī)模特征工程處理的效率極大的影響了推薦系統(tǒng)線上的性能。第四范式作為國際領(lǐng)先的機器學(xué)習(xí)和人工智能技術(shù)與平臺服務(wù)提供商,面向大規(guī)模特征工程問題開發(fā)了下一代離線在線一致性特征抽取引擎FESQL,針對AI場景支持SQL接口,兼容Spark 3.0同時提供高性能的Native執(zhí)行引擎。本次分享題目為基于Spark的大規(guī)模推薦系統(tǒng)特征工程及優(yōu)化,主要內(nèi)容包括:
  • 大規(guī)模推薦系統(tǒng)

  • Spark SQL應(yīng)用與FESQL

  • 基于LLVM的Spark優(yōu)化

  • 總結(jié)

01
大規(guī)模推薦系統(tǒng)

1. 業(yè)界推薦系統(tǒng)的應(yīng)用

基于Spark的大規(guī)模推薦系統(tǒng)特征工程

眾所周知,推薦系統(tǒng)在業(yè)界有著許多成功的應(yīng)用,據(jù)統(tǒng)計,亞馬遜40%的銷售在推薦系統(tǒng)的作用下產(chǎn)生;Netflix 75%的用戶使用推薦系統(tǒng)尋找他們喜愛的視頻;30%的用戶進行在線購物前會使用關(guān)鍵詞搜索他們需要的商品。目前,幾乎所有的新聞、搜索、廣告、短視頻應(yīng)用都是基于推薦系統(tǒng)建立的。

2. 推薦系統(tǒng)的架構(gòu)

業(yè)界成熟的推薦系統(tǒng)架構(gòu)一般分為三層:離線層 ( offline layer ),近實時的流式層 ( stream layer ) 和在線層 ( online layer ) 三部分。

離線層:一般用于大規(guī)模的數(shù)據(jù)預(yù)處理、特征抽取與模型訓(xùn)練,通常用Hadoop HDFS進行數(shù)據(jù)存儲,使用Spark,MapReduce等分布式計算引擎進行特征抽取與計算以及數(shù)據(jù)管理,再使用離線模型訓(xùn)練框架TensorFlow、Pytorch、MXNet等進行離線的模型訓(xùn)練,模型結(jié)果可用于線上預(yù)測。

近實時的流式層:主要是為了提升推薦系統(tǒng)的時效性,對于一些時序特征,可以使用消息隊列收集近實時的數(shù)據(jù),結(jié)合流式計算服務(wù)如Flink對數(shù)據(jù)進行補全,把結(jié)果存入NoSQL、MySQL等存儲服務(wù)中,存儲結(jié)果供線上服務(wù)使用。

在線層:用戶產(chǎn)生的數(shù)據(jù)可以通過Flink生成流式特征,也可以使用HDFS進行數(shù)據(jù)歸檔。在線預(yù)估時從NoSQL或MySQL中提取流式特征,通過離線訓(xùn)練的模型即可進行線上預(yù)估。

3. 大規(guī)模推薦系統(tǒng)的特征抽取

大規(guī)模推薦系統(tǒng)的數(shù)據(jù)處理通常分為兩類:

  • ETL ( Extract, Transform, Load ):進行數(shù)據(jù)數(shù)據(jù)補全、格式轉(zhuǎn)換等;

  • 特征抽?。簩υ紨?shù)據(jù)特征進行處理,得到模型易于學(xué)習(xí)的樣本特征,如離散化,embedding化等方法。

常用工具包括:

  • SQL/Python:針對一般規(guī)模的數(shù)據(jù),通??梢酝ㄟ^使用SQL/Python進行處理;

  • Hadoop/Spark/Flink:針對大規(guī)模數(shù)據(jù),通常要借助Hadoop/Spark/Flink等計算框架。

02
Spark SQL應(yīng)用與第四范式自研FESQL技術(shù)

1. Spark簡介

Spark 是專為大規(guī)模數(shù)據(jù)處理而設(shè)計的快速通用的計算引擎,依托強大的分布式計算能力,在Spark上可以開發(fā)機器學(xué)習(xí)、流式學(xué)習(xí)等應(yīng)用。Spark提供了SparkSQL,使其能與SQL、Hive兼容,提供PySpark接口可以讓開發(fā)者使用Python進行分布式應(yīng)用開發(fā),提供了MLlib包,可以用于機器學(xué)習(xí)應(yīng)用的開發(fā)。同時Spark也提供諸如Catalyst/Tungsten等方式的優(yōu)化。

Spark的優(yōu)勢就在于:計算速度快,能夠處理PB級別的數(shù)據(jù),分布式計算和自動容錯機制,提供便于使用的SQL/Python/R API,同時,Spark提供的機器學(xué)習(xí)庫也可以應(yīng)用于推薦系統(tǒng),所以在業(yè)界,幾乎所有公司都會使用Spark作為離線層數(shù)據(jù)處理框架。

2. 大規(guī)模推薦系統(tǒng)中的Spark應(yīng)用

以IBM的一個推薦系統(tǒng)開源項目來說明Spark在推薦系統(tǒng)中的應(yīng)用。首先是數(shù)據(jù)加載,使用read.csv即可加載本地或HDFS數(shù)據(jù)。使用select即可進行特征列選擇。

然后是對數(shù)據(jù)進行預(yù)處理以及簡單的特征抽取,該項目中使用了Spark UDF對字符串進行處理,抽取出其中的年份信息,將年份信息作為特征進行使用。

得到全部特征預(yù)處理的結(jié)果后即可進行模型訓(xùn)練,可以使用Spark內(nèi)置機器學(xué)習(xí)API進行模型訓(xùn)練。訓(xùn)練完成后,模型即可上線進行線上預(yù)估。

基于Spark的大規(guī)模推薦系統(tǒng)特征工程

線上的預(yù)估服務(wù)需要提供實時計算的預(yù)估接口,但是在實踐中,Spark并不適合直接用于線上預(yù)估。原因有三:

  • Driver-exexutor結(jié)構(gòu)只適合進行批量處理,不適合在線處理

  • Spark的批處理模式不適合提供長時間運行的在線服務(wù),也不能保證低延時的計算效率(Spark 3.0的Hydrogen可以部分支持)

  • RDD接口只適合迭代計算,不適合做實時計算

因此,業(yè)界的通常做法是使用Java、C++等后端語言實現(xiàn)在線的預(yù)估服務(wù),這就帶來了另一個線上特征抽取的一致性問題,由于必須要保證線上線下特征的一致性,所以必須同時開發(fā)線上使用的特征處理模塊,并人工保證計算結(jié)果沒有差異。

3. Spark的優(yōu)缺點

Spark支持大規(guī)模數(shù)據(jù)的批處理,提供標(biāo)準(zhǔn)的SQL接口的優(yōu)點使其成為離線層數(shù)據(jù)處理的不二之選,但是,Spark不支持線上服務(wù),不能保證線上線下特征一致性,同時在AI場景下的性能沒有經(jīng)過優(yōu)化,所以在AI場景下,Spark仍有許多不足。針對這些不足,第四范式開發(fā)了FESQL執(zhí)行引擎。

4. FESQL線上線下一致性執(zhí)行引擎

基于Spark的大規(guī)模推薦系統(tǒng)特征工程

FESQL——保證離線在線特征一致性的SQL執(zhí)行引擎。上圖表示傳統(tǒng)的上線過程,生成離線模型文件后,由應(yīng)用開發(fā)者開發(fā)線上預(yù)估服務(wù),將Spark、SQL中的特征處理邏輯翻譯成后端語言代碼,實現(xiàn)線上服務(wù),每新增一個特征,都要開發(fā)對應(yīng)的特征抽取模塊,同時需要用戶和業(yè)務(wù)開發(fā)者保證特征數(shù)據(jù)的一致性。下圖是使用FESQL的上線過程,由于線上線下使用統(tǒng)一的SQL服務(wù)進行特征抽取,因而保證了特征在線上和線下的一致性。

基于Spark的大規(guī)模推薦系統(tǒng)特征工程

圖中所示為FESQL基本框架,左邊離線部分和SparkSQL的用法基本一致,由數(shù)據(jù)科學(xué)家設(shè)計SQL語句,基于Spark進行離線批處理。橙色框表示第四范式開發(fā)的基于LLVM優(yōu)化的SQL引擎,性能大大優(yōu)于原生Spark,同時能夠更好的支持線上服務(wù),尤其對于SQL語句進行了拓展,使之能夠更好的支持機器學(xué)習(xí)場景下的線上特征處理。其中FEDB是有第四范式開發(fā)的全內(nèi)存數(shù)據(jù)庫,相比于Spark讀取HDFS這種高延時的數(shù)據(jù)載入方式,F(xiàn)EDB可以提前載入模型預(yù)估所需數(shù)據(jù),效果接近開發(fā)的線上特征抽取模塊,同時支持時序特征。線上線下的數(shù)據(jù)一致性由同一套的SQL執(zhí)行引擎保證。

5. 性能對比

與兼容SQL的全內(nèi)存數(shù)據(jù)庫memsql的方式進行性能對比可以發(fā)現(xiàn),LLVM優(yōu)化后的SQL之心引擎在讀和寫的性能上都要更高。

基于Spark的大規(guī)模推薦系統(tǒng)特征工程

對于機器學(xué)習(xí)場景下的列聚合 ( 生成時序特征 ) 場景,LLVM優(yōu)化后的SQL引擎也比memsql快很多,耗時基本小于memsql的50%。

03
基于LLVM的Spark優(yōu)化

1. Spark Catalyst和Tungsten優(yōu)化

Spark2.0之后提供了Catalyst和Tungsten優(yōu)化。圖為Catalyst從SQL解析到生成物理計劃的流程圖,由SQL語句或DataFrame接口通過編譯器技術(shù) ( 語法解析等 ) 生成Unresolved Logical Plan,Catalyst通過解析Catalog對Unresolved Logical Plan處理得到Logical Plan,在經(jīng)過SQL常用優(yōu)化方案,得到Optimized Logical Plan,優(yōu)化之Catalyst后可以生成多個基于Spark運行的Physical Plan,最終選擇其中最高效的進行運行。該方式適合于計算節(jié)點優(yōu)化,對于SQL的優(yōu)化也同樣效果顯著。

Tungsten是另外一種優(yōu)化方案。主要的優(yōu)化點在于:

  • 內(nèi)存管理與堆外存儲避免了多余的內(nèi)存使用,同時減少了GC;

  • 引入code generation技術(shù),通過JIT編譯運行,Spark動態(tài)生成Java字節(jié)碼來計算這些表達式,而不是為逐行解析執(zhí)行,減少了原始數(shù)據(jù)類型的裝箱操作,更重要的是避免了Overhead較大的虛函數(shù)調(diào)用。

以一個經(jīng)典實例來介紹Tungsten的原理。左側(cè)的SQL命令可以翻譯成在Spark上運行的Logical Plan,由下往上分為4個計算節(jié)點,傳統(tǒng)的SQL執(zhí)行引擎中,四個節(jié)點分別由四個迭代器實現(xiàn) ( 可以理解為四個循環(huán) ),循環(huán)沒有合并優(yōu)化以及節(jié)點的虛函數(shù)調(diào)用對于CPU Cache非常不優(yōu)化,導(dǎo)致傳統(tǒng)的SQL引擎計算性能比較差。右側(cè)為Tungsten優(yōu)化后的結(jié)果,使用了whole staged code generation,對多節(jié)點的循環(huán)進行了合并,性能有著明顯的提升。

2. Catalyst/Tungsten的不足

基于Spark的大規(guī)模推薦系統(tǒng)特征工程

Catalyst/Tungsten給Spark帶來了明顯的性能能提升,但Catalyst/Tungsten的優(yōu)化仍然是基于Java進行的,如果能使用更底層的指令集,如匯編、二進制碼效果會更好;JVM難以支持循環(huán)展開等優(yōu)化方式;而且并非所有的節(jié)點都支持code generation,例如圖中的WindowExec節(jié)點就不支持code generation。

3. FESQL

基于Spark的大規(guī)模推薦系統(tǒng)特征工程

鑒于以原因,Catalyst/Tungsten的優(yōu)化仍有不足,第四范式基于LLVM技術(shù)進一步優(yōu)化得到FESQL。SparkSQL架構(gòu)如黃色部分所示,F(xiàn)ESQL架構(gòu)如藍(lán)色框所示,根據(jù)SparkSQL語句生成FESQL Logical Plan,再由LLVM JIT生成平臺二進制碼直接執(zhí)行,相比于Spark少了JVM一層,性能也會有明顯提升。

4. LLVM簡介

基于Spark的大規(guī)模推薦系統(tǒng)特征工程

LLVM項目是一個模塊化的、可重用的編譯器和工具鏈集合,可以方便的實現(xiàn)編譯器和代碼生成的工作。提供了許多有用的工具,如Clang、LLDB、MLIR、TVM等,能夠?qū)崿F(xiàn)多種編程語言的編譯器。

基于Spark的大規(guī)模推薦系統(tǒng)特征工程

JIT ( Just-In-Time Compiler ) 編譯,可以一邊運行程序一邊編譯二進制代碼,右圖為使用JIT編譯的Add函數(shù),這部分代碼可以在運行時被翻譯成底層代碼,與直接使用C++來實現(xiàn)效率接近,同時JIT能夠適應(yīng)不同的CPU生成優(yōu)化的二進制碼。

5. FESQL的優(yōu)化點

基于Spark的大規(guī)模推薦系統(tǒng)特征工程

目前已經(jīng)能使用循環(huán)展開、常數(shù)折疊、向量化和一些基于CPU本身的優(yōu)化;未來,基于PTX后端還可以嘗試生成CUDA代碼,利用GPU進行計算的加速。

6. 性能比較

基于Spark的大規(guī)模推薦系統(tǒng)特征工程

FESQL與Databrick內(nèi)部的Photon非常相似 ( Photon內(nèi)部由C++實現(xiàn) ),因而進行對兩者進行比較。Photon是Databrick的企業(yè)產(chǎn)品,僅能在Databrick的平臺上使用,且不支持PTX/CUDA。對比由C++和由JVM實現(xiàn)的處理引擎的性能,發(fā)現(xiàn)C++實現(xiàn)的處理引擎性能非常優(yōu)越。

7. FESQL的節(jié)點優(yōu)化

FESQL使用了節(jié)點優(yōu)化,使用SimpleProject對Project節(jié)點進行合并優(yōu)化,對窗口節(jié)點使用code generate進行優(yōu)化。下圖說明了對于節(jié)點的優(yōu)化可以明顯減少執(zhí)行的流程。

8. FESQL的表達式優(yōu)化

FESQL也實現(xiàn)了非常多表達式優(yōu)化,保證在不同SQL場景都比傳統(tǒng)數(shù)據(jù)庫有著更好的性能表現(xiàn)。

9. 性能

對比Spark 3.0和FESQL on Spark可以發(fā)現(xiàn),F(xiàn)ESQL的執(zhí)行效率明顯高于Spark 3.0,多窗口的情況下效果更明顯,有著接近6倍的性能提升。

通過對比兩者生成的邏輯計劃圖,可以發(fā)現(xiàn)FESQL的計劃圖明顯更簡單,通過對比兩者的火焰圖,底層RDD計算基本一致,F(xiàn)ESQL取樣的樣本數(shù)更少,執(zhí)行時間更短,因此FESQL的執(zhí)行效率更高。

10. 展望

未來第四范式計劃推出LLVM-enabled Spark Distribution,使開發(fā)者可以通過設(shè)置SPARK_HOME便利的實現(xiàn)性能加速;為開發(fā)者提供Docker、Notebook、Jar、Whl包,便于開發(fā);提供類似Python的保證一致性的DSL語言用于UDF和UDFA實現(xiàn);還有提供對CUDA和GPU的支持。

04
總結(jié)

大規(guī)模推薦系統(tǒng)中可以使用Spark、Flink、ES、FESQL實現(xiàn)大規(guī)模的數(shù)據(jù)處理,其中Spark更適合離線的批處理,而不適合線上處理,F(xiàn)ESQL能同時進行線上線下服務(wù)因為能夠保證特征一致性,同時LLVM JIT實現(xiàn)的FESQL擁有比Spark 3.0更好的性能。

更多SQL原生計算引擎以及Spark性能優(yōu)化的技術(shù),歡迎關(guān)注我們后續(xù)的分享。今天的分享就到這里,謝謝大家。

嘉賓介紹:


陳迪豪

第四范式 | 架構(gòu)師
第四范式先知平臺架構(gòu)師,負(fù)責(zé)深度學(xué)習(xí)框架產(chǎn)品化以及下一代特征引擎開發(fā)工作。積極參與了開源社區(qū)TensorFlow、Kubernetes、TVM等項目開發(fā),對分布式系統(tǒng)和深度學(xué)習(xí)平臺有一定了解,目前專注于離線在線一致性的特征引擎開發(fā)。

特別推薦一個分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:

基于Spark的大規(guī)模推薦系統(tǒng)特征工程

基于Spark的大規(guī)模推薦系統(tǒng)特征工程

基于Spark的大規(guī)模推薦系統(tǒng)特征工程

長按訂閱更多精彩▼

基于Spark的大規(guī)模推薦系統(tǒng)特征工程

如有收獲,點個在看,誠摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉