Angel:深度學(xué)習(xí)在騰訊廣告推薦系統(tǒng)中的實(shí)踐
分享嘉賓:郭躍超 騰訊 應(yīng)用研究員
編輯整理:康德芬
出品平臺:DataFunTalk
Angel機(jī)器學(xué)習(xí)平臺
廣告推薦系統(tǒng)與模型
模型訓(xùn)練和優(yōu)化
優(yōu)化效果
1. Angel機(jī)器學(xué)習(xí)平臺架構(gòu)
Angel機(jī)器學(xué)習(xí)平臺是騰訊自研的基于傳統(tǒng)Parameter Server架構(gòu)的高性能分布式的機(jī)器學(xué)習(xí)平臺如圖1所示,詳細(xì)架構(gòu)圖如圖2所示。它是一個全棧機(jī)器學(xué)習(xí)平臺,支持特征工程、模型訓(xùn)練、模型服務(wù)、參數(shù)調(diào)優(yōu)等,同時支持機(jī)器學(xué)習(xí)、深度學(xué)習(xí)、圖計算和聯(lián)邦學(xué)習(xí)等場景。已經(jīng)應(yīng)用在眾多業(yè)務(wù)如騰訊內(nèi)部廣告、金融和社交等場景,吸引了包括華為、新浪、小米等100多家外部公司的用戶和開發(fā)者。


Angel機(jī)器學(xué)習(xí)平臺設(shè)計時就考慮到了很多問題,首先是易用性,Angel機(jī)器學(xué)習(xí)平臺編程接口簡單,可快速上手使用,支持訓(xùn)練數(shù)據(jù)和模型的自動化切分,減少用戶的干預(yù),簡單易用。然后是可擴(kuò)展性方面,Angel提供了PsFun接口,繼承特定的類可實(shí)現(xiàn)自定義參數(shù)更新邏輯和自定義數(shù)據(jù)格式和模型切分方式等。之后是靈活性,Angel實(shí)現(xiàn)了ANGEL_PS_WORKER和ANGEL_PS_SERVICE兩種模式,ANGEL_PS_WORKER模式下模型的訓(xùn)練和推理服務(wù)由Angel平臺自身的PS和Worker完成,這種模式主打速度。而ANGEL_PS_SERVICE模式下,Angel只啟動Master和PS,具體的計算交給其他計算平臺(如Spark,TensorFlow)負(fù)責(zé),Angel只負(fù)責(zé)提供Parameter Server的功能,主打生態(tài)來擴(kuò)展Angel機(jī)器學(xué)習(xí)平臺的生態(tài)位。Angel通信模式支持BSP、SSP、ASP等通信協(xié)議,滿足各種復(fù)雜的實(shí)際通信環(huán)境的要求。最后是穩(wěn)定性,Angel的PS容錯采用CheckPoint模式,Angel每隔一段時間會將PS承載的參數(shù)寫入到分布式存儲系統(tǒng)中,如果某個PS實(shí)例掛掉,PS會讀取最后一個CheckPoint重新進(jìn)行服務(wù)。Angel的Worker容錯方面,如果Work掛掉,Master會重新啟動一個Work實(shí)例,該實(shí)例會從Master上獲取掛掉時參數(shù)迭代信息。Angel的Master任務(wù)信息也會定期存儲到分布式存儲系統(tǒng)中,如果Mater掛掉,會借助Yarn Master重啟機(jī)制重新拉起一個Master并加載信息從之前的斷點(diǎn)開始任務(wù)。Angel還有有慢work檢測機(jī)制,如果某個Work運(yùn)行過慢其任務(wù)會被調(diào)度到其他的Work上進(jìn)行。
Angel機(jī)器學(xué)習(xí)平臺任務(wù)提交執(zhí)行簡單,具體步驟如圖3所示,進(jìn)入Cient后,啟動一個PS實(shí)例,該P(yáng)S會從Client端加載模型,之后Client會啟動多個Work,Work會加載訓(xùn)練數(shù)據(jù)開始訓(xùn)練和學(xué)習(xí),push和pull會進(jìn)行參數(shù)的拉取和更新,訓(xùn)練完成后將模型存入指定的路徑。

Angel機(jī)器學(xué)習(xí)平臺在代碼結(jié)構(gòu)設(shè)計上做了很多的抽象,這樣的設(shè)計方式可擴(kuò)展性強(qiáng),整個結(jié)構(gòu)主要分為四層如圖4所示。核心層(Angel-Core)是基礎(chǔ)層,主要包括PSAgent、PSServer、Work、Network和Storage等。機(jī)器學(xué)習(xí)層(Angel-ML)提供基礎(chǔ)數(shù)據(jù)類型和方法,同時用戶可根據(jù)PsFunc定義自己的方法把私有模型接入。接口層(Angel-Client)可插拔式擴(kuò)展,支持多種用途比如接入TensorFlow和pyTorch等。算法層(Angel-MLLib)提供了封裝好的算法如GBDT、SVM等。

2. Angel機(jī)器學(xué)習(xí)平臺在深度學(xué)習(xí)方向上的拓展和應(yīng)用
深度學(xué)習(xí)常用的分布式計算范式有兩種,分別是MPI ( 基于消息模型的通信模式 ) 和Parameter Server,如圖5所示。這兩種范式均在Angel平臺上有實(shí)現(xiàn),對于Parameter Server范式的實(shí)現(xiàn)如圖6所示,Angel Work可通過Native C++的API接口接入常用的深度學(xué)習(xí)的OP如PyTorch或者Tensorflow等,在訓(xùn)練的起始端Angel PS會把模型Push到每個Worker上,Worker會加載到對應(yīng)的OP上進(jìn)行訓(xùn)練,每次訓(xùn)練完成后會將梯度信息回傳到PS上進(jìn)行融合,以及應(yīng)用優(yōu)化器得到更新的參數(shù),完成后又會分發(fā)到每個Worker上,重復(fù)上述過程直到訓(xùn)練結(jié)束,最終將模型保存到指定路徑。這種方案Angel PS提供了一個梯度PS的控制器,來接入多個分布式的Worker,每個Worker上可以運(yùn)行一些通用的深度學(xué)習(xí)框架例,這種方案PyTorch版本的工作我們已經(jīng)完成,并已經(jīng)開源了(PyTorch on Angel)。另外一種是MPI AllReduce范式如圖7所示,這種范式梯度信息是通過AllReduce方法進(jìn)行融合的,在這種范式的實(shí)現(xiàn)上,Angel PS是一個進(jìn)程控制器,會在每個Work上拉起一個進(jìn)程,這個進(jìn)程可以是PyTorch或者是Tensorflow等進(jìn)程,這種范式對用戶侵入少,用戶開發(fā)的算法不需要太多的修改即可接入到Angel平臺進(jìn)行訓(xùn)練。
Parmeter Server范式


1. 騰訊的廣告推薦系統(tǒng)
騰訊大數(shù)據(jù)示意圖,如圖8所示,在線業(yè)務(wù)的數(shù)據(jù)如微信游戲等會通過消息中間件實(shí)時地傳遞到中臺系統(tǒng),中臺系統(tǒng)包括實(shí)時計算、離線計算、調(diào)度系統(tǒng)和分布式存儲,這些數(shù)據(jù)有的會進(jìn)行實(shí)時計算有的會進(jìn)行離線計算,數(shù)據(jù)的應(yīng)用也是從消息中間件中獲取其需要的數(shù)據(jù)。

騰訊的推薦廣告推薦系統(tǒng)業(yè)務(wù)分層如圖9所示,用戶發(fā)送一個請求后會去拉取用戶地畫像特征,之后會對廣告庫的廣告進(jìn)行一個初步地排序和打分,打分之后會提取用戶地特征信息,同時將廣告庫的ID數(shù)量降為百級別,在這個百級范圍內(nèi)會有一個精細(xì)的排序,完成后將廣告推送給用戶。整個推薦系統(tǒng)面臨著下面的幾大挑戰(zhàn),首先是數(shù)據(jù)來源多樣化,數(shù)據(jù)既有線上數(shù)據(jù)也有歷史落盤數(shù)據(jù)。其次是數(shù)據(jù)的格式多元化,包括用戶信息、Item信息、點(diǎn)擊率和圖像等數(shù)據(jù)的多元格式。然后是增量數(shù)據(jù)多,用戶請求頻繁,廣告庫也在不斷更新中。最后是訓(xùn)練任務(wù)多元化,整個推薦系統(tǒng)涉及到粗排、精排、圖像檢測和OCR等任務(wù)。為了解決上述問題,我們在精準(zhǔn)排序任務(wù)上開發(fā)了一整套的軟件框架"智凌"(基于TensorFlow)來滿足訓(xùn)練需求。

"智凌"框架結(jié)構(gòu)如圖10所示,該框架最底層C++ core封裝了MQ receiver和深度學(xué)習(xí)框架的一些OP類,最典型的是TensorFlow的dataset類,通過封裝tensorflow的dataset類來提供從MQ獲取數(shù)據(jù)的能力。數(shù)據(jù)抽象和處理在C++和Python上完成。然后是深度學(xué)習(xí)的framework(tensorflow)層提供各種深度學(xué)習(xí)的庫。最后是具體的應(yīng)用模型如DSSM、VLAD和一些圖像算法的模型等。"智凌"軟件框架具有算法封裝完整、開發(fā)新模型較快、數(shù)據(jù)和算法隔離解耦較好、預(yù)處理邏輯方便修改和更新及兼容性好等優(yōu)點(diǎn),但同時對于Tensorflow框架侵入性修改多、單機(jī)多卡性能差、多機(jī)分布式不支持、算法和OP層面優(yōu)化不夠完全等缺點(diǎn)。圖11是"智凌"在基礎(chǔ)數(shù)據(jù)上的訓(xùn)練流程圖,從圖中看到從消息中間件中讀取數(shù)據(jù)到本地的DataQueue中,DataQueue給每個在GPU節(jié)點(diǎn)上的模型分發(fā)Batch數(shù)據(jù)然后進(jìn)行訓(xùn)練,訓(xùn)練完成后讀取到CPU進(jìn)行梯度融合和備份然后分發(fā)給各個GPU進(jìn)行再訓(xùn)練,這種設(shè)計是面向單機(jī)結(jié)構(gòu)的設(shè)計,CPU去實(shí)現(xiàn)梯度的融合和優(yōu)化器的功能,CPU資源消耗大,這種設(shè)計很不合理,針對這種情況我們做了很多的優(yōu)化后面會向大家介紹。

2. 騰訊的廣告推薦系統(tǒng)中的模型
DSSM增強(qiáng)語義模型如圖12,在這里我們用該模型來計算用戶和推薦ID之間的相關(guān)性并在此基礎(chǔ)上計算用戶對給定推薦ID的點(diǎn)擊率,相關(guān)性和點(diǎn)擊率計算公式分別是:
DSSM模型較為簡單,分為Quey Id和Item Id并表達(dá)為低維語義向量,然后通過余弦距離來計算兩個語義向量之間的距離。通過模型計算Query和Item之間的相關(guān)性,打分最高點(diǎn)就是我們要推薦的Item, 廣告推薦系統(tǒng)中的DSSM模型要支持以下一些新的需求點(diǎn):
ID類特征維度億級別;
變化快,每周有25%是新條目,支持增量訓(xùn)練。

VLAD/NetVLAD/NeXtVLAD等模型我們主要用來判斷兩個廣告之間的距離關(guān)系,傳統(tǒng)的VLAD可以理解為一個聚類合并的模型,其向量計算公式為:
NeXtVLAD如圖13則通過將ak符號函數(shù)變成一個可導(dǎo)函數(shù)來得到一個更好距離效果,NeXtVLAD的向量計算公式為:
其中,。

YOLO V3如圖14是圖像處理模型,在這里我們將其應(yīng)用在OCR業(yè)務(wù)最前端做初檢,它的特點(diǎn)是圖片輸入尺寸大(608*608,1024*1024),也因此YOLO模型的Loss部分占據(jù)比較大的計算。
1. 數(shù)據(jù)流優(yōu)化
前面的介紹中我們知道"智凌"軟件框架是單管道數(shù)據(jù)流,現(xiàn)在我們將其優(yōu)化為多管道如圖15所示,即通過多機(jī)多數(shù)據(jù)流來解決單機(jī)IO瓶頸問題。原來的單管道數(shù)據(jù)中會有DataQueue,如果數(shù)據(jù)流很大會對IO造成很大的壓力,優(yōu)化為多對管道后為每一個訓(xùn)練進(jìn)程GPU定義了一個DataQueue,通過這種分布式方法來有效解決IO瓶頸問題。這種情況下的管理工作是通過Angel PS(AllReduce版本)進(jìn)程控制器來進(jìn)行管理的。

2. Embedding計算優(yōu)化
Embedding Lookup過程常會碰到如果在hash之前進(jìn)行SparseFillEmptyRows操做會對空行填充默認(rèn)值,增加過多的字符串操做,優(yōu)化后我們先做hash操做然后再做SparseFillEmptyRows操做,去除耗時過多的字符串操作 ( 百萬級別 ),節(jié)省CPU算力來提升QPS,此優(yōu)化單卡性能約有6%的提升。
3. 模型算法層面優(yōu)化
YOLO的Loss計算量較大,我們對其進(jìn)行了特殊的優(yōu)化。YOLO模型有三個Feature map層,傳統(tǒng)尋找正負(fù)樣本的時候,真正的Bounding box會在Feature map上會做一個遍歷比較,先橫向遍歷然后再縱向遍歷,遍歷的過程中尋找Feature map點(diǎn)和Bounding box IOU最大的值作為正樣本。因?yàn)閳D像的size很大,所以Feature map也很大,這使計算Loss耗時過長。計算Loss優(yōu)化方法如下,由于x軸方向上的塊和y軸方向上的塊關(guān)于對角線對稱,所以我們計算Feature map和Bounding box 的IOU的時候按照中軸線對角點(diǎn)方向進(jìn)行遍歷如圖16所示。先計算對角線方向上的的塊,然后再計算每個feature map塊兩邊的塊。這種優(yōu)化方法可減少大量的計算量。另外,在某個點(diǎn)上向兩邊遍歷所有的Feature map塊的時候有一些計算技巧特點(diǎn),比如往右上開始遍歷的時候,x軸與y軸是關(guān)于對角線對稱變化的,我們可以預(yù)估這種變化,從而有意識地去尋找最大的Anchor位置,然后丟棄其他信息,通過這樣的優(yōu)化方法也可以大量的減少計算量。我么通過上述方法優(yōu)化了Loss計算之后單卡性能有約10%的提升。

通過在模型層面和數(shù)據(jù)層面的優(yōu)化,以及Angel平臺應(yīng)用到整個控制流程中,DSSM的單卡性能有33倍的提升,VLAD有22倍的提升,YOLO有2.5倍的提升如圖17所示。圖18、19、20是詳細(xì)測評結(jié)果,它們有三種類型的測試模式,分別是訓(xùn)練數(shù)據(jù)通過TDbank(騰訊自研的MQ系統(tǒng))線上拉取(時延包括網(wǎng)絡(luò)傳輸、數(shù)據(jù)packing等);本地數(shù)據(jù)讀取,訓(xùn)練數(shù)據(jù)預(yù)先存放本地磁盤(時延包括磁盤IO,數(shù)據(jù)映射預(yù)處理);Benchmark模式訓(xùn)練數(shù)據(jù)放內(nèi)存(時延僅包括數(shù)據(jù)映射預(yù)處理)。從圖18中看到Benchmark不考慮數(shù)據(jù)讀取前的延時基本能把整個系統(tǒng)計的算能力跑滿這是一個準(zhǔn)線性地提升??紤]到實(shí)際的數(shù)據(jù)是從MQ中讀取,在1卡中提升不大TPS為3000多,2卡QPS為4000多,兩機(jī)兩卡TPS達(dá)到6000多,所以隨著多機(jī)越多,訓(xùn)練性能達(dá)到線性的提升, VLAD-CTR模型的測試具有相同的結(jié)果。YOLO V3優(yōu)化后1機(jī)1卡有2.5倍的性能提升,1機(jī)8卡有7.2倍的提升。




今天主要和大家分享了三部分的內(nèi)容,第一部分內(nèi)容是介紹了騰訊的Angel機(jī)器學(xué)習(xí)平臺和其在深度學(xué)習(xí)方向上的拓展和應(yīng)用,第二部分的內(nèi)容是介紹了騰訊廣告推薦系統(tǒng)的特點(diǎn)和常用模型,最后一部分的內(nèi)容介紹了Angel深度學(xué)習(xí)在騰訊廣告推薦系統(tǒng)中的應(yīng)用,模型訓(xùn)練和優(yōu)化,以及取得的效果。
嘉賓介紹:
郭躍超
騰訊?|?應(yīng)用研究員
特別推薦一個分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:
長按訂閱更多精彩▼
如有收獲,點(diǎn)個在看,誠摯感謝
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!