上亿用户画像、数十亿短视频特征、千亿排序模型参数,快手推荐系统率先基于持久内存应用异构存储

本文主要是介绍上亿用户画像、数十亿短视频特征、千亿排序模型参数,快手推荐系统率先基于持久内存应用异构存储,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作为2亿日活、日均千万级短视频上传、强调社区普惠的短视频APP,快手推荐系统所需解决的技术挑战是世界级的。近日,快手在国内率先应用持久内存重新设计了基于异构存储结构的推荐系统。在快手推荐系统高吞吐量大数据量请求的场景下,使用持久内存可以降低存储成本,减少故障恢复时间,提高系统可靠性。故障恢复时间从小时级别降低到分钟级,也为改善大规模深度机器学习系统在改进千亿级别数据量的处理能力上开辟了新的探索方向。

业界超大规模实时在线短视频推荐系统

如何在承载高峰期每秒数十万并发调用量的同时,从上百亿级别的短视频库中,通过千亿参数级别的深度模型将内容展现给用户?快手推荐团队设计了基于异构设备的先进推荐系统。

目前快手推荐系统采用的是计算与存储分离的架构模式(如下图所示)。推荐系统中的存储型服务主要是用来存储和实时更新上亿规模的用户画像、数十亿规模的短视频特征、以及千亿规模的排序模型参数。计算型服务主要进行的是视频召回检索、推荐模型预估和推荐策略计算。

【快手推荐系统采用计算和存储分离的架构】

 

2018年到2019年上半年,快手推荐架构团队的主要工作集中在利用异构混合计算的方式,提升推荐系统中模型预估和召回检索等计算密集型业务的性能。通过利用异构计算的改造,产生了数倍的性能提升,鼓舞了快手推荐架构团队向异构系统设计中更难的存储问题进发。

一直以来,快手推荐团队致力于推荐系统架构调整,力求在日益增长的用户量冲击下,使推荐系统高可用的前提下,实时、高效、精准地向用户推荐优质内容。

新机遇:软硬结合极致优化,探索异构存储

持久内存是介于DRAM和SSD间的新存储层级,不仅能提供接近DRAM的延迟,同时还提供持久化和更大容量的存储空间,这为推荐系统中不同场景的可行性分析和架构设计提供了思路。

相比于传统的内存加硬盘的两级存储,新存储设备的推出,现代服务器可以利用的存储层级越来越多,利用多层级存储的软件系统设计也变得越来越复杂。每种存储设备有不同的性能特性和容量大小限制,越快的设备的单位容量成本越高。例如使用内存插槽的英特尔® 傲腾™ 数据中心级持久内存,依据读写粒度的不同,读带宽大约为内存的1/3 ~ 1/9,写带宽大约为内存的1/10 ~ 1/30,但写入数据具有持久性,且容量远大于传统内存。如何结合不同层级的存储设计在大规模推荐场景下性价比最优的存储系统成为一个巨大机遇和挑战。

【新一代服务器的存储层级结构】

 

基于多层级异构存储设备,快手推荐团队针对推荐系统中的不同场景进行了可行性分析和架构设计的调研。针对持久内存的特性,对分布式索引和参数服务器中的KV存储进行了重新设计。

【基于持久性内存的KV系统设计示意图】

 

该设计主要通过为KV存储增加MemPool组件,针对不同访问类型来决定系统是访问DRAM缓存,还是直接读取持久内存。比如说,在推荐模型预估的参数服务器这个场景中,由于模型中神经网络大小与Embedding Table相比很小,所以神经网络也会被MemPool直接分配进入DRAM来提高预估的性能。

除此之外,推荐团队还对KV系统进行了调优:

  • 对于数据读取场景采用NUMA节点绑定的方式使得持久内存访问不跨NUMA节点,从而获得更好的读写性能;
  • 采用ZeroCopy技术对内存和持久内存进行访问;
  • 使用无锁技术,减少临界区中对持久内存的访问来提高性能。

经过上述的技术改进,我们将基于持久内存的索引系统用真实的线上请求数据进行模拟压测。测试结果如下:

【基于持久性内存索引系统的压力测试结果】

 

基于异构存储的索引系统几乎达到纯DRAM的索引系统相同的性能指标,但成本降低30%。同时异构存储的索引系统能够提供分钟级别的故障恢复速度,比之前小时级别的恢复提升了百倍恢复速度。

快手推荐打造业界顶级、战斗力强悍的技术团队

通过工程、算法结合,数据驱动的手段,让快手推荐系统更高效、更精准、更稳定地为快手数亿用户服务,记录每一个人的生活点滴,并让每一个人的记录都能引起共鸣。推荐架构团队的成员都来自国内知名大学、甚至国际知名大学,如CMU、清华、北大、中科大等著名院校的毕业生。团队每个成员都追求技术极致,具备一流的分布式高并发服务的开发能力,比如在线分布式索引支持每天千亿级别的视频请求、机器学习平台支持千亿级别的推荐模型在线学习和在线预估、在线服务为数亿用户提供99.99%的可用性。

这篇关于上亿用户画像、数十亿短视频特征、千亿排序模型参数,快手推荐系统率先基于持久内存应用异构存储的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/285248

相关文章

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Redis事务与数据持久化方式

《Redis事务与数据持久化方式》该文档主要介绍了Redis事务和持久化机制,事务通过将多个命令打包执行,而持久化则通过快照(RDB)和追加式文件(AOF)两种方式将内存数据保存到磁盘,以防止数据丢失... 目录一、Redis 事务1.1 事务本质1.2 数据库事务与redis事务1.2.1 数据库事务1.

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

使用JavaScript操作本地存储

《使用JavaScript操作本地存储》这篇文章主要为大家详细介绍了JavaScript中操作本地存储的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录本地存储:localStorage 和 sessionStorage基本使用方法1. localStorage

什么是cron? Linux系统下Cron定时任务使用指南

《什么是cron?Linux系统下Cron定时任务使用指南》在日常的Linux系统管理和维护中,定时执行任务是非常常见的需求,你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天... 在管理 linux 服务器的过程中,总有一些任务需要我们定期或重复执行。就比如备份任务,通常会选在服务器资

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

TP-LINK/水星和hasivo交换机怎么选? 三款网管交换机系统功能对比

《TP-LINK/水星和hasivo交换机怎么选?三款网管交换机系统功能对比》今天选了三款都是”8+1″的2.5G网管交换机,分别是TP-LINK水星和hasivo交换机,该怎么选呢?这些交换机功... TP-LINK、水星和hasivo这三台交换机都是”8+1″的2.5G网管交换机,我手里的China编程has