每天都在汆肉中醒来青梅,好男人www在线观看,少妇无码自慰毛片久久久久久,国产欧美另类久久久精品丝瓜

登錄注冊
新聞 資訊 金融 知識 財經(jīng) 理財 科技 金融 經(jīng)濟 產(chǎn)品 系統(tǒng) 連接 科技 聚焦
首頁 > 新聞 > 熱點 > > 正文

weidl x DeepRec:熱門微博推薦框架性能提升實戰(zhàn)

2022-12-26 11:27:06來源:壹點網(wǎng)

微博推薦團隊:陳雨、韓楠、蔡小娟、高家華

1.項目背景

熱門微博是新浪微博的重要功能之一,包含熱門流、熱點流、頻道流、小視頻后推薦、視頻社區(qū)等場景。

推薦首頁 發(fā)現(xiàn)頁推薦 沉浸視頻

1.jpg

weidl機器學習框架為熱門微博在線學習提供模型訓練和推理服務,推薦全鏈路中在線推理服務的性能一直是weidl框架優(yōu)化迭代的重要目標。在線學習系統(tǒng)依托于weidl框架。其服務的吞吐量、平均響應時間、承接上游QPS、機器資源占用等指標相互制衡,其中weidl框架推理計算的性能至關重要,與推薦服務全鏈路的整體性能指標及成本密切相關。探索引擎中計算圖運行時算子計算加速的各種特性及優(yōu)化支持成為本項目主要方向。

DeepRec (https://github.com/alibaba/DeepRec)是阿里巴巴集團提供的針對搜索、推薦、廣告場景模型的訓練/預測引擎,在分布式、圖優(yōu)化、算子、Runtime等方面對稀疏模型進行了深度性能優(yōu)化,同時提供了稀疏場景下豐富的Embedding相關功能。

2.jpg

本文主要介紹熱門微博推薦的整體架構與DeepRec對熱門推薦框架性能上的提升,并詳細剖析的weidl平臺中使用的DeepRec的重要優(yōu)化點。

2.熱門微博推薦系統(tǒng)與weidl在線學習平臺

2.1 熱門微博推薦系統(tǒng)整體架構

3.jpg

熱門微博推薦系統(tǒng)可分為前臺業(yè)務與weidl在線學習平臺兩個部分。前臺業(yè)務為各個業(yè)務的接口,負責將推薦結(jié)果返回給業(yè)務方。在線學習平臺集成了樣本拼接、模型訓練、參數(shù)服務器、模型服務等多個模塊,為熱門推薦的多個業(yè)務實現(xiàn)了完整的推薦流程,可快速為新業(yè)務搭建一套推薦系統(tǒng)。

2.2 weidl在線學習平臺

在線學習平臺是整個系統(tǒng)最核心的部分,主要負責召回、粗排、精排等模塊。熱門推薦系統(tǒng)為全鏈路大規(guī)模深度模型的在線學習系統(tǒng),其中召回模塊有興趣召回、熱點召回、策略召回、模型召回等多路召回,分別從千萬級物料庫中召回部分候選集,通過每路配額配置,將萬級物料送入粗排模塊。粗排階段通過物料特征離線生成、用戶特征實時拉取的方式,實現(xiàn)高性能的打分服務,通過粗排排序后,將千級候選集送入精排階段。精排階段模型最為復雜,物料與用戶特征實時拉取,多場景多目標融合,最終通過規(guī)則系統(tǒng)的重排,選出一次曝光的博文,推薦給用戶。

在線學習平臺底層推理計算部分采用bridge模式,支持多個backend,包括DeepRec、TensorFlow、Torch、TensorRT等,同時支持基于CPU與GPU的模型訓練與在線推理。

4.jpg

weidl在線學習平臺

熱門微博推薦系統(tǒng)從2018年開始,經(jīng)過幾年的升級,在實時性和規(guī)模上都有了本質(zhì)的提升。

5.jpg

2.2.1 實時性

實時性包括模型學習到用戶行為的速度,模型參數(shù)的更新應用到線上模型服務的速度。推薦系統(tǒng)的更新速度越快,越能夠反應用戶最近的用戶習慣,越能夠給用戶進行越有時效性的推薦;模型更容易發(fā)現(xiàn)最新流行的數(shù)據(jù)pattern,越能夠讓模型反應找到最新的流行趨勢。工程上主要通過以下幾個方面,實現(xiàn)推薦系統(tǒng)的實時性。

a. 樣本拼接作為模型訓練的起點,一條完整的樣本拼接完成的速度決定了模型學習用戶行為速度的上限,目前熱門推薦樣本拼接窗口為30分鐘,即用戶在客戶端的互動行為在30分鐘內(nèi)必會生成一條樣本,送入kafka隊列。

b. 模型訓練讀取樣本流kafka,保證kafka無積壓,所以該條樣本會在毫秒級被模型學到,并通過rpc調(diào)用,更新到訓練的參數(shù)服務器,并將新的模型參數(shù)推入kafka隊列。

c. 參數(shù)同步服務從模型更新的kafka隊列中讀取數(shù)據(jù),將模型最新的參數(shù)通過rpc調(diào)用,發(fā)送給在線服務所用的參數(shù)服務器中,此時從用戶行為到模型更新完成。

d. 模型在線推理服務直連參數(shù)服務器,實時拉取模型最新參數(shù)進行打分。除去樣本拼接所需的30分鐘窗口,其余流程在1分鐘內(nèi)完成。

6.jpg

2.2.2 大規(guī)模深度復雜模型

熱門推薦業(yè)務從最初的FM模型,到現(xiàn)在召回階段以雙塔為主,粗排階段以cold dnn為主,精排階段以多場景、多目標的復雜深度模型為主,模型在特征數(shù)量、目標個數(shù)、模型結(jié)構復雜度上都發(fā)生了質(zhì)的變化,給業(yè)務帶來了很大的收益。

7.jpg

精排模型從snr模型迭代到mm模型

8.jpg

粗排雙塔模型迭代到cold dnn模型

模型復雜度的提升給工程架構帶來了不小的壓力,一個multitask模型比一個單目標的dnn模型在算力上是成倍的增加。為了復雜模型的落地,熱門微博推薦團隊探索了多種開源框架,包括TensorRT, XDL,TFRA等,通過測試與源碼分析,這些框架都在原生Tensorflow基礎上做了不同方向的優(yōu)化,但性能始終無法滿足要求。同時,我們也通過指令集優(yōu)化、改進TensorFlow內(nèi)存管理、算子融合等方式,優(yōu)化weidl kernel部分性能。

在不斷的優(yōu)化與開源框架的嘗試中,發(fā)現(xiàn)DeepRec框架在性能、易用性、與weidl的兼容性上都全面勝出,最終,熱門推薦框架引擎采用DeepRec引擎,提升了訓練與在線推理的新能,同時也給業(yè)務帶來了效果上的提升。

3.DeepRec及相關模塊優(yōu)化點剖析

3.1 OneDNN庫加速算子運算

DeepRec集成了最新版本的開源的跨平臺深度學習性能加速庫oneDNN(oneAPI Deep Neural Network Library),英特爾相關團隊進一步優(yōu)化將oneDNN 原有的線程池統(tǒng)一成DeepRec的Eigen線程池,減少了線程池切換開銷,避免了不同線程池之間競爭而導致的性能下降問題。oneDNN針對主流算子實現(xiàn)了性能優(yōu)化,包括MatMul、BiasAdd、LeakyReLU等在稀疏場景中的常見算子。針對熱門微博的線上模型,性能提升明顯。

在DeepRec中英特爾CESG團隊針對搜索廣告推薦模型中存在著大量稀疏算子如Select、DynamicStitch、Transpose、Tile、SparseSegmentMean、Unique、SparseSegmentSum、SparseFillEmptyRows等一系列稀疏算子進行了深度的優(yōu)化,下面介紹2個常用稀疏算子的優(yōu)化方法。

3.1.1 Select算子優(yōu)化

Select算子實現(xiàn)原理是依據(jù)條件來做元素的選擇,此時可采用向量化指令的mask load方式,如圖所示,以減少原先由if條件帶來大量判斷所導致的時間開銷,然后再通過批量選擇提升數(shù)據(jù)讀寫效率,最終線上測試表明,性能提升顯著。

9.jpg

3.1.2 Transpose算子優(yōu)化

同樣,可以使用向量化的unpack和shuffle指令對transpose算子進行優(yōu)化,即通過小Block的方式對矩陣進行轉(zhuǎn)置,最終經(jīng)線上測試表明,性能提升同樣十分顯著。

10.jpg

3.2 關鍵路徑優(yōu)先的調(diào)度引擎

DeepRec通過對執(zhí)行引擎以及底層線程池的重新設計,達到在不同的場景下,包括trianing和inference,能做到更佳執(zhí)行性能。保證不同線程之間的均衡性,盡量減少線程之間的steal,避免加鎖等問題。

Executor的設計需要考慮對內(nèi)存的訪問及其并行實現(xiàn)之間的聯(lián)系,進行多層次任務調(diào)度,減少緩存缺失和遠程內(nèi)存訪問,充分發(fā)揮多核、多節(jié)點CPU的并行特性,提升系統(tǒng)的運行性能。在線程池層面,設計Cost-aware線程池,結(jié)合內(nèi)存感知以及算子類型等信息,進行針對性優(yōu)化;在計算圖層面,對張量內(nèi)存的位置進行調(diào)度,有利于線程池的調(diào)度;在算子生成層面,進行有利于線程池任務調(diào)度的算子任務劃分。

DeepRec提供的基于關鍵路徑優(yōu)化的執(zhí)行引擎,通過動態(tài)采集Session Run情況,統(tǒng)計與計算多組指標,并構建CostModel,計算出一個較優(yōu)的調(diào)度策略。該功能中包含了基于關鍵路徑的調(diào)度策略,根據(jù)CostModel patching執(zhí)行細碎算子的調(diào)度策略以及線程池Cost-aware調(diào)度策略等。

11.jpg

在graph執(zhí)行過程中,Collector會監(jiān)測所有算子執(zhí)行以及線程池情況,包括算子執(zhí)行時間,線程池pending任務飽和度,以及算子的前后依賴關系。這些參數(shù)會通過CostModel來計算更佳的調(diào)度策略。對于一張graph來說,存在一條或者多條關鍵路徑,即從輸入到輸出經(jīng)過的延時最長的邏輯路徑。graph執(zhí)行總的時間一定是大于等于關鍵路徑時間。為了讓整個graph執(zhí)行更快,并發(fā)更佳高效 ,在graph執(zhí)行時應當優(yōu)先執(zhí)行關鍵路徑上的節(jié)點。

在稀疏模型圖中,可能會存在大量細碎算子,會帶來大量調(diào)度開銷。有些可以通過算子融合來做優(yōu)化,算子融合一般通過graph pattern匹配或者手動指定子圖來確定需要融合的對象,難以覆蓋全部算子。故而在executor層面,通過trace運行時數(shù)據(jù)來動態(tài)進行批量調(diào)度執(zhí)行,這樣可以減少非必要的細碎算子調(diào)度開銷。

在線程調(diào)度層面,目前的線程池調(diào)度策略比較簡單,如果當前執(zhí)行線程是inter線程,優(yōu)先將task調(diào)度到當前線程執(zhí)行,若不是,則調(diào)度到一個random線程上。線程的balance完全由steal機制來保證。在我們的觀察中,發(fā)現(xiàn)inter線程之間存在大量的steal,這會導致很多鎖以及重復的線程調(diào)度等開銷。CostModel executor通過采集運行時數(shù)據(jù),來確定更佳的線程來執(zhí)行任務,減少大量的steal行為。

在復雜模型上,使用DeepRec的CostModel調(diào)度,能夠生成更佳的調(diào)度策略,減少調(diào)度開銷。在測試的snr模型上平均耗時穩(wěn)定優(yōu)化2ms。

3.3 動態(tài)感知的內(nèi)存/顯存分配器

在張量內(nèi)存管理方面,通常存在兩點問題,一個是內(nèi)存碎片過多,另一個是沒有考慮模型結(jié)構存在多分支的情況下算子并行帶來的內(nèi)存增長。其內(nèi)存管理十分粗放,大體上都是運行時依據(jù)內(nèi)存請求動態(tài)進行內(nèi)存釋放和分配,同時進行一些內(nèi)存池管理。由于無法感知上層應用的分配請求特點,這種內(nèi)存管理存在著內(nèi)存碎片過多的特點。例如在不清楚后續(xù)內(nèi)存請求的情況下,由于前期的多次內(nèi)存分配和釋放,會導致后來的大內(nèi)存請求由于內(nèi)存碎片的問題而需要一塊新的內(nèi)存或者OOM。

深度學習模型的內(nèi)存分配由于其應用特點存在著明顯的規(guī)律性,訓練時都是以一個個mini-batch的形式訓練,每個mini-batch的分配特征大體上保持一致,訓練時前向過程一直分配內(nèi)存,較少釋放,而反向過程中會釋放前向計算中的臨時張量,釋放大量內(nèi)存,所以內(nèi)存會周期性呈現(xiàn)先增長后降低的特征。基于此學習到執(zhí)行過程中內(nèi)存分配pattern,從而減少內(nèi)存的動態(tài)分配以及對內(nèi)存塊做到最佳的復用。同時自適應內(nèi)存分配器也是graph-aware的,這樣使得不同子圖之間存在較小的相互干擾,提高分配效率。自適應內(nèi)存分配器基本架構如下圖所示:

自適應內(nèi)存分配器在訓練過程對于前面的K輪進行一些統(tǒng)計,通過Allocator模塊,對內(nèi)存的分配,包括分配的時間點、分配的大小,統(tǒng)計好分配的時間點和大小后,在K輪結(jié)束之后會使用啟發(fā)式的一些算法規(guī)劃出一個較優(yōu)的tensor cache planner,planner會創(chuàng)建allocator,并且預分配一些tensor內(nèi)存塊,后續(xù)的分配會優(yōu)先通過此allocator進行分配。

自適應內(nèi)存分配器基本原則是使用盡量少內(nèi)存,同時提高內(nèi)存的復用率。整體來講,自適應內(nèi)存分配器解決了在稀疏場景中內(nèi)存分配上存在的一些問題,主要包括,第一,減少了在稀疏場景中,大量內(nèi)存分配問題,包括小內(nèi)存和大內(nèi)存。譬如小內(nèi)存分配出現(xiàn)在特征的處理過程中,包括一些特征的拼接,或者在做一些交叉特征,這里會存在大量的小內(nèi)存的分配。同樣在模型訓練也存在很多大的內(nèi)存,包括attention、RNN、或者全連接層,會有一些大內(nèi)存的分配。減少大內(nèi)存的分配,進而也減少了minor pagefault數(shù)量。第二,對于tensor能做到更好的復用,減少了總體的內(nèi)存占用量。

4.DeepRec在業(yè)務中取得的收益

4.1 服務性能提升

熱門微博已于9月將weidl的backend全量替換為DeepRec,線上服務與訓練都取得了很大的收益,最明顯的是精排多任務模型,圖計算部分DeepRec比原生TensorFlow耗時降低50%,精排階段整體耗時降低20%,單機吞吐量提升30%。

對于雙塔和cold dnn模型,圖計算部分耗時降低20%,粗排階段整體耗時降低10%, 單機吞吐量提升20%,模型訓練模塊性能提升20%, 提升了訓練速度并有效的改善了樣本積壓問題。

4.2 性能提升所帶來的其他收益

推薦引擎模塊整體耗時減少與吞吐量的提升,減少了推薦在訓練與在線推理上所使用的機器資源,極大的降低了公司成本。

在線推理服務性能提升,使推薦引擎各個模塊可以計算更多的候選物料,粗排階段可以計算更多的候選物料,提升物料庫總量與擴大召回條數(shù),精排也由1000條擴到2000條,每個階段候選物料數(shù)的增加,都會對整體指標有顯著的提升。

免責聲明:市場有風險,選擇需謹慎!此文僅供參考,不作買賣依據(jù)。

關鍵詞:

推薦內(nèi)容

熱點
39熱文一周熱點
主站蜘蛛池模板: 嘉义县| 凤凰县| 华蓥市| 新竹市| 吉水县| 潼关县| 商都县| 凤阳县| 罗定市| 额尔古纳市| 玉溪市| 旬邑县| 沿河| 寿阳县| 贵阳市| 潍坊市| 浠水县| 扶绥县| 尼玛县| 镇沅| 阳曲县| 龙胜| 南木林县| 白水县| 隆安县| 会昌县| 绍兴市| 勃利县| 星座| 汶川县| 莲花县| 山西省| 隆林| 嘉禾县| 德清县| 武强县| 太白县| 仪征市| 伊吾县| 湛江市| 武川县|