您的位置:首页 > 其它

双12根本不在话下,阿里首次揭秘扛过双11的千亿级特征分布式机器学习平台XPS

2017-12-14 15:42 453 查看
点击有惊喜

阿里巴巴电商平台有上亿的用户和产品,每天产生百亿规模的用户反馈数据。比如淘宝首页的猜你喜欢场景,每天就有100亿规模的用户行为数据。如此超大规模的训练数据,给分布式机器学习带来了巨大的挑战,也引入了有趣的研究问题。

2017年,阿里巴巴推荐算法团队和计算平台PAI团队合作打造了eXtreme Parameter Sever (XPS) 机器学习平台,其中eXtreme寓意为“追求极致”, 体现我们希望设计具有极致性能和效果的机器学习平台的愿景。XPS平台已经广泛全流量运行在手机淘宝的猜你喜欢、生活研究所、飞猪旅行和天猫推荐等大数据场景。

2017年双11购物狂欢节当天,小时级XNN模型在猜你喜欢和天猫推荐场景上线,稳定和快速地使用了用户双11的实时行为信息,显著提升了双11当天的收入和用户价值。在性能上,XPS平台上的例行算法,现在每天能轻松处理100亿规模样本1000亿规模的特征,算法运行速度快,容错能力强,资源利用率高。本文将对XPS平台的整体结构进行介绍,希望通过这些分享和大家交流我们在分布式算法设计和框架优化上的经验。

近年来,阿里巴巴个性化推荐和个性化搜索给用户带来了很好的体验,用户行为数量也随之大幅增长。特别是移动终端的业务飞速发展,用户和商品两个维度都呈现爆发式增长,用户和产品状态也随时间持续动态变化。在这种动态的超大规模的数据体量下,打造高效的分布式机器学习平台,精准预测用户对产品的点击率和转化率是非常有价值的,也是很有挑战的。

规模庞大且高频变化的特征和样本,给分布式机器学习平台的设计带来的挑战具体可以归结为样本、特征和分布式规模三个方面:

在样本方面,我们每天面对的是百亿规模的训练数据,累计六个月的历史训练数据就超过了万亿规模。显然,传统的全量多轮迭代的机器学习算法已经不太适合这样规模的训练样本,因为这类算法需要消耗的计算资源极多,也无法很好地引入数据的时序性。

在特征方面,大规模样本下特征总量轻易超过千亿量级,传统的特征编号方法需要消耗极多的机器资源和耗费很长的计算时间来完成特征编号,而且对新出现的特征也难以及时进行编号。从资源消耗和时间消耗上看,特征序列化编号方法已经是不可承受的步骤。此外,采用类似TensorFlow里通过string_to_hash_bucket的方法将特征映射到固定范围的做法,虽然保证固定了tensor的shape,减少了参数总量,但是在特征总数巨大的时候则又引入了大量的哈希冲突,影响了算法效果。

在分布式规模方面,大规模特征下给Server的存储和分布式计算性能带来巨大压力。举例来说,1万亿个32位float浮点数就需要3.63TB的存储空间,再加上需要保留的历史梯度等,往往需要300到600台server才能使各个进程的内存占用控制在一个合理范围。Server数成倍增长,导致并行请求数也线性增长,给通信也带来较大压力。同时,存储量以及单任务进程数的增长,也给集群调度、容错、网络、IO带来较大的压力。

面对这些挑战,XPS平台提出了很多创新的技术来应对,向“极限参数服务器”的目标前进了一步:

在样本处理问题上,我们采用流式学习算法为主的算法选型来解决大规模样本问题。在流式学习下,对每一批新数据,直接在当前模型上进行增量训练,并产出下一个模型,无需加载全量数据进行多轮全量学习。流式学习算法选型,平衡了数据规模和资源消耗问题,更轻量级地应对了大规模样本的问题;

在特征处理问题上,采用了将特征哈希映射为哈希值的方法替代特征编号机制。在节省内存、提升性能的同时,支持了特征的动态稀疏化正则机制和表示向量维度的动态扩张机制,解决了特征总量过大的问题;

在分布式规模方面,通过异步Checkpoint和Exactly Once Failover以及高性能的ArrayHashMap等机制,加上动态稀疏化正则机制等特征处理技术,保证了分布式训练的性能,提高了Server的存储效率。

面对这些大规模下的机器学习问题,eXtreme Parameter Server在阿里巴巴内部应运而生,针对性地解决了大规模样本和大规模特征的挑战,并得到了广泛的应用。

XPS在阿里巴巴内部的猜你喜欢、天猫、购物链路、飞猪、生活研究所、阿里妈妈等业务场景广泛应用,对用户点击率、线上收入提升、线上用户价值提升效果显著。

下面我们对XPS平台的系统结构和数据流程、分布式优化、核心算法和算子体系进行介绍。

一、系统结构和数据流程

1.1 系统结构

XPS平台整体结构如下图所示。在数据源上,底层支持OSS File、MaxCompute离线存储、流式数据源Streaming DataHub和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数能够横向扩展至800个,完成千亿特征万亿参数规模的机器学习任务。分布式优化技术具体包括下面几个方面:

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和Exactly Once Failover

万亿参数的总存储空间可以达到10TB级别。在这个量级的存储空间需求下,使用400-800个server是很常见的需求。而大量的server进程和worker进程给分布式参数服务器带来很高的稳定性和扩展性压力。针对这种场景,XPS框架支持了多Worker并行加载、输出模型,异步Checkpoint和异步Failover等机制,对节点失效能够零感知自动化恢复。

不同于独立的HPC集群,阿里集团的飞天集群在并行节点数量很大时,遇到个别节点故障的概率是比较高的。XPS框架支持完善的Failover功能,在各类流式数据源和离线数据源上,都支持Exactly Once的Failover,能够将数据流和模型都恢复到节点失败的前一刻,从而做到节点重启后不丢数据和不重复计算。

2.4 高并发通信

XPS框架自主研发了高性能的通信框架,在分布式机器学习场景下的异步通信场景下较传统的MPI通信性能提升1~2倍。针对大规模的特征场景,XPS的通信层对稀疏矩阵能够支持零拷贝收发,并通过稀疏层、稠密层分别合并通信,减少通信包数量并降低了通信延迟。通过这些优化手段,使得XPS的Server数能够横向扩展至800个,从而能够支持在训练过程中存储千亿特征,万亿参数的规模。

2.5 表示学习优化

学习稀疏特征的表示向量对稀疏特征的计算和通信优化是最重要的,我们对稀疏哈希特征下的Embedding矩阵计算进行了深度优化,极致地优化表示向量学习中的性能。具体地,通过Pull通信操作得到的表示向量组虽然表示一个稀疏矩阵,但全部表示向量在一个连续的缓冲区中,用这段通信buffer数据可直接构造ArrayHashMap,不需要内存拷贝。通过这样的哈希表实现的稀疏特征索引接口,计算时能够以O(1)时间复杂度访问到通信传过来的各稀疏特征的表示向量,这样,稀疏表示向量组无须转换成稠密格式也能被高效地使用,消除了创建中间稠密矩阵的开销,大幅加快了minibatch的Embedding矩阵计算。

点击有惊喜

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐