這里是「王喆的機(jī)器學(xué)習(xí)筆記」的第三十七篇文章。今天我們「AI大咖談」邀請的大咖是阿里的算法專家王哲,所以今天是一次王喆對王哲的訪談。
王哲是上一屆DLP-KDD workshop Best Paper Award的獲得者,獲獎paper?COLD: Towards the Next Generation of Pre-Ranking System?深入探討了阿里大規(guī)模推薦系統(tǒng)粗排層的設(shè)計(jì)和實(shí)現(xiàn),是我非常推崇的業(yè)界實(shí)踐文章。所以今天我們也圍繞大規(guī)模推薦系統(tǒng)方向提出了十個問題,來看一下業(yè)界最前沿推薦系統(tǒng)的實(shí)踐經(jīng)驗(yàn)。
大咖簡介
王哲,花名公渡,2017年中國科學(xué)技術(shù)大學(xué)計(jì)算機(jī)專業(yè)碩士畢業(yè)。曾在螞蟻金服負(fù)責(zé)跨境游的推薦營銷算法。目前為阿里媽媽展示廣告團(tuán)隊(duì)算法專家,負(fù)責(zé)粗排及全鏈路聯(lián)動的相關(guān)工作,有多篇頂會論文。
王哲同時也是一名知乎大V?@蕭瑟,對他的工作感興趣的同學(xué)也可以直接跟他溝通
1. 去年DLP-KDD的best paper COLD的工作非常精彩,業(yè)界影響里非常大,能否簡單的介紹一下它的主要思路?
COLD是一個非常典型的算法-系統(tǒng)Co-Design的工作。它沒有限制模型結(jié)構(gòu),可以支持任意復(fù)雜的深度模型,COLD的網(wǎng)絡(luò)結(jié)構(gòu)是以拼接好的特征embedding作為輸入,后面是7層全連接網(wǎng)絡(luò),包含交叉特征。整個系統(tǒng)是實(shí)時訓(xùn)練,實(shí)時打分,以應(yīng)對線上分布的快速變化,對新廣告冷啟也更友好。當(dāng)然,如果特征和模型過于復(fù)雜,算力和延時都會難以接受。因此我們一方面設(shè)計(jì)了一個靈活的網(wǎng)絡(luò)架構(gòu)可以進(jìn)行效果和算力的平衡。另一方面進(jìn)行了很多工程上的優(yōu)化以節(jié)省算力。

2. 能否簡單明了的介紹一下深度學(xué)習(xí)時代,召回、粗排和精排在阿里環(huán)境下的主要特點(diǎn)?

這里以阿里媽媽定向廣告為例做一下介紹。
召回階段一個主要特點(diǎn)是規(guī)模較大,阿里媽媽這邊召回階段的廣告庫規(guī)模在千萬左右。另一個特點(diǎn)是召回的目標(biāo)是選擇符合后鏈路需要的集合,因此以多路召回方式為主,通過多種方式進(jìn)行集合選擇。不同路選擇的廣告分?jǐn)?shù)往往不可比。
目前我們在召回使用了基于樹結(jié)構(gòu)的全庫檢索算法 TDM,向量近臨檢索算法以及基于用戶行為觸發(fā)的相似廣告召回等。
粗排階段是從上萬個廣告中選擇上百個送給精排,實(shí)時性約束在十幾 ms 以內(nèi),除了排序邏輯之外,也包含一些廣告過濾邏輯。粗排是一個承上啟下的過渡模塊,既有召回的特點(diǎn),可以采用多通道方式進(jìn)行集合選擇,只不過通道往往較少。也兼具精排統(tǒng)一排序的要求,以便對召回的多路集合用統(tǒng)一價(jià)值進(jìn)行度量合并。粗排的天花板是精排,因此可以通過評估和精排的對齊程度來判斷粗排的迭代空間。
精排階段是非常復(fù)雜的深度模型,集中了較多的算力資源,延遲往往也較高,除了點(diǎn)擊率 / 收藏加購率 / 成交率等多目標(biāo)預(yù)估模型之外。后續(xù)還有調(diào)價(jià)模塊基于廣告主目標(biāo)對價(jià)格進(jìn)行調(diào)整以平衡廣告主和平臺收益,同時還有一些策略打散等重排邏輯。
如果把整個級聯(lián)排序系統(tǒng)比做火車的話,精排就是火車頭,是整個系統(tǒng)效果的天花板,是需要重兵投入的主戰(zhàn)場。
3. 使用Embedding+簡單運(yùn)算(內(nèi)積,簡單網(wǎng)絡(luò))做快速召回/粗排的做法已經(jīng)十分成熟,online inference的效率也很高,它能否代替COLD? COLD相比它的主要優(yōu)勢又在哪里?

使用Embedding+簡單運(yùn)算的方式雖然算力和RT(Reaction Time)消耗較低,但是在很多對模型效果和實(shí)時性要求較高的場景并不能完全代替COLD。COLD與之相比沒有對模型結(jié)構(gòu)進(jìn)行限制,可以使用交叉特征和更復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),因此具有更強(qiáng)的擬合能力,同時可以對算力和效果進(jìn)行靈活的平衡。COLD實(shí)時訓(xùn)練實(shí)時打分的架構(gòu)可以更好的適應(yīng)數(shù)據(jù)分布的快速變化,有利于快速迭代,在冷啟動上也更為友好。
4. 現(xiàn)在業(yè)界有一個趨勢是做分層的融合,比如粗排和精排的融合,甚至召回和排序的融合,你覺得這個趨勢會不會發(fā)展下去,有哪些難點(diǎn)?
正所謂合久必分,分久必合。召回 - 粗排 - 精排這種級聯(lián)排序架構(gòu),是當(dāng)初算力 RT 不足情況下的一種折中。當(dāng)前確實(shí)存在分層融合的趨勢。例如在召回階段,我們也在嘗試用排序的方式,突破近似檢索的瓶頸,直接進(jìn)行全庫打分。而粗排階段也在探索粗排和精排的聯(lián)合訓(xùn)練,在一次訓(xùn)練過程中同時產(chǎn)出多個不同結(jié)構(gòu)的模型,粗排模型只是其中一個結(jié)構(gòu)較為簡化的版本。這個趨勢一方面是因?yàn)樯疃葘W(xué)習(xí)時代算法技術(shù)的突破,使整個級聯(lián)架構(gòu)在模型結(jié)構(gòu)上的統(tǒng)一成為了可能。
另一方面也要得益于 GPU/TPU/NPU 等硬件帶來的算力紅利釋放。隨著各模塊技術(shù)水位不斷增加,單點(diǎn)迭代的難度也越來越高,從整個級聯(lián)排序架構(gòu)的視角進(jìn)行改進(jìn),進(jìn)行模塊間的融合,這個趨勢未來會繼續(xù)發(fā)展下去。而技術(shù)上的難點(diǎn)一方面在于樣本選擇偏差問題,即前鏈路(召回 / 粗排)的 inference 空間和訓(xùn)練空間存在較大差異,從而影響了融合的效果。另一方面則是在打分規(guī)模不斷提升的情況下,如何控制算力和 RT 的增長。同時不同模塊之間應(yīng)該如何更好的交互,也值得進(jìn)一步的研究。
5. 你如何對比COLD的工作和知識蒸餾的區(qū)別?
COLD是一種新的粗排實(shí)時排序架構(gòu),知識蒸餾是一種提升模型效果的技術(shù)手段,兩者并不沖突。目前我們也在嘗試,在當(dāng)前COLD粗排模型的基礎(chǔ),通過和精排模型的聯(lián)合訓(xùn)練以及知識蒸餾,取得了進(jìn)一步的線上效果提升。

6. COLD使用了online learning,能否介紹一下你們用到的具體方法?是在什么平臺(TensorFlow?Flink?Server內(nèi)部?)上進(jìn)行的訓(xùn)練?
COLD使用的Online Learning技術(shù),實(shí)時數(shù)據(jù)流是基于阿里媽媽自研的星云ODL系統(tǒng),底層是Blink(Blink是阿里巴巴通過改進(jìn)Flink項(xiàng)目而創(chuàng)建的阿里內(nèi)部產(chǎn)品)。訓(xùn)練基于的是阿里媽媽內(nèi)部自研的深度訓(xùn)練框架XDL。模型目前是實(shí)時訓(xùn)練,小時級更新(我們的業(yè)務(wù)場景小時級已經(jīng)足夠,整個系統(tǒng)可以支持更高的更新頻率)。

7. Model serving一直是業(yè)界的一個難點(diǎn),COLD模型是如何部署到線上的?
粗排的線上打分系統(tǒng)主要包含兩部分:特征計(jì)算和網(wǎng)絡(luò)計(jì)算。特征計(jì)算部分主要負(fù)責(zé)從索引中拉取用戶和廣告的特征并且進(jìn)行交叉特征的相關(guān)計(jì)算。而網(wǎng)絡(luò)計(jì)算部分,會將特征轉(zhuǎn)成embedding向量,并將它們拼接進(jìn)行網(wǎng)絡(luò)計(jì)算。
為了將COLD部署到線上,工程上進(jìn)行了很多優(yōu)化,包括:
并行化:為了實(shí)現(xiàn)低時延高吞吐的目標(biāo),并行計(jì)算是非常重要的。而粗排對于不同的廣告的計(jì)算是相互獨(dú)立的,因此可以將計(jì)算分成并行的多個請求以同時進(jìn)行計(jì)算,并在最后進(jìn)行結(jié)果合并。特征計(jì)算部分使用了多線程方式進(jìn)一步加速,網(wǎng)絡(luò)計(jì)算部分使用了GPU以及和達(dá)摩院合作的NPU專用硬件。
行列轉(zhuǎn)化:特征計(jì)算的過程可以抽象看做兩個稀疏矩陣的計(jì)算,一個是用戶矩陣,另一個是廣告矩陣。矩陣的行是batch_size,對于用戶矩陣來說batch_size為1,對于廣告矩陣來說batch_size為廣告數(shù),矩陣的列是featue group的數(shù)目。常規(guī)計(jì)算廣告矩陣的方法是逐個廣告計(jì)算在不同feature group下特征的結(jié)果,這個方法符合通常的計(jì)算習(xí)慣,組合特征實(shí)現(xiàn)也比較簡單,但是這種計(jì)算方式是訪存不連續(xù)的,有冗余遍歷、查找的問題。事實(shí)上,因?yàn)橥粋€feature group的計(jì)算方法相同,因此可以利用這個特性,將行計(jì)算重構(gòu)成列計(jì)算,對同一列上的稀疏數(shù)據(jù)進(jìn)行連續(xù)存儲,之后利用MKL優(yōu)化單特征計(jì)算,使用SIMD (Single Instruction Multiple Data)優(yōu)化組合特征算子,以達(dá)到加速的目的。

Float16加速:?對于COLD來說,絕大部分網(wǎng)絡(luò)計(jì)算都是矩陣乘法,而NVIDIA的Turning架構(gòu)對Float16的矩陣乘法有額外的加速,因此我們將粗排模型做了Float16轉(zhuǎn)化。使用Float16以后,CUDA kernel的運(yùn)行性能有顯著提升,同時kernel的啟動時間成為了瓶頸。為了解決這個問題,我們使用了MPS (Multi-Process Service)來解決kernel啟動的開銷。Float16和MPS技術(shù),可以帶來接近2倍的QPS提升。
8. 現(xiàn)在大家越來越強(qiáng)調(diào)Algorithm-System Codesign,我想COLD應(yīng)該是這方面非常成功的案例,能否介紹一下你們的經(jīng)驗(yàn)?如何做到不同模型和工程團(tuán)隊(duì)/成員之間的良好配合?
在COLD之前,粗排和精排是兩套獨(dú)立的模型訓(xùn)練和線上打分的架構(gòu),迭代維護(hù)很不方便。COLD在架構(gòu)上接耦了排序引擎和在線打分模塊,統(tǒng)一了粗排和精排的ODL訓(xùn)練迭代體系和在線打分體系,一方面降低了迭代維護(hù)成本,另一方面也便于工程團(tuán)隊(duì)進(jìn)行打分性能的專門優(yōu)化。同時COLD的架構(gòu)可以很靈活的對算力和效果進(jìn)行平衡,不再受限于雙塔結(jié)構(gòu)。
團(tuán)隊(duì)成員配合上,首先我們團(tuán)隊(duì)很早就意識到了Algorithm-System Co-design的重要性,因此專門成立了效能團(tuán)隊(duì),作為聯(lián)接算法和工程的橋梁,以算力優(yōu)化和迭代效率作為切入點(diǎn),發(fā)揮了很重要的作用。算法團(tuán)隊(duì),效能團(tuán)隊(duì)和工程團(tuán)隊(duì)相互配合,工作上各有側(cè)重。算法團(tuán)隊(duì)主要負(fù)責(zé)模型的迭代維護(hù)和效果上的持續(xù)提升。效能團(tuán)隊(duì)會在算法迭代的早期就介入,進(jìn)行算力和模型的平衡。同時效能團(tuán)隊(duì)也通過改進(jìn)優(yōu)化算法的迭代鏈路(特征加工/ODL流/訓(xùn)練框架等)來幫助提升迭代效率。工程團(tuán)隊(duì)會更側(cè)重于線上引擎以及打分模塊的性能優(yōu)化和功能需求支持。通過這種合作模式保證了COLD的上線。
9. 就你個人而言,有沒有遇到模型/系統(tǒng)改進(jìn)的瓶頸期,如何破局?站在2021年,你如何預(yù)測未來算法發(fā)展的紅利在哪?
有遇到過,這里還是以COLD作為例子。在COLD上線之后,粗排進(jìn)一步的迭代到了瓶頸期,很多模型優(yōu)化都難以取得進(jìn)一步的效果提升。我破局的思路就是跳出粗排這個單一模塊,站在整個排序鏈路的視角重新思考問題。通過在離線分析發(fā)現(xiàn)粗排和精排的對齊程度已經(jīng)很高,粗排進(jìn)一步迭代空間有限。因此需要從前鏈路的召回入手,通過提升召回進(jìn)入粗排的廣告數(shù)目和質(zhì)量,來進(jìn)一步打開粗排的迭代空間。因此我在召回從全鏈路目標(biāo)對齊的視角出發(fā),做了一些技術(shù)上的創(chuàng)新突破,構(gòu)建了一些對齊后鏈路目標(biāo)的召回通道,不僅打開了召回的迭代空間,也打開了粗排的空間。后面又回到粗排,一方面繼續(xù)從全鏈路目標(biāo)對齊的視角出發(fā),對粗排做進(jìn)一步的技術(shù)升級。同時也圍繞樣本選擇偏差問題,把召回迭代過程中積累的技術(shù)經(jīng)驗(yàn)遷移到粗排,取得了很好的線上效果。
至于未來算法發(fā)展的紅利,這是個挺大也挺難回答的問題。這里我斗膽發(fā)表一點(diǎn)自己的看法。未來在下面幾個方向,有可能存在一些紅利:
1. 端智能:用戶移動端設(shè)備的性能越來越強(qiáng),這里潛藏著龐大的算力資源有待挖掘利用。同時端上有用戶更實(shí)時更豐富的行為信息,對提升模型預(yù)估精度也有很大幫助。端上和服務(wù)端如何能更好的配合協(xié)同是非常值得研究的問題。

2. 排序架構(gòu)升級:目前的級聯(lián)排序架構(gòu),各模塊之間一般獨(dú)立迭代,在對齊最終目標(biāo)的過程中很容易因?yàn)楦髂K的差異造成鏈路損耗影響最終效果。如何能更好地進(jìn)行優(yōu)化從而實(shí)現(xiàn)全鏈路的目標(biāo)對齊,如何突破級聯(lián)排序架構(gòu)構(gòu)建一個更優(yōu)的排序架構(gòu)體系是很值得探索的。
3. 算力的全局最優(yōu)化分配:之前大家對算力的優(yōu)化往往集中在單點(diǎn)。如果能真正把算力作為一個變量,在整個系統(tǒng)鏈路進(jìn)行全局最優(yōu)分配,是有可能進(jìn)一步釋放一部分算力空間的。
(推薦參考論文 DCAF:?A Dynamic Computation Allocation Framework for Online Serving System?)
10. 給剛?cè)胄械耐瑢W(xué)說兩句話吧,有哪些成功的經(jīng)驗(yàn)和失敗的教訓(xùn)可以對他們講?
算法工程師的核心競爭力不僅僅在于對模型的理解,更關(guān)鍵的在于對業(yè)務(wù)的深入理解,在于能否幫助業(yè)務(wù)解決實(shí)際問題。有時候如果能跳出對模型等細(xì)節(jié)的關(guān)注,站在全局的視角,不僅有助于解決問題,也可以發(fā)現(xiàn)新的機(jī)會。就像COLD之后,我面臨粗排后面如何進(jìn)一步迭代的問題,在粗排和精排模型對齊程度已經(jīng)很高的情況下,繼續(xù)想辦法去優(yōu)化粗排模型就會面臨很大困難,但是跳出粗排從整個鏈路的視角看待問題,就柳暗花明又一村。
結(jié)束跟王哲的談話之后,我有兩點(diǎn)感觸是最強(qiáng)烈的,與你分享一下:
在業(yè)界經(jīng)歷了從簡單的“排序?qū)印钡健罢倩?粗排-精排-重排“的越來越精細(xì)化的分層之后,隨著一線公司對于算力的運(yùn)用分配更加純熟,對于深度學(xué)習(xí)架構(gòu)的不斷改進(jìn),業(yè)界有可能已經(jīng)走上了“召回-粗排-精排層”的合并之路。正如王哲所說,天下大勢,合久必分,分久必合。當(dāng)初的分層拆分是由于算力限制,延遲限制的無奈之舉,今天的合并也是由于我們沖破了這些限制,進(jìn)而融合各層。
算法工程師的破局之路,離不開對于整體系統(tǒng)的理解。只有心中有Full Picture,我們才能夠做到有利于全局的改進(jìn)。在COLD的工作中,對于粗排層關(guān)鍵性的改進(jìn),也離不開對于整個推薦鏈路的理解,這是我們所有人值得借鑒的。
最后,再與大家分享一下2021年DLP-KDD的征稿信息。作為走出了COLD,DCAF,Res-Embedding等多個業(yè)界影響力非常大的工作的workshop,我們歡迎更多推薦、廣告和搜索方向相關(guān)的同學(xué)加入進(jìn)來,參與成果的分享。
DLP-KDD Workshop介紹:在國際頂級會議KDD召開之際,在國際頂級會議KDD召開之際,來自阿里巴巴/微軟/華為/Roku,以及上海交通大學(xué)/猶他大學(xué)等工業(yè)界/學(xué)術(shù)界資深同行,攜手舉辦全球第三屆面向高維稀疏數(shù)據(jù)的深度學(xué)習(xí)實(shí)踐國際研討會(The 3rd International Workshop on Deep Learning Practice for High-Dimensional Sparse Data with KDD 2021,簡稱DLP-KDD 2021),在此誠摯邀請學(xué)術(shù)界及工業(yè)界供稿。
2021年DLP-KDD的征稿結(jié)束日期是2021年5月20日,詳細(xì)投稿信息請?jiān)谙挛闹胁榭础?/p>
王喆:DLP-KDD 2021征文:搜索、推薦、廣告領(lǐng)域深度學(xué)習(xí)實(shí)踐國際研討會zhuanlan.zhihu.com
