一种基于分布式异构计算的大规模推荐系统训练方法技术方案

技术编号:35822576 阅读:19 留言:0更新日期:2022-12-03 13:48
本发明专利技术公开了通信技术领域的一种基于分布式异构计算的大规模推荐系统训练方法,包括如下步骤:Cache初始化;Cache换入换出算法构建;索引映射算法构建;在GPU中,利用PyTorch提供的Embedding或Embedding_bag函数进行Sparsefeature的计算,以及模型后续的Dense部分的计算,本技术方案可以充分利用GPU计算资源,计算速度增快;将按行换入换出优化成按块进行换入换出,提高了吞吐量;最后充分利用计算资源进一步扩展模型的规模,对模型进行分布式扩展,该方法具有创造性和市场推广价值。该方法具有创造性和市场推广价值。该方法具有创造性和市场推广价值。

【技术实现步骤摘要】
一种基于分布式异构计算的大规模推荐系统训练方法


[0001]本专利技术涉及通信
,具体为一种基于分布式异构计算的大规模推荐系统训练方法。

技术介绍

[0002]推荐系统模型通常由Embedding(sparse)部分和神经网络模型(Dense)部分组成。相应的,模型的输入样本可以分为离散的sparse feature和连续的dense feature,sparse feature从Embedding中查找对应的参数后,与dense feature结合进行后续模型的计算。
[0003]在实际场景中,Embedding参数通常规模非常大,不能像传统的深度学习神经网络模型一样,将其完全放入GPU中,而实际每一步训练仅需要少部分参数,因此是一个I/O密集型的任务。相对而言,每步训练都需要全部的神经网络模型参数,通常非常依赖GPU进行计算。因此考虑采用分布式、异构的方式对推荐系统模型进行规模上的扩展。
[0004]为了支持大规模推荐系统模型的分布式异构训练,现有的方案根据分布式策略主要有两类。第一类是基于Parameter Server的实现,该类方案中,由快手团队提出的Persia,能支撑百万亿级参数的推荐系统的训练与推理。Persia的系统结构分为4个部分:
[0005]1)Data loader负责从磁盘、数据库中读取数据,组成一批(batch)后输入推荐系统模型进行训练;
[0006]2)Embedding parameter server负责Embedding参数的存储和更新;<br/>[0007]3)Embedding worker可以有多个,负责从Embedding parameter server中读取每个batch需要的embedding参数输入模型,以及将模型返回的梯度传回Embedding parameter server进行更新;
[0008]4)NN worker可以有多个,负责推荐模型的参数存储、计算和更新。
[0009]Persia的异构体现在Embedding parameter server和worker都运用CPU计算,利用计算机主存可以扩展Embedding参数的规模,而NN worker则用GPU计算。分布式设计中,Embedding parameter server和worker之间采用Parameter server方式进行管理,而NN worker之间采用AllReduce方式实现数据并行。
[0010]Persia的每步的训练流程如下:
[0011]1)Dataloader将收集到的每个训练样本中的sparse feature,发送到Embedding Worker,随后Embedding Worker为其分配一个唯一的ID,将sparse feature和对应ID保存在本地,并将ID发送给Dataloader,Dataloader将该样本的ID、Dense feature、label发送给NN worker。
[0012]2)NN worker收到样本数据后,对保有ID和sparse feature的embedding worker发送请求,请求sparse feature对应的Embedding。而embedding worker收到该请求后,则向Embedding Parameter server请求ID需要的embedding参数。
[0013]3)Embedding Worker从Embedding Parameter server得到参数后,可以进行一些预设的计算,并将结果组成合适的形式,返回到NN worker。
[0014]4)NN worker收到embedding参数后,与Dense feature和label构成一个训练样本,样本数量达到预设的batch size后,即输入推荐系统模型进行训练。
[0015]5)训练的前向计算结束后,根据label计算损失函数,并根据反向传播算法将梯度传回模型梯度,多个NN worker之间采用AllReduce形式同步梯度,并更新模型参数。而Embedding参数的梯度,则根据样本ID返回给相应的Embedding worker,而Embedding worker根据预设的计算更新收到梯度,并将其返回Embedding Parameter server。
[0016]6)Embedding Parameter server根据梯度对Embedding参数进行更新,完成一步训练。
[0017]第二类方案是基于AllReduce的实现,该类方案中,由PyTorch团队提出的Torchrec也能较好的支持大规模推荐系统模型的分布式异构计算。
[0018]Torchrec是一个端到端的训练框架,其结构与传统的监督训练一致,Dataloader读取一个batch的训练样本,将其输入推荐模型进行前向计算,根据样本的label计算损失函数,然后采用反向传播算法计算模型参数对应的梯度,再根据优化算法更新模型参数。
[0019]对分布式计算上的设计,Torchrec主要依赖AllReduce进行梯度的同步,从而支持Dense部分数据并行。针对大规模的Embedding参数,Torchrec支持4种模型并行:1)Table

wise即将Embedding参数按sparse feature的类型进行划分;2)Row

wise将Embedding参数按行进行划分;3)Column

wise将Embedding参数按列进行划分;4)Data

parallel即数据并行,对embedding较少的sparse feature类型,通过冗余的方式进行训练。并且,Torchrec对Embedding参数支持这4种模型并行混合。
[0020]对异构计算上的设计,Torchrec对PyTorch的数据结构Torch Tensor进行了扩展,利用Nvidia CUDA平台提供的库函数,实现了统一虚拟内存(Universal Virtual Memeory)的UVM Tensor,UVM Tensor通过将GPU和CPU的内存统一为一个内存,来实现异构内存上的计算。需要注意的是,UVM Tensor并不能减少GPU和CPU之间的内存复制,只是提供了统一的内存编程接口,实际的内存复制由驱动程序自动管理。然而,Persia存在的缺陷主要有4点:
[0021]1)Embedding全部由CPU存储和计算,GPU仅负责Dense部分的存储和计算,不能充分利用GPU计算资源;
[0022]2)计算速度较慢,主要原因是Embedding参数采用CPU计算,速度完全跟不上GPU的多线程并行计算;
[0023]3)吞吐量较低,主要原因是样本batch数据结构不合理,每一步训练构造batch时,需要遍历整个batch内每个样本的每个sparse feature数据;...

【技术保护点】

【技术特征摘要】
1.一种基于分布式异构计算的大规模推荐系统训练方法,基于推荐系统数据的长尾特征,利用Cache机制,其特征在于,包括如下步骤:S1:Cache初始化;S2:Cache换入换出算法构建;S3:索引映射算法构建;S4:在GPU中,利用PyTorch提供的Embedding或Embedding_bag函数进行Sparse feature的计算,以及模型后续的Dense部分的计算。2.根据权利要求1所述的一种基于分布式异构计算的大规模推荐系统训练方法,其特征在于:所述步骤S1具体为:设Embedding的数目为E,每个Embedding向量的维度为d,将Embedding参数作为一个Exd的矩阵,放在主机端;在GPU创建一个Nxd的Cache,即Cache行数为N,每个Cache行的维度为d;Embedding参数可以随机初始化,也可以读取预训练参数,Cache则仅需要分配内存而不必初始化;创建一个大小为N的映射表,存放Cache索引到Embedding索引的映射,并全部初始化为

1,表示空;创建一个大小为N的频率记录表,存放每个Cache被访问的次数,初始化为

1,也表示空。3.根据权利要求1所述的一种基于分布式异构计算的大规模推荐系统训练方法,其特征在于:所述步骤S2具体为:训练时,每一步收到一个batch的训练样本,先检测并确保样本的Sparse feature内的所有索引去重后,数量不超过N,如超过N即报错;对去重后的Sparse feature索引,根据映射表检查当前输入的索引是否保存在Cache中,根据结果分为Cache命中和未命中两个集合;对未命中集合,首先根据频率记录表对Cache的索引排序,找出空闲(

1)的Cache行,或者访问次数最少的Cache行,并过滤掉在命中中的Cache行,直到找到Cache行数目为未命中的大小,这一组Cache行的索引记为一个列表pos,表示未命中对应的即将从CPU读入的Embedding参数放入Cache的目标位置;如果是非空闲的Cache行,还需要将其索引复制到列表pos_write_back,即需要先从Cache写回GPU的Cache行;根据pos_write_back列表,首先从Cache中读出对应的Embedding参数,再从映射表读出每个Embedding在CPU上的Embedding行索引,由此就可以根据索引将参数写回CPU上的Embedding参数矩阵;随后,根据未命中集合,从Embedding参数矩阵读出需要换入GPU Cache的Embedding参数,再根据pos列表找到每个参数需要放入的Cache行;最后,根据pos列表更新映射表,并将频率记录表中,pos列表对应的记录清空,即置为

1。4.根据权...

【专利技术属性】
技术研发人员:方佳瑞张耿韩佳桐李升桂卞正达李永彬柳泓鑫刘育良麦思琪黄海晨娄宇轩吴俊铭路广阳
申请(专利权)人:北京潞晨科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1