1. 程式人生 > 實用技巧 >Angel:深度學習在騰訊廣告推薦系統中的實踐

Angel:深度學習在騰訊廣告推薦系統中的實踐

分享嘉賓:郭躍超 騰訊 應用研究員

編輯整理:康德芬

出品平臺:DataFunTalk

導讀:Angel是騰訊自研的分散式高效能的機器學習平臺,支援機器學習、深度學習、圖計算以及聯邦學習等場景。Angel的深度學習平臺已應用在騰訊的很多個場景中。所以今天會為大家介紹Angel:深度學習在騰訊廣告推薦系統中的應用實踐,介紹的內容會圍繞著下面幾點展開。

  • Angel機器學習平臺

  • 廣告推薦系統與模型

  • 模型訓練和優化

  • 優化效果

01

Angel機器學習平臺

1. Angel機器學習平臺架構

Angel機器學習平臺是騰訊自研的基於傳統Parameter Server架構的高效能分散式的機器學習平臺如圖1所示,詳細架構圖如圖2所示。它是一個全棧機器學習平臺,支援特徵工程、模型訓練、模型服務、引數調優等,同時支援機器學習、深度學習、圖計算和聯邦學習等場景。已經應用在眾多業務如騰訊內部廣告、金融和社交等場景,吸引了包括華為、新浪、小米等100多家外部公司的使用者和開發者。

Fig1 Angel機器學習平臺

Fig2 Angel機器學習平臺架構圖

Angel機器學習平臺設計時就考慮到了很多問題,首先是易用性,Angel機器學習平臺程式設計介面簡單,可快速上手使用,支援訓練資料和模型的自動化切分,減少使用者的干預,簡單易用。然後是可擴充套件性方面,Angel提供了PsFun介面,繼承特定的類可實現自定義引數更新邏輯和自定義資料格式和模型切分方式等。之後是靈活性,Angel實現了ANGEL_PS_WORKER和ANGEL_PS_SERVICE兩種模式,ANGEL_PS_WORKER模式下模型的訓練和推理服務由Angel平臺自身的PS和Worker完成,這種模式主打速度。而ANGEL_PS_SERVICE模式下,Angel只啟動Master和PS,具體的計算交給其他計算平臺(如Spark,TensorFlow)負責,Angel只負責提供Parameter Server的功能,主打生態來擴充套件Angel機器學習平臺的生態位。Angel通訊模式支援BSP、SSP、ASP等通訊協議,滿足各種複雜的實際通訊環境的要求。最後是穩定性,Angel的PS容錯採用CheckPoint模式,Angel每隔一段時間會將PS承載的引數寫入到分散式儲存系統中,如果某個PS例項掛掉,PS會讀取最後一個CheckPoint重新進行服務。Angel的Worker容錯方面,如果Work掛掉,Master會重新啟動一個Work例項,該例項會從Master上獲取掛掉時引數迭代資訊。Angel的Master任務資訊也會定期儲存到分散式儲存系統中,如果Mater掛掉,會藉助Yarn Master重啟機制重新拉起一個Master並載入資訊從之前的斷點開始任務。Angel還有有慢work檢測機制,如果某個Work執行過慢其任務會被排程到其他的Work上進行。

Angel機器學習平臺任務提交執行簡單,具體步驟如圖3所示,進入Cient後,啟動一個PS例項,該PS會從Client端載入模型,之後Client會啟動多個Work,Work會載入訓練資料開始訓練和學習,push和pull會進行引數的拉取和更新,訓練完成後將模型存入指定的路徑。

Fig3 Angel機器學習平臺提交執行流程圖

Angel機器學習平臺在程式碼結構設計上做了很多的抽象,這樣的設計方式可擴充套件性強,整個結構主要分為四層如圖4所示。核心層(Angel-Core)是基礎層,主要包括PSAgent、PSServer、Work、Network和Storage等。機器學習層(Angel-ML)提供基礎資料型別和方法,同時使用者可根據PsFunc定義自己的方法把私有模型接入。介面層(Angel-Client)可插拔式擴充套件,支援多種用途比如接入TensorFlow和pyTorch等。演算法層(Angel-MLLib)提供了封裝好的演算法如GBDT、SVM等。

Fig4 Angel機器學習的程式碼結構

2. Angel機器學習平臺在深度學習方向上的拓展和應用

深度學習常用的分散式計算正規化有兩種,分別是MPI ( 基於訊息模型的通訊模式 ) 和Parameter Server,如圖5所示。這兩種正規化均在Angel平臺上有實現,對於Parameter Server正規化的實現如圖6所示,Angel Work可通過Native C++的API介面接入常用的深度學習的OP如PyTorch或者Tensorflow等,在訓練的起始端Angel PS會把模型Push到每個Worker上,Worker會載入到對應的OP上進行訓練,每次訓練完成後會將梯度資訊回傳到PS上進行融合,以及應用優化器得到更新的引數,完成後又會分發到每個Worker上,重複上述過程直到訓練結束,最終將模型儲存到指定路徑。這種方案Angel PS提供了一個梯度PS的控制器,來接入多個分散式的Worker,每個Worker上可以執行一些通用的深度學習框架例,這種方案PyTorch版本的工作我們已經完成,並已經開源了(PyTorch on Angel)。另外一種是MPI AllReduce正規化如圖7所示,這種正規化梯度資訊是通過AllReduce方法進行融合的,在這種正規化的實現上,Angel PS是一個程序控制器,會在每個Work上拉起一個程序,這個程序可以是PyTorch或者是Tensorflow等程序,這種正規化對使用者侵入少,使用者開發的演算法不需要太多的修改即可接入到Angel平臺進行訓練。

MPI正規化

Parmeter Server正規化

Fig5 深度學習領域分散式計算常用的兩種正規化

Fig6 Parameter Server正規化在Angel上的實現

Fig7 Allreduce正規化在Angel上的實現

02

廣告推薦系統與模型

1. 騰訊的廣告推薦系統

騰訊大資料示意圖,如圖8所示,線上業務的資料如微信遊戲等會通過訊息中介軟體實時地傳遞到中臺系統,中臺系統包括實時計算、離線計算、排程系統和分散式儲存,這些資料有的會進行實時計算有的會進行離線計算,資料的應用也是從訊息中介軟體中獲取其需要的資料。

Fig8 騰訊大資料平臺

騰訊的推薦廣告推薦系統業務分層如圖9所示,使用者傳送一個請求後會去拉取使用者地畫像特徵,之後會對廣告庫的廣告進行一個初步地排序和打分,打分之後會提取使用者地特徵資訊,同時將廣告庫的ID數量降為百級別,在這個百級範圍內會有一個精細的排序,完成後將廣告推送給使用者。整個推薦系統面臨著下面的幾大挑戰,首先是資料來源多樣化,資料既有線上資料也有歷史落盤資料。其次是資料的格式多元化,包括使用者資訊、Item資訊、點選率和影象等資料的多元格式。然後是增量資料多,使用者請求頻繁,廣告庫也在不斷更新中。最後是訓練任務多元化,整個推薦系統涉及到粗排、精排、影象檢測和OCR等任務。為了解決上述問題,我們在精準排序任務上開發了一整套的軟體框架"智凌"(基於TensorFlow)來滿足訓練需求。

Fig9 騰訊廣告推薦系統

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

Fig10 "智凌"框架結構

Fig11"智凌"在基礎資料上的訓練流程圖

2. 騰訊的廣告推薦系統中的模型

DSSM增強語義模型如圖12,在這裡我們用該模型來計算使用者和推薦ID之間的相關性並在此基礎上計算使用者對給定推薦ID的點選率,相關性和點選率計算公式分別是:

DSSM模型較為簡單,分為Quey Id和Item Id並表達為低維語義向量,然後通過餘弦距離來計算兩個語義向量之間的距離。通過模型計算Query和Item之間的相關性,打分最高點就是我們要推薦的Item, 廣告推薦系統中的DSSM模型要支援以下一些新的需求點:

  • ID類特徵維度億級別;

  • 變化快,每週有25%是新條目,支援增量訓練。

Fig12 DSSM模型

VLAD/NetVLAD/NeXtVLAD等模型我們主要用來判斷兩個廣告之間的距離關係,傳統的VLAD可以理解為一個聚類合併的模型,其向量計算公式為:

NeXtVLAD如圖13則通過將ak符號函式變成一個可導函式來得到一個更好距離效果,NeXtVLAD的向量計算公式為:

其中,

Fig13 NeXtVLAD模型

YOLO V3如圖14是影象處理模型,在這裡我們將其應用在OCR業務最前端做初檢,它的特點是圖片輸入尺寸大(608*608,1024*1024),也因此YOLO模型的Loss部分佔據比較大的計算。

Fig14 YOLO V3模型

03

模型訓練和優化

1. 資料流優化

前面的介紹中我們知道"智凌"軟體框架是單管道資料流,現在我們將其優化為多管道如圖15所示,即通過多機多資料流來解決單機IO瓶頸問題。原來的單管道資料中會有DataQueue,如果資料流很大會對IO造成很大的壓力,優化為多對管道後為每一個訓練程序GPU定義了一個DataQueue,通過這種分散式方法來有效解決IO瓶頸問題。這種情況下的管理工作是通過Angel PS(AllReduce版本)程序控制器來進行管理的。

Fig15 "智凌"的多管道結構

2. Embedding計算優化

Embedding Lookup過程常會碰到如果在hash之前進行SparseFillEmptyRows操做會對空行填充預設值,增加過多的字串操做,優化後我們先做hash操做然後再做SparseFillEmptyRows操做,去除耗時過多的字串操作 ( 百萬級別 ),節省CPU算力來提升QPS,此優化單卡效能約有6%的提升。

3. 模型演算法層面優化

YOLO的Loss計算量較大,我們對其進行了特殊的優化。YOLO模型有三個Feature map層,傳統尋找正負樣本的時候,真正的Bounding box會在Feature map上會做一個遍歷比較,先橫向遍歷然後再縱向遍歷,遍歷的過程中尋找Feature map點和Bounding box IOU最大的值作為正樣本。因為影象的size很大,所以Feature map也很大,這使計算Loss耗時過長。計算Loss優化方法如下,由於x軸方向上的塊和y軸方向上的塊關於對角線對稱,所以我們計算Feature map和Bounding box 的IOU的時候按照中軸線對角點方向進行遍歷如圖16所示。先計算對角線方向上的的塊,然後再計算每個feature map塊兩邊的塊。這種優化方法可減少大量的計算量。另外,在某個點上向兩邊遍歷所有的Feature map塊的時候有一些計算技巧特點,比如往右上開始遍歷的時候,x軸與y軸是關於對角線對稱變化的,我們可以預估這種變化,從而有意識地去尋找最大的Anchor位置,然後丟棄其他資訊,通過這樣的優化方法也可以大量的減少計算量。我麼通過上述方法優化了Loss計算之後單卡效能有約10%的提升。

Fig16 YOLO V3優化示意圖

04

優化效果

通過在模型層面和資料層面的優化,以及Angel平臺應用到整個控制流程中,DSSM的單卡效能有33倍的提升,VLAD有22倍的提升,YOLO有2.5倍的提升如圖17所示。圖18、19、20是詳細測評結果,它們有三種類型的測試模式,分別是訓練資料通過TDbank(騰訊自研的MQ系統)線上拉取(時延包括網路傳輸、資料packing等);本地資料讀取,訓練資料預先存放本地磁碟(時延包括磁碟IO,資料對映預處理);Benchmark模式訓練資料放記憶體(時延僅包括資料對映預處理)。從圖18中看到Benchmark不考慮資料讀取前的延時基本能把整個系統計的算能力跑滿這是一個準線性地提升。考慮到實際的資料是從MQ中讀取,在1卡中提升不大TPS為3000多,2卡QPS為4000多,兩機兩卡TPS達到6000多,所以隨著多機越多,訓練效能達到線性的提升, VLAD-CTR模型的測試具有相同的結果。YOLO V3優化後1機1卡有2.5倍的效能提升,1機8卡有7.2倍的提升。

Fig17 優化後的效能提升結果

Fig18 優化後的DSSM-CVR模型效能提升結果

Fig19 優化後的VLAD-CTR模型效能提升結果

Fig20 優化後的YOLO V3模型效能提升結果

05

總結

今天主要和大家分享了三部分的內容,第一部分內容是介紹了騰訊的Angel機器學習平臺和其在深度學習方向上的拓展和應用,第二部分的內容是介紹了騰訊廣告推薦系統的特點和常用模型,最後一部分的內容介紹了Angel深度學習在騰訊廣告推薦系統中的應用,模型訓練和優化,以及取得的效果。

今天的分享就到這裡,謝謝大家。


在文末分享、點贊、在看,給個三連擊唄~~


嘉賓介紹:

郭躍超

騰訊|應用研究員

郭躍超,畢業於北京大學,主要研究方向是異構加速計算,分散式系統的設計開發和優化,語音/NLP等領域的演算法優化等。目前在騰訊主要負責Angel平臺的深度學習方面的新技術研究,開發和業務場景的落地應用。