数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 MCMC 采样
- 机器学习方法概论
统计学习
深度学习
- 深度学习简介
- 深度前馈网络
- 反向传播算法
- 正则化
- 深度学习中的最优化问题
- 卷积神经网络
- CNN:图像分类
- 循环神经网络 RNN
- Transformer
- 一、Transformer [2017]
- 二、Universal Transformer [2018]
- 三、Transformer-XL [2019]
- 四、GPT1 [2018]
- 五、GPT2 [2019]
- 六、GPT3 [2020]
- 七、OPT [2022]
- 八、BERT [2018]
- 九、XLNet [2019]
- 十、RoBERTa [2019]
- 十一、ERNIE 1.0 [2019]
- 十二、ERNIE 2.0 [2019]
- 十三、ERNIE 3.0 [2021]
- 十四、ERNIE-Huawei [2019]
- 十五、MT-DNN [2019]
- 十六、BART [2019]
- 十七、mBART [2020]
- 十八、SpanBERT [2019]
- 十九、ALBERT [2019]
- 二十、UniLM [2019]
- 二十一、MASS [2019]
- 二十二、MacBERT [2019]
- 二十三、Fine-Tuning Language Models from Human Preferences [2019]
- 二十四 Learning to summarize from human feedback [2020]
- 二十五、InstructGPT [2022]
- 二十六、T5 [2020]
- 二十七、mT5 [2020]
- 二十八、ExT5 [2021]
- 二十九、Muppet [2021]
- 三十、Self-Attention with Relative Position Representations [2018]
- 三十一、USE [2018]
- 三十二、Sentence-BERT [2019]
- 三十三、SimCSE [2021]
- 三十四、BERT-Flow [2020]
- 三十五、BERT-Whitening [2021]
- 三十六、Comparing the Geometry of BERT, ELMo, and GPT-2 Embeddings [2019]
- 三十七、CERT [2020]
- 三十八、DeCLUTR [2020]
- 三十九、CLEAR [2020]
- 四十、ConSERT [2021]
- 四十一、Sentence-T5 [2021]
- 四十二、ULMFiT [2018]
- 四十三、Scaling Laws for Neural Language Models [2020]
- 四十四、Chinchilla [2022]
- 四十七、GLM-130B [2022]
- 四十八、GPT-NeoX-20B [2022]
- 四十九、Bloom [2022]
- 五十、PaLM [2022] (粗读)
- 五十一、PaLM2 [2023](粗读)
- 五十二、Self-Instruct [2022]
- 句子向量
- 词向量
- 传统CTR 预估模型
- CTR 预估模型
- 一、DSSM [2013]
- 二、FNN [2016]
- 三、PNN [2016]
- 四、DeepCrossing [2016]
- 五、Wide 和 Deep [2016]
- 六、DCN [2017]
- 七、DeepFM [2017]
- 八、NFM [2017]
- 九、AFM [2017]
- 十、xDeepFM [2018]
- 十一、ESMM [2018]
- 十二、DIN [2017]
- 十三、DIEN [2019]
- 十四、DSIN [2019]
- 十五、DICM [2017]
- 十六、DeepMCP [2019]
- 十七、MIMN [2019]
- 十八、DMR [2020]
- 十九、MiNet [2020]
- 二十、DSTN [2019]
- 二十一、BST [2019]
- 二十二、SIM [2020]
- 二十三、ESM2 [2019]
- 二十四、MV-DNN [2015]
- 二十五、CAN [2020]
- 二十六、AutoInt [2018]
- 二十七、Fi-GNN [2019]
- 二十八、FwFM [2018]
- 二十九、FM2 [2021]
- 三十、FiBiNET [2019]
- 三十一、AutoFIS [2020]
- 三十三、AFN [2020]
- 三十四、FGCNN [2019]
- 三十五、AutoCross [2019]
- 三十六、InterHAt [2020]
- 三十七、xDeepInt [2023]
- 三十九、AutoDis [2021]
- 四十、MDE [2020]
- 四十一、NIS [2020]
- 四十二、AutoEmb [2020]
- 四十三、AutoDim [2021]
- 四十四、PEP [2021]
- 四十五、DeepLight [2021]
- 图的表达
- 一、DeepWalk [2014]
- 二、LINE [2015]
- 三、GraRep [2015]
- 四、TADW [2015]
- 五、DNGR [2016]
- 六、Node2Vec [2016]
- 七、WALKLETS [2016]
- 八、SDNE [2016]
- 九、CANE [2017]
- 十、EOE [2017]
- 十一、metapath2vec [2017]
- 十二、GraphGAN [2018]
- 十三、struc2vec [2017]
- 十四、GraphWave [2018]
- 十五、NetMF [2017]
- 十六、NetSMF [2019]
- 十七、PTE [2015]
- 十八、HNE [2015]
- 十九、AANE [2017]
- 二十、LANE [2017]
- 二十一、MVE [2017]
- 二十二、PMNE [2017]
- 二十三、ANRL [2018]
- 二十四、DANE [2018]
- 二十五、HERec [2018]
- 二十六、GATNE [2019]
- 二十七、MNE [2018]
- 二十八、MVN2VEC [2018]
- 二十九、SNE [2018]
- 三十、ProNE [2019]
- Graph Embedding 综述
- 图神经网络
- 一、GNN [2009]
- 二、Spectral Networks 和 Deep Locally Connected Networks [2013]
- 三、Fast Localized Spectral Filtering On Graph [2016]
- 四、GCN [2016]
- 五、神经图指纹 [2015]
- 六、GGS-NN [2016]
- 七、PATCHY-SAN [2016]
- 八、GraphSAGE [2017]
- 九、GAT [2017]
- 十、R-GCN [2017]
- 十一、 AGCN [2018]
- 十二、FastGCN [2018]
- 十三、PinSage [2018]
- 十四、GCMC [2017]
- 十五、JK-Net [2018]
- 十六、PPNP [2018]
- 十七、VRGCN [2017]
- 十八、ClusterGCN [2019]
- 十九、LDS-GNN [2019]
- 二十、DIAL-GNN [2019]
- 二十一、HAN [2019]
- 二十二、HetGNN [2019]
- 二十三、HGT [2020]
- 二十四、GPT-GNN [2020]
- 二十五、Geom-GCN [2020]
- 二十六、Graph Network [2018]
- 二十七、GIN [2019]
- 二十八、MPNN [2017]
- 二十九、UniMP [2020]
- 三十、Correct and Smooth [2020]
- 三十一、LGCN [2018]
- 三十二、DGCNN [2018]
- 三十三、AS-GCN
- 三十四、DGI [2018]
- 三十五、DIFFPOLL [2018]
- 三十六、DCNN [2016]
- 三十七、IN [2016]
- 图神经网络 2
- 图神经网络 3
- 推荐算法(传统方法)
- 一、Tapestry [1992]
- 二、GroupLens [1994]
- 三、ItemBased CF [2001]
- 四、Amazon I-2-I CF [2003]
- 五、Slope One Rating-Based CF [2005]
- 六、Bipartite Network Projection [2007]
- 七、Implicit Feedback CF [2008]
- 八、PMF [2008]
- 九、SVD++ [2008]
- 十、MMMF 扩展 [2008]
- 十一、OCCF [2008]
- 十二、BPR [2009]
- 十三、MF for RS [2009]
- 十四、 Netflix BellKor Solution [2009]
- 推荐算法(神经网络方法 1)
- 一、MIND [2019](用于召回)
- 二、DNN For YouTube [2016]
- 三、Recommending What Video to Watch Next [2019]
- 四、ESAM [2020]
- 五、Facebook Embedding Based Retrieval [2020](用于检索)
- 六、Airbnb Search Ranking [2018]
- 七、MOBIUS [2019](用于召回)
- 八、TDM [2018](用于检索)
- 九、DR [2020](用于检索)
- 十、JTM [2019](用于检索)
- 十一、Pinterest Recommender System [2017]
- 十二、DLRM [2019]
- 十三、Applying Deep Learning To Airbnb Search [2018]
- 十四、Improving Deep Learning For Airbnb Search [2020]
- 十五、HOP-Rec [2018]
- 十六、NCF [2017]
- 十七、NGCF [2019]
- 十八、LightGCN [2020]
- 十九、Sampling-Bias-Corrected Neural Modeling [2019](检索)
- 二十、EGES [2018](Matching 阶段)
- 二十一、SDM [2019](Matching 阶段)
- 二十二、COLD [2020 ] (Pre-Ranking 模型)
- 二十三、ComiRec [2020](https://www.wenjiangs.com/doc/0b4e1736-ac78)
- 二十四、EdgeRec [2020]
- 二十五、DPSR [2020](检索)
- 二十六、PDN [2021](mathcing)
- 二十七、时空周期兴趣学习网络ST-PIL [2021]
- 推荐算法之序列推荐
- 一、FPMC [2010]
- 二、GRU4Rec [2015]
- 三、HRM [2015]
- 四、DREAM [2016]
- 五、Improved GRU4Rec [2016]
- 六、NARM [2017]
- 七、HRNN [2017]
- 八、RRN [2017]
- 九、Caser [2018]
- 十、p-RNN [2016]
- 十一、GRU4Rec Top-k Gains [2018]
- 十二、SASRec [2018]
- 十三、RUM [2018]
- 十四、SHAN [2018]
- 十五、Phased LSTM [2016]
- 十六、Time-LSTM [2017]
- 十七、STAMP [2018]
- 十八、Latent Cross [2018]
- 十九、CSRM [2019]
- 二十、SR-GNN [2019]
- 二十一、GC-SAN [2019]
- 二十二、BERT4Rec [2019]
- 二十三、MCPRN [2019]
- 二十四、RepeatNet [2019]
- 二十五、LINet(2019)
- 二十六、NextItNet [2019]
- 二十七、GCE-GNN [2020]
- 二十八、LESSR [2020]
- 二十九、HyperRec [2020]
- 三十、DHCN [2021]
- 三十一、TiSASRec [2020]
- 推荐算法(综述)
- 多任务学习
- 系统架构
- 实践方法论
- 深度强化学习 1
- 自动代码生成
工具
- CRF
- lightgbm
- xgboost
- scikit-learn
- spark
- numpy
- matplotlib
- pandas
- huggingface_transformer
- 一、Tokenizer
- 二、Datasets
- 三、Model
- 四、Trainer
- 五、Evaluator
- 六、Pipeline
- 七、Accelerate
- 八、Autoclass
- 九、应用
- 十、Gradio
Scala
- 环境搭建
- 基础知识
- 函数
- 类
- 样例类和模式匹配
- 测试和注解
- 集合 collection(一)
- 集合collection(二)
- 集成 Java
- 并发
二十二、COLD [2020 ] (Pre-Ranking 模型)
近年来,由于互联网服务的快速增长,用户一直在与信息过载作斗争。搜索引擎、推荐系统和在线广告已经成为每天为数十亿用户提供服务的基础信息检索
application
。这些系统大多数遵循多阶段级联架构multi-stage cascade architecture
,即通过matching
、pre-ranking
、ranking
和reranking
等顺序模块sequential modules
来提取候选item
。下图给出了一个简短的说明。已经有很多论文讨论如何建立一个有效
effective
的、高效efficient
的ranking
系统。然而,很少有工作关注pre-ranking
系统。为简单起见,在本文的剩余部分只讨论展示广告系统display advertising system
中pre-ranking
系统的设计。这里讨论的技术可以很容易应用于推荐系统、搜索引擎等。长期以来,人们认为
pre-ranking
只是ranking
系统的简化版本。- 一方面,考虑到在线
serving
的算力成本computing power cost
挑战,需要对更大规模的候选item
集合进行排序。以阿里巴巴的展示广告系统为例。传统上,pre-ranking
系统要评分的候选集合的规模可以扩展到数万个item
,而在后续ranking
系统中要评分的候选集合规模则变成数百个item
。 - 另一方面,
ranking
和pre-ranking
系统都有严格的延迟限制,例如10 ~ 20 ms
。在这种情况下,pre-ranking
系统通常被设计为轻量级排序系统,通过简化ranking
模型来处理在线推断的算力爆炸。
- 一方面,考虑到在线
pre-ranking
系统的发展历史简介:回顾pre-ranking
系统在工业中的发展历史,我们可以简单地从模型的角度将其分为四代,如下图所示。 $ \mathbf{\vec x}_u,\mathbf{\vec x}_a,\mathbf{\vec x}_{u,a} $ 分别是user
、ad
、cross
的原始特征。 $ \mathbf{\vec e}_u,\mathbf{\vec e}_a,\mathbf{\vec e}_{u,a} $ 分别是user
、ad
、cross
特征的embedding
。第一代是非个性化的
ad-wise
统计得分。它通过平均每个广告的最近CTR
来计算pre-rank score
。score
可以高频high frequency
更新。缺点:非个性化、无法处理新广告、曝光稀疏广告的
CTR
统计不置信。第二代是
Logistic Regression: LR
模型。它是浅层机器学习时代大规模ranking
模型的轻量级版本,可以以online learning
和serving
的方式进行部署。缺点:需要大量的手工特征工程、无法捕获特征之间的非线性交互作用。
第三代是基于向量内积的深度学习模型,也是目前
state-of-the-art
的pre-ranking
模型。在该方法中,user-wise embedding
向量和ad-wise embedding
向量分别以离线方式预计算,没有user-ad
交叉特征,然后在线计算两个向量的内积从而获得pre-rank score
。缺点:向量内积的方式过于简单,使得模型效果较差。
尽管和前两代相比,基于向量内积的
DNN
显著提升了模型性能,但是它仍然面临量大挑战,还留有进一步改进的空间:- 模型表达能力受限。如
《Learning Tree-based Deep Model for Recommender Systems》
所述,模型的表达能力受限于向量内积形式的深度模型。 - 模型更新频率较低。基于向量内积的
DNN
的embedding
向量需要离线预先计算。这意味着基于向量内积的DNN
模型只能以低频方式更新,难以适应最新的数据分布的变化,尤其是在数据发生剧烈变化时(如双十一当天)。
综上所述,上述三代
pre-ranking
系统都遵循相同的范式:将算力视为恒定约束,在此基础上开发了与训练系统、serving
系统相对应的pre-ranking
模型。也就是说,模型的设计和算力的优化是解耦的,这通常会导致模型的简化以适应算力的需求。这会导致次优suboptimal
的性能。下一代
pre-ranking
系统COLD
:在论文《COLD: Towards the Next Generation of Pre-Ranking System》
中,作者从算法--系统协同设计co-design
的角度重新思考了pre-ranking
系统的挑战。论文设计了一个新的pre-ranking
系统,通过联合优化pre-ranking
模型和它所消耗的算力来节省算力,而不是通过限制模型体系结构(这会限制模型性能)。作者将其命名为Computing power cost-aware Online and Lightweight Deep pre-ranking system: COLD
,如上图所示。论文将
COLD
视为第四代pre-ranking
系统。COLD
兼顾了模型设计和系统设计。COLD
中的算力成本也是一个可以与模型性能联合优化的变量。换句话讲,COLD
是一种灵活的pre-ranking
系统,模型性能和算力成本之间的trade-off
是可控的controllable
。COLD
的主要特点总结如下:- 具有交叉特征的任意深度模型可以在可控算力成本的约束下应用于
COLD
。在论文的真实系统中,COLD
模型是一个七层全连接深度神经网络,具有Squeeze-and-Excitation: SE
block
。SE block
有利于我们进行特征组的选择,以便于从复杂的ranking
模型中获得轻量级版本。该选择是通过考虑模型性能和算力成本来执行的。也就是说,COLD
模型的算力成本是可控的。 - 通过应用优化技巧(例如,用于加速
inference
的并行计算和半精度计算),显著降低了算力成本。这进一步为COLD
应用更复杂的深度模型以达到更好性能带来了空间。 COLD
模型以online learning
和serving
的方式工作,为系统带来了出色的能力来应对数据分布变化的挑战。COLD
的全在线pre-ranking
系统为我们提供了灵活的基础设施,支持新模型开发和快速的在线A/B test
,这也是目前ranking
系统拥有的最佳系统实践。
下图给出了所有四代
ranking
系统在模型表达能力和更新频率方面的比较,其中COLD
实现了最佳的trade-off
。2019
年以来,COLD
已经部署在阿里巴巴展示广告系统display advertising system
中几乎所有涉及pre-ranking
模块的产品中,每天为数亿用户提供高并发请求。和最新的在线的、基于向量内积的DNN
版本相比,COLD
带来了6%
以上的RPM
提升,这对于业务而言是一个显著的提升。- 具有交叉特征的任意深度模型可以在可控算力成本的约束下应用于
22.1 模型
22.1.1 Pre-Ranking 系统概述
pre-ranking
模块可以被视为matching
模块和ranking
模块之间的连接纽带:它接收matching
结果并进行粗选,从而减少用于后续ranking
模块的候选集的大小。以阿里巴巴的展示广告系统为例,输入
pre-ranking
系统的候选集大小往往达到万级。然后pre-ranking
模型通过某些指标(例如eCPM
)选择top N
候选item
。 $ N $ 的量级通常为数百。这些获胜的 $ N $ 个候选item
通过复杂的ranking
模型进一步排序,从而得到最终结果展示给用户。一般而言,
pre-ranking
和ranking
具有相似的功能,二者之间最大的区别在于问题的规模。显然,pre-ranking
系统要排序的候选集合规模是ranking
系统的10
倍或者更大。在pre-ranking
系统中直接应用ranking
模型似乎是不可能的,这将面临算力成本的巨大挑战。如何平衡模型性能和它所消耗的算力是pre-ranking
系统的关键考虑因素。基于向量内积的
DNN
模型:在深度学习成功的推动下,基于向量内积的DNN
模型已经广泛应用于pre-ranking
系统并实现了state-of-the-art
性能。基于向量内积的
$ p = \sigma\left(\mathbf{\vec v}_u\cdot \mathbf{\vec v}_a\right) = \frac{1}{1+\exp\left(-\mathbf{\vec v}_u\cdot \mathbf{\vec v}_a\right)} $DNN
模型的架构由两个并行的子神经网络组成:用户特征被馈入到左侧子网络,广告特征被馈入到右侧子网络。对于每个子网络,特征首先输入embedding
层,然后拼接在一起,然后是全连接FC
层。这样我们得到两个固定长度的向量 $ \mathbf{\vec v}_u,\mathbf{\vec v}_a $ ,它们分别代表用户信息和广告信息。 最后,pre-ranking score
$ p $ 计算如下:基于向量内积的
DNN
模型的训练遵循与传统ranking
模型相同的方式。为了关注pre-ranking
模型的关键部分,我们省略了训练的细节。基于向量内积的
DNN
模型的pre-ranking
系统的缺点:基于向量内积的DNN
模型在延迟latency
和计算资源方面是高效的。 $ \mathbf{\vec v}_u,\mathbf{\vec v}_a $ 的向量可以离线预先计算,score
$ p $ 可以在线计算。这使得它足以应对算力成本的挑战。下图说明了基础设施的经典实现。和前几代pre-ranking
模型相比,基于向量内积的DNN
模型取得了显著的性能提升。然而,基于向量内积的
DNN
模型通过将模型限制为向量内积的形式,过于关注降低算力成本,这导致模型性能欠佳。我们总结了以下缺点:模型表达能力受限于向量内积的形式,无法利用
user-ad
交叉特征。《Learning Tree-based Deep Model for Recommender Systems》
已经表明:采用复杂的深度模型比向量内积形式网络具有显著的预测效果优势。用户向量 $ \mathbf{\vec v}_u $ 和广告向量 $ \mathbf{\vec v}_a $ 需要枚举所有用户和所有广告进行离线预计算,从而减少计算资源并优化延迟。对于拥有数亿用户和数千万广告的业务,预计算通常需要几个小时,难以适应数据分布的变化。当数据发生剧烈变化时(如双十一当天),这会给模型性能带来很大的伤害。
模型更新频率也受到系统实现的影响。对于基于向量内积的
DNN
模型,用户向量索引/广告向量索引版本之间的天级切换需要同时执行,这很难满足两个索引存储在不同在线系统中的情况。根据我们的经验,延迟切换也会损害模型性能。如果用户向量索引切换为新版本,而广告向量索引保留为旧版本,则出现索引不一致,会严重降低在线
serving
的效果。因此用户向量索引/广告向量索引需要同时切换。
基于向量内积的
DNN
模型的pre-ranking
系统的这些缺点源于对算力的过度追求,并且难以完全解决。在接下来的部分中,我们将介绍我们的新的解决方案,它打破了pre-ranking
系统的经典设计方法。
22.1.2 COLD
在这一部分,我们将详细介绍我们新设计的
pre-ranking
系统COLD
。COLD
背后的核心思想是:同时考虑模型设计和系统设计。COLD
中的算力成本也是一个可以和模型性能联合优化的变量。换句话说,COLD
是一个灵活的pre-ranking
系统,模型性能和算力成本之间的trade-off
是可控的。COLD
中的深度pre-ranking
模型:基于向量内积的DNN
模型通过限制模型架构来降低算力成本,从而导致模型性能损失。与此不同,COLD
允许应用深度模型的任意复杂架构来确保最佳模型性能。换句话说,SOTA
深度ranking
模型可以用于COLD
。例如,在我们的真实系统中,我们将
groupwise embedding network: GwEN
作为我们的初始模型架构,它是我们ranking
系统中在线模型的早期版本。GwEN
将feature group-wise embedding
的拼接作为输入。注意,交叉特征也包含在GwEN
网络的输入中。当然,
pre-ranking
直接应用具有复杂架构的深度ranking
模型进行在线inference
的算力成本是不可接受的,因为要在pre-ranking
系统中进行排序的候选集合规模更大。为了应对这一关键挑战,我们采用了两种优化策略:- 一种方法是设计一种灵活的网络架构,可以在模型性能和算力成本之间进行
trade-off
。 - 另一种方法是通过应用工程优化技巧进行
inference
加速来显著降低算力成本。
- 一种方法是设计一种灵活的网络架构,可以在模型性能和算力成本之间进行
a. 灵活网络架构的设计
一般而言,我们需要引入合适的网络架构设计,从而从初始
GwEN
模型的完整版本中得到深度模型的轻量级版本。网络剪枝、特征选择、以及神经架构搜索等技术都可以应用于此。在我们的实践中,我们选择了便于在模型性能和算力成本之间进行可控trade-off
的特征选择方法。其它技术也适用,我们留给读者进一步地尝试。具体而言,我们应用
Squeeze-and-Excitation: SE
block
进行特征选择。SE block
首先在CV
中用于显式建模通道之间的内部依赖性。这里,我们使用SE block
来获得group-wise
特征的重要性权重,并通过度量模型性能和算力成本来选择COLD
中最合适的特征。重要性权重计算:令 $ \mathbf{\vec e}_i\in \mathbb R^d $ 为第 $ i $ 个
$ \mathbf{\vec s} = \sigma\left(\mathbf W\left[ \mathbf{\vec e}_1||\cdots||\mathbf{\vec e}_M\right]+\mathbf{\vec b}\right) $feature group
的embedding
,总的feature group
数量为 $ M $ 。SE block
将 $ \mathbf{\vec e}_i $ 压缩为一个标量值 $ s_i $ :其中:
- $ \mathbf{\vec s}\in \mathbb R^M $ 为一个向量,给出每个
feature group
的重要性。 - $ || $ 为向量拼接。
- $ \mathbf W \in \mathbb R^{M\times (dM)},\mathbf{\vec b}\in \mathbb R^M $ 为模型参数。
然后通过
embedding
$ \mathbf{\vec e}_i $ 和重要性权重 $ s_i $ 之间的field-wise
相乘从而得到新的加权embedding
$ \mathbf{\vec v}_i = s_i\times \mathbf{\vec e} _i $ 。SE block
相当于让模型自动学习每个feature group embedding
的特征重要性。- $ \mathbf{\vec s}\in \mathbb R^M $ 为一个向量,给出每个
feature group
选择:权重向量 $ \mathbf{\vec s} $ 代表每个feature group
的重要性。我们使用权重对所有feature group
进行排序,并选择top K
权重最高的feature group
。然后进行离线测试,从而评估选定K
个feature group
的模型的候选轻量级版本的模型性能和系统性能。评估指标包括GAUC
、query per seconds: QPS
(衡量模型的吞吐量)、return time: RT
(衡量模型的延迟)。通过多次启发式尝试
K
次,我们最终选择在给定的系统性能约束下具有最佳GAUC
的版本作为我们最终的模型。这样,可以灵活地进行模型性能和算力成本之间的trade-off
。
b. 工程优化技巧
除了通过灵活的网络架构设计降低算力成本,我们还从工程角度应用了各种优化技巧,进一步为
COLD
应用更复杂的深度模型带来了空间,以达到更好的性能。下面以我们在阿里巴巴的展示广告系统为例,介绍一下实践经验。情况可能因系统而异。读者可以根据实际情况做出选择。在我们的展示广告系统中,
pre-ranking
模块的在线inference
引擎主要包含两个部分:特征计算和稠密网络计算。- 在特征计算中,引擎从索引系统中提取用户和广告特征,然后计算交叉特征。
- 在稠密网络计算中,引擎首先将特征转换为
emedding
向量并将它们拼接起来作为网络的输入。
all level
的并行性:为了以低算力成本实现低延迟和高吞吐量的inference
,利用并行计算非常重要。因此,我们的系统会尽可能地利用并行性。幸运的是,不同广告的pre-rank
分数是相互独立的。这意味着它们可以在一些成本上并行计算,这些成本涉及到一些与用户特征相关的重复计算。在
high level
上,一个前端user query
将拆分为多个inference query
。每个query
处理部分广告,并在所有query
返回后合并结果。因此,在决定拆分多少个query
时需要trade-off
。更多的query
意味着每个query
的广告很少,因此单个query
的延迟更低。但是太多的query
也会导致巨大的重复计算和系统开销。即划分广告空间,从而在广告空间上并行计算。
此外,由于
query
是在我们的系统中使用RPC
实现的,更多的query
意味着更多的网络流量,并且可能有更高的延迟或失败可能性。在处理每个
query
时,多线程处理用于特征计算。同样,每个线程处理部分广告以减少延迟。最后,执行稠密网络
inference
时,我们使用GPU
来加速计算。
基于列的计算:传统上,特征计算是基于行的方式完成的:广告被一个接一个地处理。然而,这种基于行的方法对
cache
不友好。相反,我们使用基于列的方法将一个feature
列的计算放在一起。下图说明了两种计算模式。在计算交叉特征的时候(例如红色方块这一列),相同的
user
特征会被频繁使用。图(a)
为基于行的方式,每次处理交叉特征的时候都需要重新加载user
特征;图(b)
为基于列的方式,在处理为交叉特征的时候可以重复使用缓存的user
特征。通过这种方式,我们可以使用
Single Instruction Multiple Data: SIMD
这样的技术来加速特征计算。在计算交叉特征(如
ad_fg & u_fg
,右图最右侧一列)时,基于列的计算可以缓存u_fg
。低精度
GPU
计算:对于COLD
模型,大部分计算是稠密矩阵的乘法,这就留下了优化空间。在英伟达的Turning
架构中,T4 GPU
为Float16
和Int8
矩阵乘法提供了极致性能,非常符合我们的case
。Float16
的理论峰值FLOPS
可以比Float32
高8
倍。然而,
Float16
丢失了一些精度。在实践中,我们发现对于某些场景,当我们对某些feature group
使用sum-pooling
时,稠密网络的输入可能是一个非常大的数字,超过了Float16
的表示范围。一种解决方案是使用
normalization layer
,如BN
层。然而,BN
层本身包含的moving-variance
参数,其幅度可能甚至更大。这意味着计算图需要混合精度,即全连接层使用Float16
、BN
层使用Float32
。另一种解决方案是使用无参数
$ \text{linear_log}(x) = \begin{cases} -\log(-x) - 1 &, x\lt -1\\ x&,-1\le x\le 1\\ \log(x) + 1&,x\gt 1 \end{cases} $parameter-free
归一化层。例如,对数函数可以轻松地将大数值转换为合理的范围。但是,log()
函数无法处理负值,并且当输入接近零时可能会导致一个巨大的数值。因此,我们设计了一个称为线性对数算子linear-log operator
的分段平滑函数来处理这种不必要的行为,即:
linear_log()
函数的图形如下图所示。它将Float32
数值转换为一个合理的范围。因此如果我们在第一层放置一个linear_log
算子,就可以保证网络的输入很小。此外,linear_log()
函数是 $ C^1 $ 连续的,因此不会使网络训练更加困难。在实践中,我们发现添加这一层之后,网络仍然可以达到与原始COLD
模型相同的精度。使用
Float16
进行inference
之后,我们发现CUDA kernel
的running time
急剧下降,kernel
启动时间成为瓶颈。为了提高实际的QPS
,我们进一步使用Multi-Process Service: MPS
来减少启动kernel
的开销。结合Float16
和MP
,引擎的吞吐量是以前的两倍。
22.1.3 全在线基础设施
受益于不受限制的模型架构,
COLD
可以在全在线基础设施fully online infrastructure
下实现:训练和serving
都以online
的方式执行,如下图所示。从行业角度来看,这是目前最好的系统实践。这种基础设施有两个方面的好处:COLD
模型的online learning
带来了其应对数据分布漂移shift
的挑战的出色能力。根据我们的经验,当数据发生剧烈变化时(如双十一当天),
COLD
模型相对于基于向量内积的DNN
模型的性能提升更为显著,正如我们在实验部分所示。此外,COLD
模型的online learning
对于新广告更加友好。这是
online learning
的优势:能实时学习最新的数据分布。COLD
全在线的pre-ranking
系统为我们提供了灵活的基础设置,从而支持高效的新模型开发和在线A/B test
。注意,对于基于向量内积的
DNN
模型,用户侧向量和广告侧向量需要离线预计算并通过索引加载到inference
引擎。因此,它涉及多个系统的开发,以进行基于向量内积的DNN
模型的两个版本的A/B test
。根据我们的经验,获得可靠的A/B test
结果的典型时间成本是几天,而COLD
则是几个小时。此外,全在线serving
也有助于COLD
避免基于向量内积的DNN
模型所遭受的延迟切换。从下图结构可以看到,
COLD
使用了大量的、人工构造的交叉特征cross features
。因此COLD
中,user
信息和ad
信息在两个level
进行了融合:- 在输入特征
level
,COLD
显式地、人工地构造了交叉特征,从而融合了user-ad
信息。 - 在模型架构
level
,COLD
通过全连接层,从而融合了user-ad
信息。
- 在输入特征
22.2 实验
我们进行仔细的比较,从而评估所提出的
pre-ranking
系统COLD
的性能。作为一个工业系统,COLD
在模型性能和系统性能上都进行了比较。据我们所知,这项任务只有公共数据集或pre-ranking
系统(而没有二者的结合)。以下实验在阿里巴巴在线展示广告系统中进行。baseline
方法:COLD
模型最强的baseline
是基于SOTA
向量内积的DNN
模型,它是我们展示广告系统中在线pre-ranking
模型的最新版本。配置:
COLD
模型和基于向量内积的DNN
模型都使用超过900
多亿个样本进行训练,这些样本都是从真实系统的日志中收集的。注意:基于向量内积的DNN
模型和COLD
模型共享相同的用户特征和广告特征。基于向量内积的DNN
模型不能引入任何user-ad
交叉特征,而COLD
模型使用user-ad
交叉特征。为了公平比较,我们还评估了具有不同交叉特征
group
的COLD
模型的性能。对于
COLD
模型,特征embedding
向量被拼接在一起,然后被馈送到全连接网络。这个全连接网络的结构是 $ D_\text{in}\times 1024 \times 512 \times 256 \times 128 \times 64\times 2 $ ,其中 $ D_\text{in} $ 为所有被选中特征的embedding
的拼接。对于基于向量内积的模型,全连接层的结构为 $ 200\times 200\times 10 $ 。
对于基于向量内积的模型,全连接层表示单侧网络的全连接层。
两种模型的输入特征
embedding
维度均设置为16
。我们使用
Adam
优化器来更新模型参数。
评估指标:
模型性能评估指标:
GAUC
作为评估模型离线性能的指标。此外,我们引入了一个新的
$ \text{recall} = \frac{|\{\text{top k ad 候选}\}\cap \{\text{top m ad 候选}\}|}{|\{\text{top m ad 候选}\}|} $top-k
召回率指标,从而度量pre-ranking
模型和后续ranking
模型之间的对齐程度alignment degree
。top-k
召回率定义为:其中:
top k ad 候选
和top m ad 候选
是从同一个候选集合(即pre-ranking
模块的输入)生成的。top k ad 候选
是根据pre-ranking
模型排序的,top m ad 候选
是根据ranking
模型排序的,并且 $ m\ll k $ 。- 排序指标为
eCPM = pCTR x 点击出价
。
在我们的实验中,
ranking
模型使用DIEN
,这是在线ranking
系统的以前的版本。系统性能评估指标:为了评估系统性能,我们使用的指标包括
Queries Per Seconds: QPS
(用于衡量模型的吞吐量)、return time: RT
(用于衡量模型的延迟)。这些指标反映了模型在相同大小的pre-ranking
候选集合下的算力成本。粗略地说,较低RT
下较大的QPS
意味着给定模型的算力成本较低。
离线模型效果评估:下表给出了不同模型的离线性能评估结果。可以看到:
COLD
保持了与我们之前版本的ranking
模型DIEN
相当的GAUC
,并且与基于向量内积的模型相比,在GAUC
和Recall
上都取得了显著的提升。在线
A/B test
效果评估:下表显示了COLD
模型相对于基于向量内积的DNN
模型的在线A/B test
提升。 可以看到:- 在正常情况下,
COLD
模型实现了6.1%
的CTR
提升和6.5%
的Revenue Per Mille: RPM
提升,这对我们的业务意义重大。 - 此外,在双十一活动期间,
COLD
模型实现了9.1%
的CTR
提升和10.8%
的RPM
提升。这证明了全在线基础设施的价值,在数据急剧变化时,它可以使得模型适应最新的数据分布。
- 在正常情况下,
系统性能的评估:我们评估了使用不同模型的
pre-ranking
系统的QPS
和RT
,如下表所示。基于向量内积的模型在具有2
个Intel(R) Xeon(R) Platinum 8163 CPU@2.50GHz (96 cores)
和512GB RAM
的CPU
机器上运行。COLD
模型和DIEN
在配备NVIDIA T4
的一个GPU
机器上运行。可以看到:
- 基于向量内积的
DNN
模型实现了最佳系统性能,这符合预期。 DIEN
算力成本最高,COLD
达到算力和效果的平衡。
- 基于向量内积的
消融研究:为了进一步了解
COLD
的性能,我们在模型设计视角和工程优化技术视角进行了实验。对于后一种方法,由于很难将所有的优化技术从集成系统中解耦出来并进行比较,因此这里我们仅对GPU
低精度计算这个最重要因素进行评估。pre-ranking
系统的不同版本COLD
模型的trade-off
性能:在模型设计阶段,我们使用SE block
来获取特征重要性权重,并选择不同的feature group
作为模型的候选版本。然后我们进行离线实验以评估模型的QPS,RT,GAUC
等性能,如下表所示。*
是我们用于产品中的COLD
模型的平衡版本,它使用部分交叉特征。可以看到:
COLD
模型的算力成本因为特征不同而不同,这符合我们灵活的网络架构设计。- 交叉特征越多的
COLD
模型性能越好,这也相应增加了online serving
的负担。
通过这种方式,我们可以在模型性能和算力成本之间进行
trade-off
。在我们的真实系统中,我们根据经验手动选择平衡的版本。COLD
需要大量的、人工构造的交叉特征,这会增加人工特征工程的负担。不同
GPU
精度的计算比较:实验是在配备NVIDIA T4
的GPU
机器上运行。在运行实验时,我们从客户端逐渐提高QPS
,直到超过1%
的服务器响应时间开始超过延迟限制。然后我们将当前QPS
记录为可用QPS
。实验结果如下表所示。可以看到:Float32
版本的可用QPS
最低。
单独使用
Float16
可以提高大约21%
的可用QPS
。- 结合
Float16
和CUDA MPS
,我们可以将可用QPS
比Float32
提高一倍,并且可以在不超过延迟限制的情况下充分利用GPU
。
- 结合
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论