英特爾AMX助力阿里云提升推薦模型性能

   2024-01-10 80310
核心提示:阿里云PAI團(tuán)隊(duì)研發(fā)了PAI-REC全鏈路解決方案,幫助用戶以白盒化的方式快速構(gòu)建推薦全鏈路的方案。
 背景

推薦系統(tǒng)在電商、短視頻、新聞、廣告等行業(yè)都有著廣泛的應(yīng)用。推薦系統(tǒng)能夠比較準(zhǔn)確理解終端用戶的興趣,提升終端用戶的瀏覽體驗(yàn)。典型的工業(yè)界推薦系統(tǒng)一般采用多階段漏斗的方式,通常包括召回、粗排、精排、重排等階段,每個(gè)階段要處理的商品數(shù)量是依次遞減的,而對(duì)應(yīng)的模型的參數(shù)量和計(jì)算復(fù)雜度通常是依次遞增的。隨著深度學(xué)習(xí)的發(fā)展,現(xiàn)在主流的推薦系統(tǒng)都是用深度學(xué)習(xí)模型來預(yù)估用戶對(duì)于不同商品的偏好。深度學(xué)習(xí)大幅度提升了模型預(yù)估的準(zhǔn)確度,并且能夠支持多任務(wù)多場景的聯(lián)合建模。但隨之帶來的問題是模型參數(shù)量和計(jì)算復(fù)雜度的大幅度增加,這給模型訓(xùn)練和在線推理服務(wù)都帶來了巨大的挑戰(zhàn)。為了提升模型的準(zhǔn)確度,推薦模型通常需要在千億規(guī)模的樣本和特征上進(jìn)行訓(xùn)練。即便采用分布式訓(xùn)練,訓(xùn)練一個(gè)推薦排序模型也要持續(xù)數(shù)天的時(shí)間。這給算法工程師探索和優(yōu)化模型結(jié)構(gòu)帶來了巨大的壓力。在線推理服務(wù)通常需要在有限的時(shí)間內(nèi)返回結(jié)果(< 500ms),而現(xiàn)代推薦模型的巨大參數(shù)量和復(fù)雜的模型結(jié)構(gòu)需要的計(jì)算量通常難以滿足這樣要求。

為了解決這些挑戰(zhàn),幫助用戶更好的落地深度學(xué)習(xí)推薦算法,阿里云PAI團(tuán)隊(duì)研發(fā)了PAI-REC全鏈路解決方案,幫助用戶以白盒化的方式快速構(gòu)建推薦全鏈路的方案。如圖1所示,PAI-REC平臺(tái)包含了推薦全鏈路所需要的功能: 特征構(gòu)建,模型訓(xùn)練,在線服務(wù)等。其中兩個(gè)關(guān)鍵的功能是模型訓(xùn)練和模型推理,分別由EasyRec推薦算法框架EasyRec Processor提供。 EasyRec推薦算法框架幫助用戶快速訓(xùn)練推薦模型,其中提供了業(yè)界廣泛使用的推薦算法模型,如DeepFM, DIN, DBMTL等,并支持通過組件化自定義模型的方式快速構(gòu)建新的模型結(jié)構(gòu),進(jìn)一步還支持通過PAI-NNI-HPO做超參搜索。EasyRec算法框架的相關(guān)代碼已經(jīng)在github上開源。

圖1. PAI-REC推薦算法定制開發(fā)平臺(tái)

PAI-REC在線推理鏈路如圖2所示,其中EasyRec Processor負(fù)責(zé)模型推理環(huán)節(jié)。EasyRec Processor包含ItemFeatureCache, Feature Generator(特征交叉)和TF Model Serving三個(gè)部分,并能夠從Kafka/OSS獲取模型的增量更新,從FeatureStore獲取特征的實(shí)時(shí)更新。

圖2. PAI-REC在線推理鏈路

為了提升推薦模型訓(xùn)練和在線推理的效率,我們聯(lián)合intel相關(guān)團(tuán)隊(duì)結(jié)合硬件的特性做了深入的優(yōu)化,提升了模型訓(xùn)練的速度,同時(shí)提升了模型推理的QPS(每秒處理的請(qǐng)求次數(shù)),降低了模型推理的RT(響應(yīng)時(shí)間),CPU的利用率也大幅度提升[20%->60%]。下面介紹一下EasyRec里面用到的一些優(yōu)化方法。

AMX矩陣乘法優(yōu)化

深度學(xué)習(xí)推薦模型里面通常會(huì)用到MLP和Attention等一般涉及到比較多的矩陣乘法計(jì)算,屬于計(jì)算密集型,不僅影響算子內(nèi)部的計(jì)算效率,也影響了算子調(diào)度的效率。OneDNN和MKL針對(duì)矩陣運(yùn)算做了深度優(yōu)化,提升了矩陣乘法的計(jì)算能力,但仍然受限于硬件的計(jì)算能力。為了進(jìn)一步提升矩陣乘法的計(jì)算效率,可以選擇使用英特爾® 第四代至強(qiáng)® 可擴(kuò)展處理器Sapphire Rapids(SPR)來處理推薦系統(tǒng)的訓(xùn)練和推理。該處理器通過創(chuàng)新架構(gòu)增加了每個(gè)時(shí)鐘周期的指令,支持 8 通道 DDR5 內(nèi)存,有效提升了內(nèi)存帶寬與速度,并通過PCIe 5.0實(shí)現(xiàn)了更高的 PCIe 帶寬提升。該處理器不僅經(jīng)過了一系列微架構(gòu)的革新和技術(shù)規(guī)格的提升,還搭載了全新的AI加速引擎——英特爾®高級(jí)矩陣擴(kuò)展(AMX)。

英特爾® AMX 技術(shù)與上一代深度學(xué)習(xí)加速技術(shù)——向量神經(jīng)網(wǎng)絡(luò)指令 VNNI及BF16相比,從一維向量演變?yōu)槎S矩陣,因此能夠充分利用計(jì)算資源,提高高速緩存的利用率,并且避免潛在的帶寬瓶頸。這種改進(jìn)顯著提高了人工智能應(yīng)用程序每個(gè)時(shí)鐘周期的指令數(shù),為AI工作負(fù)載中的訓(xùn)練和推理提供了顯著的性能提升。

    

(a)AMX架構(gòu)圖                                                (b)單核單周期運(yùn)算次數(shù)比較

 

圖3.AMX架構(gòu)和性能

圖3a展示了英特爾® AMX的架構(gòu),其中包括了兩個(gè)主要組成部分:(1)Tiles: 由八個(gè)二維寄存器組成(命名為 tmm0, tmm1, …, tmm7),每個(gè)寄存器的最大尺寸為16行,每行有512位,尺寸為1KiB。整個(gè)Tiles的大小為8KiB。

(2)TMUL: 它是與 Tile連接的加速引擎,可用于矩陣乘法計(jì)算執(zhí)行。

AMX 支持INT8 和 BF16數(shù)據(jù)類型,用于 AI 工作負(fù)載中的矩陣乘法運(yùn)算。如圖3b所示,第四代英特爾® 至強(qiáng)® 可擴(kuò)展處理器可在單位計(jì)算周期內(nèi)可執(zhí)行 1024 次 BF16 運(yùn)算,與第三代英特爾® 至強(qiáng)® 可擴(kuò)展處理器執(zhí)行 FP32 運(yùn)算的次數(shù)64 次相比,有16倍的性能提升。

混合精度運(yùn)算

BFloat16浮點(diǎn)格式是一種計(jì)算機(jī)內(nèi)存中占用16位的計(jì)算機(jī)數(shù)字格式。該格式是32位IEEE 754單精度浮點(diǎn)格式(float32)的截?cái)?16位)版本。它保留了32位浮點(diǎn)數(shù)的近似動(dòng)態(tài)范圍。BFloat16用于降低存儲(chǔ)需求,提高機(jī)器學(xué)習(xí)算法的計(jì)算速度。BFloat16是用于機(jī)器學(xué)習(xí)的自定義16位浮點(diǎn)格式,采用與IEEE 754標(biāo)準(zhǔn)相似的布局,但對(duì)于指數(shù)和尾數(shù)字段進(jìn)行了修改,由一個(gè)符號(hào)位、八個(gè)指數(shù)位和七個(gè)尾數(shù)位組成。相比之下,IEEE 754標(biāo)準(zhǔn)的半精度浮點(diǎn)數(shù)(Float16)使用1位符號(hào)位,5位指數(shù)和10位尾數(shù)。IEEE 754標(biāo)準(zhǔn)的單精度浮點(diǎn)數(shù)(Float32)使用1位符號(hào)位,8位指數(shù)和23位尾數(shù),因此BFloat16具有和Float32等效的動(dòng)態(tài)范圍。

BFloat16相比Float16的主要優(yōu)勢(shì)在于其更大的動(dòng)態(tài)范圍。由于具有更多的位數(shù)用于指數(shù)部分,BFloat16可以表示更大的數(shù)值范圍和更小的數(shù)值間隔。這使得它在深度學(xué)習(xí)中具有一定的優(yōu)勢(shì),因?yàn)樵谟?xùn)練深度神經(jīng)網(wǎng)絡(luò)時(shí),經(jīng)常需要處理廣泛的數(shù)值范圍。另一個(gè)優(yōu)勢(shì)在于能夠更快的與Float32進(jìn)行相互轉(zhuǎn)換,轉(zhuǎn)換時(shí)只需要對(duì)最后16位進(jìn)行填充或者移除即可實(shí)現(xiàn)快速轉(zhuǎn)換。

 

圖4. BFloat16 浮點(diǎn)格式介紹

在該優(yōu)化方案中,在Embedding部分及矩陣乘部分,用戶可以選擇使用BFloat16來進(jìn)行相應(yīng)的運(yùn)算操作。經(jīng)過測試,使用BFloat16可以在不損失精度的情況下,減少一半的內(nèi)存。此外,使用框架原生的BFloat16到Float32的轉(zhuǎn)換效率很低,在使用了AVX的硬件指令加速后,可大幅提高其性能。 進(jìn)一步使用AMX可以提高BF16矩陣乘法的效率,使用AMX時(shí)處理器每個(gè)周期可以執(zhí)行1,024次BFloat16(16位浮點(diǎn)數(shù))操作。

算子融合和圖優(yōu)化

從圖優(yōu)化層面來看,算子融合通過將一系列算子融合成單個(gè)算子的方法,可有效提升性能。這是由于每個(gè)算子都需要一個(gè)Kernel啟動(dòng),有時(shí)啟動(dòng)時(shí)間甚至?xí)葘?shí)際的核心計(jì)算花費(fèi)更多的時(shí)間。通過將一系列算子融合為一個(gè)單一的大算子,可以減少Kernel啟動(dòng)的開銷。此外,算子融合還有助于提升CPU Cache的命中率,降低中間數(shù)據(jù)讀取和寫入內(nèi)存的數(shù)據(jù)傳輸開銷。

推薦模型除了DNN部分之外,另一個(gè)主要的部分是 embedding_lookup的計(jì)算.  這個(gè)功能在Tensorflow提供的實(shí)現(xiàn)有很多個(gè)算子來實(shí)現(xiàn), 包括Unique,  Gather,  Reshape,  ExpandDims, SparseSegmentSum等等幾十個(gè)算子,如圖4所示,計(jì)算效率非常低。在EasyRec里面我們將這些功能融合到一個(gè)算子里面執(zhí)行,降低了算子調(diào)度的開銷。進(jìn)一步我們使用AVX指令優(yōu)化embedding聚合(Combine)計(jì)算, 提升向量加法和乘法的計(jì)算效率。

為了降低部署的復(fù)雜度,針對(duì)常見的Embedding模型,我們?cè)O(shè)計(jì)了模板匹配算法,自動(dòng)尋找和匹配embedding_lookup的子圖,并將其替換成融合之后的算子,  使得用戶現(xiàn)有模型,不需要經(jīng)過任何調(diào)整,就能直接享受性能的上提升。embedding_lookup的前一步通常是string_to_hashbucket, bucketize, string_to_number等操作,如果能匹配到相應(yīng)的OP,我們將其也融合到embedding_lookup的Op中,減少Kernel Launch的次數(shù)。優(yōu)化之后,主流的推薦模型OP數(shù)量一般會(huì)減少一半以上,RT通常能降低50%以上。

 

(a) 優(yōu)化前

(b) 優(yōu)化后

圖5. embedding_lookup子圖優(yōu)化案例

特征計(jì)算(FeatureGenerator)優(yōu)化

推薦模型效果優(yōu)化的一個(gè)關(guān)鍵的部分是關(guān)鍵特征的挖掘和構(gòu)造。受限于反饋和特征稀疏的問題,推薦場景通常需要設(shè)計(jì)一些泛化性比較強(qiáng)的特征來提升模型的效果。其中泛化性比較好的一類特征是顯示交叉特征,如LookupFeature, MatchFeature等。這類特征通過構(gòu)建一個(gè)u2i的映射,記錄用戶在不同item上的行為的統(tǒng)計(jì)信息,如用戶最近1小時(shí)在不同商品上的點(diǎn)擊次數(shù),在對(duì)應(yīng)的類目上的點(diǎn)擊次數(shù)等等。為了提高查找效率,這類信息在線通常以HashMap的形式存儲(chǔ)。離線存儲(chǔ)和傳輸考慮到數(shù)據(jù)分析和存儲(chǔ)的效率,通常以字符串格式存儲(chǔ)。從離線格式解析到HashMap的過程中字符串分割占用了比較多的計(jì)算量。為了加速字符串的解析,我們?cè)O(shè)計(jì)了一套新的StringSplit實(shí)現(xiàn),如下圖所示,通過AVX512向量化指令,批量處理輸入的字符串字符,匹配分隔符,從而達(dá)到加速字符串的分割的目的。優(yōu)化后的StringSplit實(shí)現(xiàn)實(shí)際測試速度是Tensorflow中原生的StringSplit實(shí)現(xiàn)速度的3倍。在讀取CSV格式的數(shù)據(jù)訓(xùn)練進(jìn)行訓(xùn)練的過程中,也涉及到比較多的字符串解析的工作,使用優(yōu)化的StringSplitOp訓(xùn)練速度可以提升2倍以上。

圖6. StringSplit優(yōu)化

為了實(shí)現(xiàn)特征計(jì)算和embedding_lookup的overlap執(zhí)行,我們將特征計(jì)算的部分也封裝成了Tensorflow的算子(Operation)。模型部署時(shí),EasyRec Processor會(huì)根據(jù)特征配置自動(dòng)構(gòu)造特征計(jì)算的子圖,并拼接到TFModel的graph里面,這個(gè)過程也是用戶無序感知的。整合到同一個(gè)圖里面之后,可以進(jìn)一步開啟grappler, xla, trt等圖優(yōu)化操作對(duì)整個(gè)大圖做進(jìn)一步的優(yōu)化。

業(yè)務(wù)落地效果

上述的優(yōu)化都已經(jīng)沉淀到EasyRec訓(xùn)練框架和推理框架EasyRec Processor里面,并且在多個(gè)客戶場景落地,幫助用戶取得了顯著的性能提升: 

1.某電商場景精排模型,約2000 Feature Slots,模型參數(shù)20G,使用EasyRec Processor之后比原生的tf-serving qps提升了8倍,rt降低了70%;

2.某游戲場景精排模型,約500 Feature Slots,模型參數(shù)10G,使用EasyRec Processor之后比原生的tf-serving qps提升了4倍;

3.某游戲場景精排模型,在訓(xùn)練時(shí)采用了AMX優(yōu)化,訓(xùn)練速度為優(yōu)化前的2倍。

展望

采用第四代英特爾® 至強(qiáng)® 可擴(kuò)展處理器來優(yōu)化推薦系統(tǒng)性能,有助于降低部署專用加速器(如獨(dú)立顯卡)的成本,并更有效地控制推薦系統(tǒng)的總體擁有成本(TCO),從而使用戶受益。為了提升更多深度學(xué)習(xí)模型的端到端性能,英特爾和阿里云正積極合作,探索創(chuàng)新方式來優(yōu)化軟硬件集成,加速深度學(xué)習(xí)模型的性能,使更多的云上用戶獲得收益。

此外,值得關(guān)注的是,英特爾于近期推出了第五代英特爾®至強(qiáng)® 可擴(kuò)展處理器Emerald Rapids(EMR),該處理器同樣搭載內(nèi)置AI加速引擎AMX,相比上一代SPR提供多達(dá)3倍的LLC,單CPU支持8通道 5600MT/s DDR5。在2023年阿里云云棲大會(huì)上,阿里云ECS宣布第八代實(shí)例g8i的算力再升級(jí),從SPR升級(jí)到EMR之后AI性能和整體性能均有顯著提升。

 
 
更多>同類資訊
免責(zé)申明
推薦資訊
點(diǎn)擊排行
最新資訊更多>
最新供應(yīng)更多>
網(wǎng)站首頁  |  聯(lián)系方式  |  關(guān)于我們  |  問題解析  |  版權(quán)隱私  |  使用協(xié)議  |  網(wǎng)站地圖  |  排名推廣  |  廣告服務(wù)  |  積分換禮  |  網(wǎng)站留言  |  RSS訂閱  |  違規(guī)舉報(bào)  |  粵ICP備1207862號(hào)

中國智能化網(wǎng)(zgznh®)--引領(lǐng)工業(yè)智能化產(chǎn)業(yè)發(fā)展 共享智能化+優(yōu)質(zhì)平臺(tái)

版權(quán)所有:深圳市智控網(wǎng)絡(luò)有限公司 學(xué)術(shù)指導(dǎo):深圳市智能化學(xué)會(huì)

粵ICP備12078626號(hào)

深公網(wǎng)安備案證字第 4403101901094 號(hào) | 粵公網(wǎng)安備 44030702001206號(hào)