在面向短视频推荐和社交推荐等的应用场景中,推荐系统需要对海量、快速动态变化的图像进行分析与处理,这不仅要求推荐算法能够在不断变化的动态图上挖掘更深层次的对象联系,也对推荐系统的基础设施,特别是内存性能提出了更高的要求。针对推荐业务数据量大、类型跨度广泛、实时性要求高等特点,北京快手科技有限公司开发了算法平台 KGNN,能够在不断变化的动态图上挖掘更深层次的对象联系(拓扑/特征关系)。目前 KGNN 平台结合快手多个业务场景实现模型落地, 在发现页触发,用户推荐场景,电商推荐等场景为线上业务带来了显著收益,并在继续迭代以提供更多的模型/更快速易用的工具等。
为了提升平台性能,KGNN 使用英特尔® 傲腾™ 持久内存来替代传统的 DRAM 内存,实现了单机内存的 TB 级扩展,可以支持点规模 10 亿级别、边规模百亿级别的超级大图, 从而能够提供更精准的推荐。
KGNN:支持超大规模异构实时图平台
为了解决传统推荐算法很难挖掘高阶交互历史信息的问题,图神经网络(Graph Neural Network,GNN)在近年来受到广泛关注。GNN 使用节点特征作为初始嵌入,可以在这里加入用户特征、物品特征,并引入了高阶交互历史信息。企业希望通过 GNN 模型, 能够在动态图上挖掘更深层次的对象联系,提供更好的推荐效果。
基于 GNN 模型,快手算法平台 KGNN 应运而生。KGNN 平台致力于提供一个通用动态GNN 训练框架,快速运行各种 GNN 模型。该平台支持超大规模图(点规模 10 亿级别,边规模百亿级别)的动态图神经网络训练,可以支持快手主 App 发现页一类的超大流量场景实时训练,并提供丰富的图像操作功能。此外,这一平台还支持复用,具有简单易用的算法管道和完善的周边设施工具及灵活的定制化接口,并可与 Tensorflow生态深度结合,从而可帮助用户大幅节省在打造模型和训练系统组件等方面花费的时间。图 1 为快手 KGNN 平台整体的执行流程图。
在 KGNN 平台中,其中基于物理图存储层的异构图存储层负责提供超大规模异构属性图的存储和读写服务,并能够按照不同业务线的不同拓扑结构,实现更合理的节点分布,大幅度减少跨节点通讯造成的性能损失。此外,该存储层还支持水平扩展以适应不同的训练数据量场景,并提供多种带权采样、遍历、负采样等算子,以满足不同模型的交互需求。同时,这一存储层也针对 GNN 场景做了针对性设计,支持边表过期等多种机制。
解决方案:英特尔傲腾持久内存助力 KGNN 的实现
由于 KGNN 平台需要对于大量快速变化的超大规模图片进行实时训练,因此对于异构图存储层的读写采样能力以及数据吞吐能力提出了极高的要求,传统解决方案是使用高性能的DRAM 内存来拓展异构图存储,满足读写采样对于性能的要求。但是,企业级 DRAM 内存的单条容量往往只有 32 GB, 再加上服务器的内存扩展插槽的限制,单机服务器可扩展内存的最大容量受到极大限制。如果要满足对超大规模动态图的处理需求,需要对图进行大量分片,不仅影响训练性能,也会限制多机扩展性。同时,由于动态全局带权负采样管理、动态高阶负采样等复杂算法会针对各种实例进行很多低效操作,对性能造成比较大影响,导致这些算法难以实现。
使用英特尔傲腾持久内存来替代传统的 DRAM 内存可以解决上述挑战。英特尔傲腾持久内存提供了融合高速、高性价比、大容量、持久数据保护、高级加密等优势于一体的内存选项。不同于传统的 DRAM 内存,它集大容量、经济性和持久性于一身,读写带宽比 NVMe 设备高数倍,并大幅降低了延时问题。
英特尔傲腾持久内存提供了两种不同的操作模式: 内存模式(Memory Mode)和应用直接访问模式(App Direct Mode)。在内存模式中,它与普通的易失性(非持久性)系统存储器完全一样,但成本更低,能在保持系统预算的同时实现更高容量。英特尔傲腾持久内存模块的容量有 128 GB、256 GB 和 512 GB 几个版本,远超 DRAM 内存,能够在单台服务器中提供 TB 级别的内存总容量。
快手 KGNN 平台使用了英特尔傲腾持久内存的 App Direct 模式,在这种模式下,应用程序和操作系统会有两种可用的内存。系统将决定是从 DRAM 还是英特尔傲腾持久内存中写入或读取数据。要求最低延迟且不需要永久数据存储的操作可以在 DRAM 上执行,必须长期保留的大型数据结构和数据将由英特尔傲腾持久内存进行存储。在此模式下,即使系统关闭电源,数据仍保留在内存中。
快手 KGNN 平台的异构图存储层针对英特尔傲腾持久内存进行了针对性优化,能够提供更高性能的读写采样以及利用非易失性特征提供快速恢复等高可用能力,提高了整体流程的吞吐和稳定性。
英特尔傲腾持久内存化解了存储性能与容量的瓶颈,能够以 2 台服务器提供 4TB 的容量,可以实现点规模 10 亿级别、边规模百亿级别的大规模实时动态图的处理,减少分图,从而支持处理更复杂的算法,获取更好的推荐效果。
此外,高阶采样在分布式情况下需要处理各种异常情况,代码复杂度高,容易出错,而且如果出现异常,则会对流水线化执行造成冲击。此外,英特尔傲腾持久内存下高阶采样的不同阶段之间可以并行化,而分布式情况下一般只能等每一跳结束后才能进入下一轮。在实际业务图复杂的情况下,英特尔傲腾持久内存预估会有至少 5-10 倍的性能提升。
在稳定性与可用性方面,针对大规模实时动态图训练过程,一旦某些分片因为宕机而自动停止训练,就必须等待所有分片重启,从而会损失大量训练实时精度。尽管可以通过 Check Point(校验点)机制来挽回部分损失,但是重启会导致整体多分片必须退回到同一个 Check Point,其终端恢复的时间预计会高达 12 小时。在线学习场景下,一旦出现此类可用性问题,快手还需要让训练消费回退,防止出现训练穿越的问题, 这使得在线学习的效果损失非常大。
英特尔傲腾持久内存可以减少分片,同时其具备持久内存的特性,在宕机之后数据不会消失,从而将恢复时间从 12 小时降低到 2 分钟,恢复时间减少 99% 以上。
效果:更高性能、更低 TCO、更高可用性
得益于英特尔傲腾持久内存的卓越特性,快手 KGNN 平台的性能实现了显著提升,能够更有效地应对算法推荐应用所带来的挑战:
- 提升实时动态图处理的性能:英特尔傲腾持久内存提供了更大的单机存储容量,能够显著降低超大实时动态图分片所带来的性能影响。测试数据显示,英特尔傲腾持久内存可带来立竿见影的性能提升,同时也能支持更多复杂算法。
- 降低算法推荐系统 TCO:与 DRAM 内存相比,同等容量的英特尔傲腾持久内存采购价格更低。此外,英特尔傲腾持久内存提供有更高的单模块容量,使得快手可以大幅降低实现TB 级存储容量所需要的服务器节点,显著节省 TCO。
- 故障恢复时间更低:基于英特尔傲腾持久内存的快手 KGNN 平台实现了更低的恢复时间,这有利于快手提升 KGNN 平台的稳定性与可用性,降低运维负担。
展望:生态助力数据价值挖掘
快手 KGNN 的选型与优化实践证明,英特尔傲腾持久内存能够在内存容量要求高的场景中扮演重要角色,在单位成本内提供更有竞争力的性能。目前,快手 KGNN 还在继续迭代中, 进一步推动在英特尔傲腾持久内存方面的应用探索,应对推荐场景给算法、算力等带来的挑战。
除了英特尔傲腾持久内存之外,英特尔还将与快手在技术、产品、应用和生态建设等多个层面开展合作,共同验证前沿硬件及软件技术在用户推荐等场景中的落地与优化。双方将基于端到端的数据分析与人工智能解决方案,挖掘海量数据中蕴藏的价值,驱动大数据分析和人工智能创新,为用户带来更加个性化、智慧化的应用体验。