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


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

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

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


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

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

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

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

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

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

2. Embedding計算優(yōu)化
Embedding Lookup過程常會碰到如果在hash之前進行SparseFillEmptyRows操做會對空行填充默認值,增加過多的字符串操做,優(yōu)化后我們先做hash操做然后再做SparseFillEmptyRows操做,去除耗時過多的字符串操作 ( 百萬級別 ),節(jié)省CPU算力來提升QPS,此優(yōu)化單卡性能約有6%的提升。
3. 模型算法層面優(yōu)化
YOLO的Loss計算量較大,我們對其進行了特殊的優(yōu)化。YOLO模型有三個Feature map層,傳統(tǒng)尋找正負樣本的時候,真正的Bounding box會在Feature map上會做一個遍歷比較,先橫向遍歷然后再縱向遍歷,遍歷的過程中尋找Feature map點和Bounding box IOU最大的值作為正樣本。因為圖像的size很大,所以Feature map也很大,這使計算Loss耗時過長。計算Loss優(yōu)化方法如下,由于x軸方向上的塊和y軸方向上的塊關(guān)于對角線對稱,所以我們計算Feature map和Bounding box 的IOU的時候按照中軸線對角點方向進行遍歷如圖16所示。先計算對角線方向上的的塊,然后再計算每個feature map塊兩邊的塊。這種優(yōu)化方法可減少大量的計算量。另外,在某個點上向兩邊遍歷所有的Feature map塊的時候有一些計算技巧特點,比如往右上開始遍歷的時候,x軸與y軸是關(guān)于對角線對稱變化的,我們可以預估這種變化,從而有意識地去尋找最大的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是詳細測評結(jié)果,它們有三種類型的測試模式,分別是訓練數(shù)據(jù)通過TDbank(騰訊自研的MQ系統(tǒng))線上拉取(時延包括網(wǎng)絡(luò)傳輸、數(shù)據(jù)packing等);本地數(shù)據(jù)讀取,訓練數(shù)據(jù)預先存放本地磁盤(時延包括磁盤IO,數(shù)據(jù)映射預處理);Benchmark模式訓練數(shù)據(jù)放內(nèi)存(時延僅包括數(shù)據(jù)映射預處理)。從圖18中看到Benchmark不考慮數(shù)據(jù)讀取前的延時基本能把整個系統(tǒng)計的算能力跑滿這是一個準線性地提升。考慮到實際的數(shù)據(jù)是從MQ中讀取,在1卡中提升不大TPS為3000多,2卡QPS為4000多,兩機兩卡TPS達到6000多,所以隨著多機越多,訓練性能達到線性的提升, VLAD-CTR模型的測試具有相同的結(jié)果。YOLO V3優(yōu)化后1機1卡有2.5倍的性能提升,1機8卡有7.2倍的提升。




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