阿里巴巴电商平台有上亿的用户和产品,每天产生百亿规模的用户反馈数据。比如淘宝首页的猜你喜欢场景,每天就有亿规模的用户行为数据。如此超大规模的训练数据,给分布式机器学习带来了巨大的挑战,也引入了有趣的研究问题。年,阿里巴巴推荐算法团队和计算平台PAI团队合作打造了eXtremeParameterSever(XPS)机器学习平台,其中eXtreme寓意为“追求极致”,体现我们希望设计具有极致性能和效果的机器学习平台的愿景。XPS平台已经广泛全流量运行在手机淘宝的猜你喜欢、生活研究所、飞猪旅行和天猫推荐等大数据场景。年双11购物狂欢节当天,小时级XNN模型在猜你喜欢和天猫推荐场景上线,稳定和快速地使用了用户双11的实时行为信息,显著提升了双11当天的收入和用户价值。在性能上,XPS平台上的例行算法,现在每天能轻松处理亿规模样本0亿规模的特征,算法运行速度快,容错能力强,资源利用率高。本文将对XPS平台的整体结构进行介绍,希望通过这些分享和大家交流我们在分布式算法设计和框架优化上的经验。
近年来,阿里巴巴个性化推荐和个性化搜索给用户带来了很好的体验,用户行为数量也随之大幅增长。特别是移动终端的业务飞速发展,用户和商品两个维度都呈现爆发式增长,用户和产品状态也随时间持续动态变化。在这种动态的超大规模的数据体量下,打造高效的分布式机器学习平台,精准预测用户对产品的点击率和转化率是非常有价值的,也是很有挑战的。
规模庞大且高频变化的特征和样本,给分布式机器学习平台的设计带来的挑战具体可以归结为样本、特征和分布式规模三个方面:
在样本方面,我们每天面对的是百亿规模的训练数据,累计六个月的历史训练数据就超过了万亿规模。显然,传统的全量多轮迭代的机器学习算法已经不太适合这样规模的训练样本,因为这类算法需要消耗的计算资源极多,也无法很好地引入数据的时序性。
在特征方面,大规模样本下特征总量轻易超过千亿量级,传统的特征编号方法需要消耗极多的机器资源和耗费很长的计算时间来完成特征编号,而且对新出现的特征也难以及时进行编号。从资源消耗和时间消耗上看,特征序列化编号方法已经是不可承受的步骤。此外,采用类似TensorFlow里通过string_to_hash_bucket的方法将特征映射到固定范围的做法,虽然保证固定了tensor的shape,减少了参数总量,但是在特征总数巨大的时候则又引入了大量的哈希冲突,影响了算法效果。
在分布式规模方面,大规模特征下给Server的存储和分布式计算性能带来巨大压力。举例来说,1万亿个32位float浮点数就需要3.63TB的存储空间,再加上需要保留的历史梯度等,往往需要到台server才能使各个进程的内存占用控制在一个合理范围。Server数成倍增长,导致并行请求数也线性增长,给通信也带来较大压力。同时,存储量以及单任务进程数的增长,也给集群调度、容错、网络、IO带来较大的压力。
面对这些挑战,XPS平台提出了很多创新的技术来应对,向“极限参数服务器”的目标前进了一步:
在样本处理问题上,我们采用流式学习算法为主的算法选型来解决大规模样本问题。在流式学习下,对每一批新数据,直接在当前模型上进行增量训练,并产出下一个模型,无需加载全量数据进行多轮全量学习。流式学习算法选型,平衡了数据规模和资源消耗问题,更轻量级地应对了大规模样本的问题;
在特征处理问题上,采用了将特征哈希映射为哈希值的方法替代特征编号机制。在节省内存、提升性能的同时,支持了特征的动态稀疏化正则机制和表示向量维度的动态扩张机制,解决了特征总量过大的问题;
在分布式规模方面,通过异步Checkpoint和ExactlyOnceFailover以及高性能的ArrayHashMap等机制,加上动态稀疏化正则机制等特征处理技术,保证了分布式训练的性能,提高了Server的存储效率。
面对这些大规模下的机器学习问题,eXtremeParameterServer在阿里巴巴内部应运而生,针对性地解决了大规模样本和大规模特征的挑战,并得到了广泛的应用。
XPS在阿里巴巴内部的猜你喜欢、天猫、购物链路、飞猪、生活研究所、阿里妈妈等业务场景广泛应用,对用户点击率、线上收入提升、线上用户价值提升效果显著。
下面我们对XPS平台的系统结构和数据流程、分布式优化、核心算法和算子体系进行介绍。
一、系统结构和数据流程
1.1系统结构
XPS平台整体结构如下图所示。在数据源上,底层支持OSSFile、MaxCompute离线存储、流式数据源StreamingDataHub和Kafka等数据源。用户在MaxCompute上同时完成离线数据处理和XPS算法调用。集群调度使用了阿里集团的飞天集群调度,能够有效避免资源抢占,高效利用计算资源;在算法层,XPS提供了XNN/XFTRL/XSVD/XGBOOST/FM等算法;在业务层,我们支持了推荐、广告和搜索等业务场景。
业务方通过MaxCompute中的SQL进行XPS平台的算法调用,配置选择需要的算法和优化算子,能够快速地完成训练任务的搭建。预估服务会来抓取XPS产出的模型,提供给线上做预估服务。XPS提供了完善的容错机制,用户任务失败会自动被重新拉起训练。
1.2数据流程
目前,XPS平台在阿里巴巴内部建立了完善的数据流解决方案,我们与阿里集团各个团队合作,形成了从训练数据生产、特征工程、模型训练、模型评估、模型部署、模型打分的数据流程,XPS整体数据处理流程如下图所示。
数据生产、特征工程、模型训练和模型评估阶段,我们采用了阿里的MaxCompute离线存储系统。平台上单个任务能够轻松应对每天百亿规模的训练数据,千亿特征规模的特征学习。通过支持大规模的特征,能充分挖掘了数据中蕴含的数据规律。模型训练采用流式调度,在流式调度学习下,每次学习只需要加载之前存储的模型,输入新样本进行训练产出新模型,部署到线上进行预估。整体上,相比全量计算,流式学习节约了大量计算资源。
在预估服务端,我们采用阿里内部的rtp-xps服务,我们将模型转化为tf格式,采用tf-serving来做预估服务。在模型评估方面,我们基于rtp-xps和MaxCompute研发了自己的一致性测试方案和工具,结合tf-serving可以实现快速的特征和模型一致性测试。在特征工程上,我们在开发XPS的过程中,开发了一套高性能的SessionServer服务,SessionServer提取了用户一段时间的前文行为数据,这些数据更好地帮助我们理解用户,也捕捉了用户的实时行为特性。
二、分布式优化
为了能够支持千亿规模特征、万亿规模样本,我们针对分布式机器学习场景下的异步通信做了专门优化。XPS框架自主研发了高性能的通信框架,在分布式机器学习场景下的异步通信场景下较传统的MPI通信性能提升1~2倍。通过这些优化手段,XPS的Server数能够横向扩展至个,完成千亿特征万亿参数规模的机器学习任务。分布式优化技术具体包括下面几个方面:
2.1特征哈希化
XPS框架支持直接输入哈希散列计算后的特征ID,或者对输入的字符串特征自动计算哈希值。这样整个计算过程和输出模型均只保存哈希值。我们与在线inference服务打通,输入样本、输出模型以及训练迭代、通信都能直接哈希散列特征ID,在实际线上的模型训练中,节省了一半的内存,并且性能也提升了1倍。
2.2动态特征扩缩容
在流式学习场景,一个显著的特点是快速变化的动态特征。每时每刻都有新的特征加入,也有老的特征被删除,在引入实时的自动化会话特征之后,在较短时间内会有千亿量级的特征插入和删除。在这种情形下,需要底层框架能够支持高频、动态的特征增删和通信。XPS框架针对高频增删特征场景做了专门的优化,重新设计实现了XPS-ArrayHashMap,采用realloc/mremap方式手工管理内存,插入、删除KV的性能显著高于std::unordered_map、google::DenseMap等哈希表实现;更为重要的是,XPS-ArrayHashMap支持直接零拷贝通信,消除了序列化、反序列化步骤。
2.3全局Checkpoint和ExactlyOnceFailover
万亿参数的总存储空间可以达到10TB级别。在这个量级的存储空间需求下,使用-个server是很常见的需求。而大量的server进程和worker进程给分布式参数服务器带来很高的稳定性和扩展性压力。针对这种场景,XPS框架支持了多Worker并行加载、输出模型,异步Checkpoint和异步Failover等机制,对节点失效能够零感知自动化恢复。
不同于独立的HPC集群,阿里集团的飞天集群在并行节点数量很大时,遇到个别节点故障的概率是比较高的。XPS框架支持完善的Failover功能,在各类流式数据源和离线数据源上,都支持ExactlyOnce的Failover,能够将数据流和模型都恢复到节点失败的前一刻,从而做到节点重启后不丢数据和不重复计算。
2.4高并发通信
XPS框架自主研发了高性能的通信框架,在分布式机器学习场景下的异步通信场景下较传统的MPI通信性能提升1~2倍。针对大规模的特征场景,XPS的通信层对稀疏矩阵能够支持零拷贝收发,并通过稀疏层、稠密层分别合并通信,减少通信包数量并降低了通信延迟。通过这些优化手段,使得XPS的Server数能够横向扩展至个,从而能够支持在训练过程中存储千亿特征,万亿参数的规模。
2.5表示学习优化
学习稀疏特征的表示向量对稀疏特征的计算和通信优化是最重要的,我们对稀疏哈希特征下的Embedding矩阵计算进行了深度优化,极致地优化表示向量学习中的性能。具体地,通过Pull通信操作得到的表示向量组虽然表示一个稀疏矩阵,但全部表示向量在一个连续的缓冲区中,用这段通信buffer数据可直接构造ArrayHashMap,不需要内存拷贝。通过这样的哈希表实现的稀疏特征索引接口,计算时能够以O(1)时间复杂度访问到通信传过来的各稀疏特征的表示向量,这样,稀疏表示向量组无须转换成稠密格式也能被高效地使用,消除了创建中间稠密矩阵的开销,大幅加快了minibatch的Embedding矩阵计算。
三、核心算法
大规模的训练样本,全量多轮迭代算法即使优化得再高效,也无法避免每天需要重新训练全量数据的问题,显然这已经不适合大数据的发展。流式学习算法选型,能够平衡了数据规模和资源消耗问题,轻松应对了大规模样本的学习问题。以流式学习算法为核心的分布式机器学习平台,在算法调参、算法评估、算法监控等各方面都有很多有趣的优化内容。
XPS旨在设计超大规模数据场景下高效的流式学习算法平台,我们当前主要设计了线性算法XFTRL、双线性算法XSVD和深度学习算法XNN。
3.1XFTRL算法
XFTRL算法是对经典线性算法FTRL的扩展,是为了解决大规模数据下FTRL的一些缺点而提出的。我们在使用FTRL算法的时候,遇到了很多数值问题和稳定性问题,为了解决这些问题,我们设计了几个优化点:
第一,引入正则防止奇异权重。在实践中,我们发现FTRL算法在运行中容易发生权重突然陡增的现象,通过在FTRL中引入变量z的二正则,可以有效抑制权重突然过大的现象;
第二,引入权重版本控制和梯度平均让更新更平滑。我们在更新梯度时,引入了Pull权重和Push梯度时的权重版本差打折机制,来减轻分布式下的梯度更新时worker和server的权重不一致的问题。我们进一步对minibatch下Server端的梯度和做平均,让模型权重更新过程更加平滑;
第三,引入流式学习下的参数衰减机制。我们对FTRL算法中的w,z和n等变量在每次更新完之后,乘以一个衰减系数,让整个模型权重偏向最新数据,更好地捕获数据的时效性。
3.2XSVD算法
XSVD算法是针对电商系统中“用户”、“产品”和“历史行为产品”三个核心元素,通过改进SVD++提出的算法。SVD++是推荐领域经典的算法,但我们很少看到大规模数据场景下的解决方案。我们的核心动机是解决SVD++算法在万亿样本下的可学习性问题。在流式学习的算法设计基调下,我们需要将SVD算法改造为流式场景下可学习的模式。很容易想到,对SVD++中的反馈产品隐向量累加项,只取当前行为的前K次行为作为反馈项,就可以实现流式学习。其次,为了让XSVD算法也具有LR算法的表达能力,我们也将用户,产品和会话特征也作为普通的特征,和隐向量一起做联合学习。此外,为了丰富XSVD的表达能力,我们还在XSVD中引入阿里内部的SLRM算法的“模型特征化”的转化思想,通过将SLIM算法中需要学习的产品序对关系映射为学习产品序对的特征权重的方式在XSVD中引入了SLIM思想。
3.3XNN算法
XNN算法是我们提出的深度学习算法,其结构图如下图所示。XNN主要包含了输入层(InputLayer)、转化层(TransformLayer)、乘积激活层(MultiActiveLayer)和输出层(OutputLayer)。
XNN网络的InputLayer对输入的离散特征、组合特征和连续特征进行处理,每个one-hot编码的特征会进行short和long编码,然后按照特征组进行累加(reduce_sum)操作。TransformLayer对输入层InputLayer进行各种归一化变化然后推送给MultiActiveLayer,MultiActiveLayer进行逐层的矩阵连乘和激活操作,最后顶层被Sigmoid激活算子作用后输出。XNN的输入数据按照特征组来组织,以降低在做reduce_sum时cachemiss的代价。矩阵操作混合使用Eigen矩阵库和CBlas矩阵库,平衡数据接口的简洁性和计算的高效性。
相比经典的深度学习算法,它主要有以下优点:
动态特征稀疏化正则。我们根据每个特征f的动态效用值Utlity(f)实现特征的动态增加和动态删除,当Utility(f)大于一定阈值时创建特征并学习特征权重,小于一定阈值时擦除特征并删除特征权重。动态特征的设计思想有效控制了可学习的特征总量;
动态表达维度扩张。我们根据每个特征f的动态信息量Infomation(f),给不同特征赋予不同的隐向量维度,对重要特征进行高维压缩,不重要的特征进行低维压缩,提高特征价值,提升内存使用效率。
自动化会话特征建模。我们在模型中自动统计长期、中期和短期的会话特征,把会话特征加入神经网络进行特征统计值和隐表达的联合学习,自动化会话特征思想将在算子设计中详细介绍。
分频次正则。我们对不同频次的特征采用不同的正则系数,以避免局部过拟合,最大化测试准度。在性能方面,猜你喜欢场景累计的全量数据,包含了千亿规模的特征和万亿规模的样本,单个样本平均一百个特征,在5核16TB内存的资源开销下(和MR任务混部的普通CPU集群),XNN算法可以在7小时内完成每天增量的百亿规模的流式样本的学习。
转载请注明:http://www.0431gb208.com/sjszjzl/8587.html