喜马拉雅基于DeepRec构建AI平台实践

喜马拉雅作者:李超、陶云、许晨昱、胡文俊、张争光、张玉静、赵云鹏、张猛

喜马拉雅AI云,是面向公司人员提供的一套从数据、特征、模型到服务的全流程一站式算法工具平台。

其特点在于提供了数据、画像、特征、模型、组件、应用等多个资源管理能力,通过可视化建模界面以及算法组件化能力,支持用户通过拖拽链接方式生成完整的数据->特征->样本->模型->服务的完整工作流程。平台还支持丰富的特征、模型参数化定制能力,使得用户不用频繁修改代码仅在UI界面填写参数即完成调参、任务多场景支持等,极大的降低了用户的使用成本,提升了公司整体算法开发效率。

平台上一个常见的深度模型训练DAG如下图所示:

随着公司算法能力的迅速提升以及搜广推业务的不断增长,平台推荐技术栈快速从机器学习过渡到深度学习,并对样本量级、特征维度、模型复杂度有着不断增长的需求。平台主要的深度技术框架是通过spark实现数据处理和parquet形式保存,通过k8s实现gpu资源调度,使用tensorflow实现模型训练。在具体实现过程中,有2类主要的痛点:

hash冲突问题:一般对高维ID的简化操作就是hash。我们测试发现特定特征在hash到千万级别空间后冲突率能达到20%以上,要降低到5%以内需要扩充到五倍以上空间,失去了压缩的意义。我们自研实现了一种多重hash方案,通过将高维id映射到3个万级空间,相同场景下冲突率降低到0.2‰,参数量降低95%。但上线后发现也有缺陷,即对长序列id特征列表,会扩充到原有3倍长度,显著降低了模型的推理性能。特征入场/退场/变长:这些均是对高维ID特征的基础要求。通过合理的配置这些参数,可以实现高维稀疏大模型部署模型大小的缩减以及模型指标的稳定。使得支持十亿特征维度以上模型的训练和部署成为可能。

在DeepRec中,EmbeddingVariable使用动态的类似HashMap数据结构存储稀疏参数,保证了稀疏特征数目是可以弹性伸缩,在保证特征不冲突的情况下,也一定程度的节约了内存资源。围绕这个功能,EmbeddingVariable针对业务场景,支持了特征的准入(特征入场),特征的淘汰(特征退场),以及利用不同介质混合存储EmbeddingVariable提高特征规模,降低存储成本等功能。

我们在实践中选择了基于Counter的特征准入以及基于globalstep的特征淘汰功能,经过严格测试,功能符合预期。在实际的使用过程中,我们的经验是:全量特征可以默认关闭"EV"选项,只针对高维稀疏特征开启;可以先开启准入选项,设置一个比较大的值,训练模型。然后基于EV分析工具查看具体情况做灵活调整。最终模型开始长周期滚动更新时,按照需求开启退场选项。其中需要注意的是,入场和退场的次数设置,前者是这个id的更新频次、后者是总训练的step数(batchsize),有较大区别。还有就是验证集的数据也会参与EV记录。

DeepRec对待未入场和入场后的特征,其初始值逻辑是一样的。即在训练启动时,初始化一个较小的embedding-table矩阵(类似标准的embedding初始化),上述id进入后,不做初始化而在该矩阵中查取(随机)。未入场前,不参与梯度更新,入场后参与更新。线上serving时,统一返回默认值(0)。DeepRec支持了未入场特征与入场特征初始化值可灵活配置的功能。我们在实际使用中,对于上述的未入场的特征,均统一设置初始化默认值为0,对齐了训练和推理,也便于后续进行mask操作。对于入场后的特征沿用之前的参数初始化方式。针对上述入场、退场,以及未入场的特征的处理逻辑,我们做了以下示意图帮助用户理解:

DeepRec的特征多级存储功能,主要解决训练时模型参数量过大,pod内存无法承载的情况,这个正是我们目前碰到的主要问题。用户可以配置保存embedding参数要使用的存储(HBM,DRAM以及SSD),之后多级存储会基于一定的cache策略自动地选择将高频被访问到的特征保存到小容量的高速存储中,其他特征则放置到大容量的低速存储。结合推荐场景中特征访问的倾斜性(20%的特征访问数占总访问数的80%以上),可以在训练效率不受显著影响的情况下有效地减少模型的内存使用量,降低模型训练的成本。目前我们正在和阿里云合作落地该功能。

processor:DeepRec官网已经提供了对应的libserving_processor.so文件,也可以按照用户使用的版本自行编译,支持模型自动识别、增量更新、SessionGroup等功能。满足业务需要。

PAI-EAS:阿里云还提供了PAI-EAS在线推理服务。用户只需要将模型文件部署到oss上,可以直接使用其在线推理功能。该服务还提供了常见的压测、扩缩容、线上debug、性能监控以及日志等功能,可以满足一站式部署需要。我们对此进行了测试,在专线开通的前提下,rt等性能指标符合上线要求。

模型训练:整体流程改造完毕之后,我们在单worker训练中GPU平均利用率提升到40%以上(视具体模型),训练环节整体耗时减少50%以上。

模型上线收益:我们目前在一个主流推荐场景中完成了全量上线。在对齐特征和样本情况下,在主要指标ctr、ptr等就有2%~3%+的正向收益,rt、超时率等推理指标基本持平。在引入简单的高维id及交叉特征后,其正向收益也有2%~3%+。其他主流业务场景模型也在逐步切换中。

我们对后续的一些功能也在进行探索,以便更好的支撑业务需求:

SessionGroup:DeepRec提供的线推理能力。在模型达到一定大小后,线上推理需要相应的内存。以实体物理机进行超大内存划分,往往会造成对应的CPU资源无法得到重复利用。该功能即在同一pod上,模型内存共享的情况下,提供并发推理能力。使得单节点的资源利用率,以及支撑QPS上限得到显著提升。我们已经开展对该功能的测试。

模型压缩和量化:目前模型训练过程以及模型导出的文件中,均包含相应的EV信息。在高维id场景中会占用很大一部分空间。在线上推理阶段可以舍弃该部分,加快模型传输及加载,以及降低内存使用。同时,基于DeepRec生成的模型量化裁剪,我们也在研究中。

多模型推理、GPU推理等:基于DeepRec提供的CUDAMulti-Stream和CUDAGraph的能力,可以极大的提升Inference场景下GPU的使用效率,基于GPU进行模型的推理可以进一步提升对复杂模型的推理的效率以及降低推理的成本。

第一资本就凭借着对数据资源的差异化运用成功脱颖而出。”这样的基础不仅彻底改变了该公司进军银行业的方式,还建立起良性循环,使得更好的数据支撑起更强大的分析能力,进而改善客户交互并产生出更多数据。

Fortinet有着三大重要组成部分,“安全组网”、“unifiedSASE(统一SASE)”、“AI赋能安全组网”过去三年同比平均增长了14.6%、21.7%、22.3%,远超行业同期的9%、19%、14%的增长率。

金融服务公司DiscoverFinancialServices采用容器化方法来实现其工作负载的敏捷性和灵活性,同时探索生成式AI的长期优势。

THE END
1.模型实时性与训练方式模型的实时性与模型的训练方式紧密相关,模型的实时性由弱到强的训练方式分别是全量更新,增量更新和在线学习。 1.全量更新 模型在某个时间段内所有训练样本进行训练,全量更新是最常用的训练方式 2.增量更新 增量更新仅将新加入的样本“喂”给模型进行增量训练,从技术上讲,深度学习模型往往采用随机梯度下降SGD法及其变https://blog.csdn.net/u011311291/article/details/122697680
2.ModelArts断点续训练和增量训练ModelArts用户指南什么是断点续训练和增量训练 断点续训练是指因为某些原因(例如容错重启、资源抢占、作业卡死等)导致训练作业还未完成就被中断,下一次训练可以在上一次的训练基础上继续进行。这种方式对于需要长时间训练的模型而言比较友好。 增量训练是指增加新的训练数据到当前训练流http://console.ecloud.10086.cn/op-help-center/doc/article/76144
3.增量学习增量学习与传统的批量学习模式相比,优势非常明显。它不需要保留历史数据,从而大幅减少了存储空间,而且有效地利用了历史学习结果,大幅缩短了新数据的训练时间。这种方法不仅提高了学习效率,也使得模型能够即时反馈最新数据带来的信息变化,非常适合需要实时更新知识库的应用场景。 https://www.xakpw.com/single/33704
4.增量神经网络训练腾讯云开发者社区是一种机器学习技术,用于在已有的神经网络模型基础上,通过逐步更新模型参数来适应新的数据。与传统的批量训练相比,增量神经网络训练具有以下优势: 1. 节省计算资源:增量训练只需要对新数据进行计算,而不https://cloud.tencent.com/developer/information/%E5%A2%9E%E9%87%8F%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C%E8%AE%AD%E7%BB%83-video
5.增量训练的训练过程深度学习mob64ca12ee66e3的技术博客增量训练的训练过程深度学习 增量训练在深度学习中的应用 引言 深度学习的快速发展意味着我们处理的数据量也在急剧增加。传统的训练方式往往需要从头开始训练模型,这在计算和时间上都是非常不高效的。增量训练(Incremental Training),也被称为在线训练(Online Training),是一种允许模型在已有知识基础上,随着新数据的加入https://blog.51cto.com/u_16213423/12225384
6.基于增量预训练和对抗训练的文本匹配模型然而这些对抗训练的方式都对整个词表扰动, 针对性不强, 本文在微调时针对低频词有目的性地进行对抗训练以增强模型的鲁棒性, 使得模型更好表达语义匹配中低频词的信息. 2 基于增量预训练和对抗训练的文本匹配模型 在本节中, 我们首先介绍了基于ERNIE[7]的文本匹配基线模型, 随后给出了基于低频词掩码的增量预https://c-s-a.org.cn/html/2022/11/8778.html
7.增量训练过于牛逼nuoo发现我司online learning 模式好像真的蛮牛逼的,许多公司都是 daily 全量更新或者增量更新。 1. 推荐系统模型上线3部曲 offline 用7天数据,训练 base, exp 两个模型。用第八天的近接着的一个小时数据来测试,比较 user_auc。如果有提升,用一个月的数据训练一https://www.cnblogs.com/toonice/p/14460427.html
8.数据持续增加的时候,选择大模型增量训练的方式实时检测文本改动数据增加时,选大模型增量训练,实时检测文本改动,此法甚妙,提升效率,真乃良策。 2024-07-10回复 吉祥哥一 难道只有大模型才能做到实时检测文本改动吗?小模型难道就不行? 2024-07-09回复 没有更多评论了哦~ 全网热点 哈马斯领导人在伊遭暗杀499.9w 一觉醒来中国队创造3个首次497.3w 施小琳当选四川省省长491.1w 中https://haokan.baidu.com/v?pd=wisenatural&vid=1942728068881078067
9.万文长字总结“类别增量学习”的前世今生开源工具包类别增量学习旨在从一个数据流中不断学习新类。假设存在B个不存在类别重合的训练集 , 其中 表示第 b 个增量学习训练数 据集, 又称作训练任务 (task)。 是来自于类别 的一个训练样本, 其中 是第 b 个任务的标记空间。不同任务间不存在类别重合, 即对于 https://www.thepaper.cn/newsDetail_forward_17451573
10.盼星星盼月亮:首期模型CPM除实时训练动态外,我们的研发同学每天也实时更新了训练记录总结,总结内容包括损失值、梯度值、总体进展,还记录了遇到的一些问题和训练过程中的 bug,方便您提前了解模型训练过程中的可能会遇到的各种“坑”。 在模型训练“风平浪静”的日子,研发小哥也会抛出一些名言名句、介绍一些最新论文、甚至发起猜谜活动,细细读之https://nlp.csai.tsinghua.edu.cn/news/%E7%9B%BC%E6%98%9F%E6%98%9F%E7%9B%BC%E6%9C%88%E4%BA%AE%E9%A6%96%E6%9C%9F%E6%A8%A1%E5%9E%8Bcpm-ant%E8%AE%AD%E7%BB%83%E5%AE%8C%E6%88%90%E5%95%A6/
11.定制训练:全量微调与增量微调的抉择全量微调和增量微调是深度学习模型训练中常用的两种微调策略,全量微调是指在预训练模型的基础上,对所有参数进行微调。增量微调是指在预训练模型的基础上,仅对部分参数进行微调。 全量微调:全量微调是指在使用预训练模型(如预训练的语言模型、图像分类模型等)的基础上,将整个模型的权重参数进行调整,以适应特定任务的数据https://blog.itpub.net/70037578/viewspace-3045795/