数学基础
- 线性代数
- 概率论与随机过程
- 数值计算
- 蒙特卡洛方法与 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
- 并发
十二、DLRM [2019]
个性化
personalization
和推荐系统recommendation systems
目前已经被部署在大型互联网公司的各种任务中,包括广告点击率预估CTR prediction
和排序ranking
。尽管这些方法已经有很长的历史,但是直到最近这些方法才包含神经网络。有两个基本观点primary perspectives
有助于个性化和推荐的深度学习模型的架构设计architectural design
。第一种观点来自推荐系统。这些系统最初采用内容过滤
content filtering
,其中一群专家将产品划分为不同的类目categories
,用户选择他们喜欢的类目,而系统根据用户的偏好进行匹配。该领域随后发展为使用协同过滤
collaborative filtering
,其中推荐是基于用户历史的行为,例如对item
的历史评分。邻域
neighborhood
方法通过将用户和item
一起进行分组grouping
从而提供推荐。潜在因子
latent factor
方法通过矩阵分解技术从而使用某些潜在因子来刻画用户和item
。这些方法后来都取得了成功。
第二种观点来自预测分析
predictive analytics
,它依靠统计模型根据给定的数据对事件的概率进行分类classify
或预测predict
。预测模型从简单模型(例如线性模型和逻辑回归)转变为包含深度网络的模型。为了处理离散数据
categorical data
,这些模型采用了embedding
技术从而将one-hot
向量和multi-hot
向量转换为抽象空间abstract space
中的稠密表示dense representation
。这个抽象空间可以解释为推荐系统发现的潜在因子空间space of the latent factors
。
在论文
《Deep Learning Recommendation Model for Personalization and Recommendation Systems》
中,论文介绍了一个由上述两种观点结合而成的个性化模型。该模型使用embedding
来处理代表离散数据的稀疏特征sparse features
、使用多层感知机multilayer perceptron: MLP
来处理稠密特征dense features
,然后使用《Factorization machines》
中提出的统计技术显式的交互interacts
这些特征。最后,模型通过另一个MLP
对交互作用进行后处理post-processing
从而找到事件的概率。作者将这个模型称作深度学习推荐模型
deep learning recommendation model: DLRM
,如下图所示。该模型的PyTorch
和Caffe2
的实现已经发布。此外,作者还设计了一种特殊的并行化方案,该方案利用
embedding tables
上的模型并行性model parallelism
来缓解内存限制memory constraints
,同时利用数据并行性data parallelism
从全连接层扩展scale-out
计算。作者将DLRM
与现有的推荐模型进行了比较,并在Big Basin AI
平台上实验了DLRM
的性能,证明了它作为未来算法实验algorithmic experimentation
、以及系统协同设计system co-design
的benchmark
的有效性。
12.1 模型设计和架构
这里我们将描述
DLRM
的设计。我们将从网络的高级组件high level components
开始,并说明如何以及为什么将它们以特定方式组装assembled
在一起,以及对未来的模型设计产生的影响。然后我们描述组成模型的低级算子
low level operators
和原语primitives
,以及对未来的硬件和系统设计产生的影响。
12.1.1 DLRM 组件
通过回顾早期模型,我们可以更容易理解
DLRM
的高级组件。我们避免全面的科学文献综述,而将重点几种在早期模型中使用的四种技术上,这些技术可以被解释为DLRM
的重要高级组件。Embedding
:为了处理离散数据,embedding
将每个类目category
映射到抽象空间abstract space
中的稠密表示dense representation
。具体而言,每个
$ \mathbf{\vec w}_i^\top = \mathbf{\vec e}_i^\top \mathbf W $embedding lookup
可以被解释为使用一个one-hot
向量 $ \mathbf{\vec e}_i\in \mathbb R^{m\times 1} $ (第 $ i $ 位为1
、其它位为0
,索引 $ i $ 代表了第 $ i $ 个类目 )来获得embedding table
$ \mathbf W\in \mathbb R^{m\times d} $ 中的相应行向量row vector
:其中 $ m $ 为类目总数, $ d $ 为抽象空间的维度。
在更复杂的场景中,
$ \mathbf{\vec a}^\top = [0,\cdots,0,a_{i_1},\cdots,a_{i_k},0,\cdots,0]\in \mathbb R^{1\times m} $embedding
也可以表示多个item
的加权组合,其中包含一个multi-hot
向量的权重:其中 : $ i_1,\cdots,i_k $ 代表对应的
item
; $ a_i\ne 0, i=i_1,\cdots,i_k $ 代表这些item
的权重。包含 $ t $ 个
$ \mathbf S = \mathbf A^\top \mathbf W\in \mathbb R^{t\times d} $embedding lookup
的mini-batch
可以写作:其中 $ \mathbf A = [\mathbf{\vec a}_1,\cdots,\mathbf{\vec a}_t]\in \mathbb R^{m\times t} $ 为一个稀疏矩阵。
DLRM
利用embedding tables
将离散特征映射到稠密表示。然而,即使设计了这些有意义的embedding
之后,如何利用它们来生成准确的预测?为了回答这个问题,我们回到潜在因子方法latent factor methods
。矩阵分解
Matrix Factorization
:回忆一下,在推荐问题的典型公式中,我们得到了对某些item
进行评分的某些用户的集合 $ \mathbb S $ 。其中,集合 $ \mathbb S $ 由元组 $ (i,j) $ 索引组成,表示第 $ j $ 个用户在第 $ i $ 个item
上已经评分。我们用向量 $ \mathbf{\vec w}_i\in \mathbb R^{d\times 1} $ 来表示represent
第 $ i $ 个item
、用向量 $ \mathbf{\vec v}_j\in \mathbb R^{d\times 1} $ 来表示第 $ j $ 个用户,从而找到所有评分ratings
。矩阵分解方法通过最小化以下公式来求解这个问题:
$ \min\sum_{(i,j)\in \mathbb S} r_{i,j} - \mathbf{\vec w}_i^\top \mathbf{\vec v}_j $其中 $ r_{i,j}\in \mathbb R $ 为第 $ j $ 个用户在第 $ i $ 个
item
上的评分。令 $ \mathbf W^\top=[\mathbf{\vec w}_1,\cdots,\mathbf{\vec w}_m]\in \mathbb R^{m\times d} $ 、 $ \mathbf V^\top=[\mathbf{\vec v}_1,\cdots,\mathbf{\vec v}_n]\in \mathbb R^{n\times d} $ ,我们可以将完整的评级矩阵 $ \mathbf R=[r_{i,j}]\in \mathbb R^{m\times n} $ 近似为矩阵乘积:
$ \mathbf R\simeq \mathbf W\mathbf V^\top $其中 $ m $ 为总的
item
数量, $ n $ 为总的用户数量。注意: $ \mathbf W $ 和 $ \mathbf V $ 可以解释为两个
embedding tables
,其中每一行代表潜在因子空间latent factor space
中的user/item
。这些embedding
向量的内积可以得出对评级有意义的后续预测,这是因子分解机factorization machines
和DLRM
设计的关键观察。因子分解机
Factorization Machine
:在分类问题中,我们要定义一个从输入数据点 $ \mathbf{\vec x}\in \mathbb R^{n} $ 到target label
$ y\in Y $ 的预测函数 $ \phi:\mathbb R^n\rightarrow Y $ 。例如,我们可以通过定义 $ Y=\{+1,-1\} $ 来预测点击率click-through rate: CTR
,其中+1
表示点击label
、-1
表示未点击label
。因子分解机
$ \hat y = b + \mathbf{\vec w}^\top \mathbf{\vec x} + \mathbf{\vec x}^\top \text{upper}\left(\mathbf V \mathbf V^\top\right)\mathbf{\vec x} $Factorization machines: FM
通过以下定义形式的模型,将二阶交互second-order interactions
融合到带有离散数据的线性模型中:其中:
- $ \mathbf V\in \mathbb R^{n\times d}, \mathbf{\vec w}\in \mathbb R^n,b\in \mathbb R $ 为模型参数,且 $ d\ll n $ 。
upper(.)
函数严格选择矩阵的上三角部分。
FM
和多项式核polynomial kernel
的支持向量机SVM
显著不同,因为FM
像矩阵分解一样将二阶交互矩阵分解为潜在因子latent factor
(或embedding
向量),从而更有效地处理稀疏数据。通过仅捕获不同
embedding
向量pair
对之间的交互,FM
显著降低了二阶交互的复杂度,从而产生线性计算复杂度。根据原始公式,
FM
的算法复杂度为 $ O(n^2d) $ ,但是经过数学转换之后,计算复杂度降低到 $ O(nd) $ 。多层感知机
$ \hat {\mathbf {\vec y}} = \mathbf W_k\sigma\left(\mathbf W_{k-1}\sigma\left(...\sigma_1\left(\mathbf W_1\mathbf{\vec x + \mathbf{\vec b}_1}\right)...\right) + \mathbf{\vec b}_{k-1}\right) + \mathbf{\vec b}_k $Multilayer Perceptrons
:最近机器学习的成功很大程度上归功于深度学习的兴起。其中,最基本的模型是多层感知机multilayer perceptron: MLP
,它是一个由全连接层fully connected layers: FC
和激活函数 $ \sigma: \mathbb R\rightarrow \mathbb R $ 交替组成的预测函数prediction function
:其中权重矩阵 $ \mathbf W_l\in \mathbb R^{d_l\times d_{l-1}} $ ,
bias
向量 $ \mathbf{\vec b}_l\in \mathbb R^{d_l} $ , $ d_0 = n $ 。这些方法被用来捕获更复杂的交互
interactions
。例如,已经表明:给定足够的参数、具有足够深度depth
和宽度width
的MLP
能够以任何精度precistion
拟合数据。这些方法的变体已经广泛应用于各种
application
,包括计算机视觉和NLP
。一个具体的例子是神经协同过滤Neural Collaborative Filtering: NCF
被用作MLPerf benchmark
的一部分,它使用MLP
而不是内积来计算矩阵分解中embedding
之间的交互。
12.1.2 DLRM 架构
目前为止,我们已经描述了推荐系统和预测分析中使用的不同模型。现在,让我们结合它们的直觉
intuitions
来构建state-of-the-art
的个性化模型。令用户和
item
使用很多连续continuous
的、离散categorical
的特征来描述。- 为了处理离散特征,每个离散特征将由相同维度的
embedding
向量来表示,从而推广了矩阵分解中潜在因子的概念。 - 为了处理连续特征,所有的连续特征整体上将被一个
MLP
转换(这个MLP
我们称之为bottom MLP
或者dense MLP
),这将产生和embedding
向量相同维度的dense representation
。
注意:每个离散特征会得到一个
embedding
,而所有连续特征整体才能得到一个embedding
。我们将根据
FM
处理稀疏数据的直觉,通过MLP
来显式计算不同特征的二阶交互。这是通过获取所有representation
向量(包括每个离散特征的embedding
向量、连续特征整体的representation
向量)之间的pair
对的内积来实现的。这些内积和连续特征
representation
(即经过原始连续特征经过bottom MLP
之后得到的)拼接起来,馈入另一个MLP
(我们称之为top MLP
或者output MLP
)。最终这个MLP
的输出馈入到一个sigmoid
函数从而得到概率。我们将这个模型称作
DLRM
。top MLP
的特征有:显式二阶交互特征、连续representation
特征。这里并没有馈入一阶embedding
特征。- 为了处理离散特征,每个离散特征将由相同维度的
和早期模型的比较:许多基于深度学习的推荐模型使用类似的基本思想来生成高阶项
term
从而处理稀疏特征。例如:Wide and Deep
、Deep and Cross
、DeepFM
、xDeepFM
网络等等,它们设计了专用网络specialized networks
来系统地构建高阶交互higher-order interactions
。然后,这些网络将它们专用网络和MLP
的结果相加,并通过线性层和sigmoid
激活函数产生最终的概率。DLRM
特别地模仿因子分解机,以结构化方式与embedding
交互,从而在最终MLP
中仅考虑embedding pair
对之间的内积所产生的的交叉term
,从而显著降低了模型的维度。我们认为,在其他网络中发现的、超过二阶的更高阶交互可能不一定值得额外的计算代价和内存代价。DLRM
和其它网络之间的主要区别在于:网络如何处理embedding
特征向量及其交叉项cross-term
。具体而言:DLRM
(以及xDeepFM
)将每个embedding
向量解释为表示单个类目category
的单元unit
,交叉项仅在类目之间产生。像
Deep and Cross
这样的网络将embedding
向量中的每个元素视为单元,交叉项在元素之间产生。因此,
Deep and Cross
不仅会像DLRM
那样通过内积在不同embedding
向量的元素之间产生交叉项,而且会在同一个embedding
向量内的元素之间产生交叉项,从而导致更高的维度。
12.2 并行性
现代的个性化和推荐系统需要大型复杂的模型来利用大量的数据。
DLRM
尤其包含大量参数,比其它常见的深度学习模型(例如CNN
、RNN
、GAN
)多几个数量级。这导致训练时间长达数周或者更长。因此,更重要的是有效地并行化这些模型,以便在实际数据规模上解决这些问题。如前所述,
DLRM
以耦合的方式coupled manner
处理离散特征(通过embedding
)和连续特征(通过bottom MLP
)。embedding
贡献了大部分参数,每个lookup table
都需要超过几个GB
的内存,使得DLRM
的内存容量和带宽bandwidth
代价昂贵。- 由于
embedding
太大,因此无法使用数据并行data parallelism
,因为数据并行需要在每个设备上拷贝超大的embedding
。在很多情况下,这种内存限制需要将模型分布在多个设备上,从而满足内存容量要求。 - 另一方面,
MLP
参数在内存中较小,但是却有相当可观的计算量。因此,对于MLP
而言,数据并行是首选的,因为这样可以在不同的设备上同时处理样本,并且仅在累计更新accumulating updates
时才需要通信。
我们的并行化
DLRM
联合使用模型并行model parallelism
和数据并行data parallelism
:针对embedding
使用模型并行、针对MLP
使用数据并行,从而缓解embedding
产生的内存瓶颈memory bottleneck
,同时并行化MLP
上的前向传播和反向传播计算。由于
DLRM
的体系结构和较大的模型尺寸,因此将模型并行和数据并行相结合是DLRM
的独特要求。Caffe2
或PyTorch
(以及其它流行的深度学习框架)均不支持这种组合并行性,因此我们设计了一个自定义的实现。我们计划在未来的工作中提供其详细的性能研究。- 由于
在我们的设置
setup
中,top MLP
和交互算子interaction operator
要求从bottom MLP
和所有embedding
中访问部分mini-batch
。由于模型并行已用于在设备之间分布embedding
,因此这需要个性化的all-to-all
通信。在
embedding lookup
的最后,每个设备都针对mibi-batch
中的所有样本,将对应的embedding table
中的embedding
向量驻留在这些设备上。需要驻留的embedding
向量需要沿着mibi-batch
维度分割,并传送到适当的设备,如下图所示(如黄色embedding
向量都传送到Device 3
)。PyTorch
和Caffe2
都不提供对模型并行的原生支持,因此我们通过将embedding
算子显式映射到不同的设备来实现它。然后使用butterfly shuffle
算子实现个性化的all-to-all
通信,该算子将生成的embedding
向量适当的分片slice
,并将其传输到目标设备target device
。在当前版本中,这些传输是显式拷贝,但是我们打算使用可用的通信原语(如all-gather
和send-recv
)进一步优化这一点。下图为用于
all-to-all
通信的butterfly shuffle
。注意,目前
pytorch.distributed package
已经支持模型并行、数据并行,也支持个性化的all-to-all
通信。我们注意到,对于数据并行
MLP
,反向传播中的参数更新以allreduce
进行积累accumulated
,并以同步synchronous
的方式应用于每个设备上的拷贝参数replicated parameters
,从而确保每个设备上的更新参数updated parameters
在每次迭代之前都是一致consistent
的。- 在
PyTorch
中,通过nn.DistributedDataParallel
和nn.DataParallel
模块启用数据并行,这些模块在每个设备上拷贝模型并插入allreduce
以及必要的依赖。 - 在
Caffe2
中,我们在梯度更新之前人工插入allreduce
。
- 在
1.3 实验
为了衡量模型的准确性
accuracy
、测试模型的整体性能、并描述各个算子operator
的特征,我们需要为DLRM
创建或获取一个数据集。我们提供了三种类型的数据集:随机数据集
random dataset
、人工合成数据集synthetic dataset
、公共数据集public dataset
。从系统的角度来看,前两个数据集可用于试验模型。具体而言,它允许我们通过动态生成的数据来试验不同的硬件属性和瓶颈,同时消除对数据存储系统的依赖。后者允许我们对真实数据集进行实验,并度量模型的的准确性accuracy
。随机数据集:回忆一下,
DLRM
接受连续continuous
特征和离散categorical
特征作为输入。对于连续特征,可以通过使用
numpy.random package
的rand
或者randn
调用具有默认参数的均匀分布或正态分布(高斯分布)生成随机向量来建模。 然后可以通过生成一个矩阵来获得一个mini-batch
的输入,其中矩阵的每一行代表mini-batch
中的一个样本。对于离散特征,我们需要确定给定的的
multi-hot
向量中有多少个非零元素。benchmark
允许非零元素数量是固定的、或者是1~k
范围内的一个随机数。然后,我们生成相应数量的整数索引,数量范围在
1~m
范围内,其中m
为embedding
矩阵 $ \mathbf W $ 的行数。最后,为了创建一个
mini-batch
的lookup
,我们拼接上述索引,并用lengths
(Caffe
中的SparseLengthsSum
)、或者offsets
(PyTorch
中的nn.EmbeddingBag
)来描述每个单独的lookup
。
人工合成数据集:有很多理由支持对应于离散特征的索引的自定义生成。例如,如果我们的
application
使用一个特定的数据集,但出于隐私的目的我们不愿意共享它,那么我们可以选择通过索引分布来表达离散特征。这可能会替代联邦学习federated learning
等应用于application
中的隐私保护技术。此外,如果我们想要测试系统组件system components
,例如研究内存行为memory behavior
,我们可能希望在合成的trace
中捕获原始trace
访问的基本局部性fundamental locality
。让我们说明如何使用合成数据集。假设我们有索引的
trace
,这些索引对应于某个离散特征的所有embedding lookup
轨迹。我们可以在这个trace
中记录去重访问unique accesses
和重复访问repeated accesses
之间的距离频次,然后生成合成trace
。具体生成算法参考原始论文。公共数据集:
Criteo AI Labs Ad Kaggle
和Criteo AI Labs Ad Terabyte
数据集是公开的数据集,由用于广告点击率预测的点击日志组成。每个数据集包含
13
个连续特征和26
个离散特征。通常,连续特征使用简单的对数变换log(1+x)
进行预处理。离散特征映射到相应的embedding index
,而未标记的离散特征映射到0
或者NULL
。Criteo Ad Kaggle
数据集包含7
天内的4500
万个样本,每天的样本量大致相等。在实验中,通常将第7
天拆分为验证集和测试集,而前面6
天用作训练集。Criteo Ad Terabyte
数据集包含24
天的样本,其中第24
天分为验证集和测试集,前面23
天用作训练集。每天的样本量大致相等。
模型配置:
DLRM
模型在PyTorch
和Caffe2
框架中实现,可以在Github
上获得。模型分别使用fp32
浮点数作为模型参数,以及int32(Caffe2)/int64(PyTorch)
作为模型索引。实验是在BigBasin
平台进行的,该平台具有双路Intel Xeon 6138 CPU @ 2.00GHz
以及8
个Nvidia Tesla V100 16GB GPUs
。我们在
Criteo Ad Kaggle
数据集上评估了模型的准确性accuracy
,并将DLRM
和Deep and Cross network: DCN
的性能进行了比较,后者没有进行额外的调优。我们和DCN
进行比较,因为它是在相同数据集上具有综合结果comprehensive results
的少数模型之一。DLRM
既包含用于处理连续特征的bottom MLP
(该bottom MLP
分别由具有512/256/64
个节点的三个隐层组成),又包括top MLP
(该top MLP
分别由具有512/256
个节点的两个隐层组成)。DCN
由六个cross layer
和一个具有512/256
个节点的深度网络组成。embedding
的维度为16
。
这样产生的
DLRM
和DCN
两者都具有大约540M
的参数。我们使用
SGD
和Adagrad
优化器绘制了两个模型在完整的单个epoch
内的训练准确率(实线)、验证准确率(虚线)。我们没有使用正则化。可以看到:
DLRM
获得了稍高的训练准确率和验证准确率,如下图所示。我们强调,这没有对模型的超参数进行大量的调优。DLRM
和DCN
都没有经过超参数调优,因此实验结果的对比没有任何意义。为了分析我们模型在单设备上的性能,我们考虑了一个具有
8
个离散特征、512
个连续特征的模型。每个离散特征都通过一个包含1M
个向量的embedding table
(即类目总数有1M
)进行处理,向量维度为64
。而连续特征被组装assembled
为一个512
维的向量。bottom MLP
有两层,而top MLP
有四层。我们让具有2048K
个随机生成样本的数据集上分析了该模型,其中mini-batch
的batch size = 1K
。Caffe2
中的这个模型实现在CPU
上运行大约256
秒,在GPU
上运行大约62
秒,每个算子的分析如下图所示。正如预期所示:大部分时间都花在了执行embedding lookup
和全连接层上。在CPU
上,全连接层占了很大一部分计算,而GPU
上全连接层的计算几乎可以忽略不计。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论