在大规模推荐系统中整合 ML 模型的经验教训

news2024/9/24 3:18:12

一、说明

        在这篇博文中,我们分享了将 Netflix 大规模搜索和推荐系统的多个相关机器学习模型整合到一个统一模型中的系统设计经验。给定不同的推荐用例,许多推荐系统将每个用例视为单独的机器学习任务,并为每个任务训练定制的 ML 模型。相比之下,我们的方法从单个多任务机器学习模型中为多个用例生成建议。这不仅提高了模型性能,还简化了系统架构,从而提高了可维护性。此外,为搜索和建议构建通用的可扩展框架使我们能够更快地为新用例构建系统。我们描述了为实现这种整合所做的权衡,以及我们学到的可以普遍应用的经验教训。

二、背景

图 1:典型推荐系统中的多个用例

        在电子商务、流媒体服务和社交媒体等大型现实世界推荐系统应用程序中,训练多个机器学习模型以优化系统不同部分的项目推荐。不同的用例有单独的模型,如通知(用户到项目的建议)、相关项目(基于项目到项目的建议)、搜索(查询到项目建议)和类别探索(类别到项目的建议)(图 1)。然而,这可能会迅速导致系统管理开销和维护大量专用模型的隐性技术债务(Sculley et al., 2015)。这种复杂性会导致长期成本增加,并降低 ML 系统的可靠性和有效性(Ehsan & Basillico,2022 年)。

图 2 显示了这种具有模型扩散的 ML 系统的外观。通知、相关项、搜索和类别探索等不同用例具有不同的 UI 画布,用户可以在其中与之交互。针对这些不同用例的 ML 系统通常会演变为具有多个离线管道,这些管道具有类似的步骤,例如标签生成、特征化和模型训练。在在线端,不同的模型可能托管在不同的服务中,具有不同的推理 API。但是,离线管道和在线基础结构中都存在许多共性,这种设计没有利用这些共性。

图 2:ML 系统中的模型扩散

        在这篇博客中,我们描述了我们利用这些任务的共性来整合这些模型的离线和在线堆栈的努力。这种方法不仅减少了技术债务,而且通过利用从一个任务中获得的知识来改进另一个相关任务,从而提高了模型的有效性。此外,我们注意到在跨多个推荐任务有效实施创新更新方面的优势。

        图 3 显示了整合的系统设计。在特定于用例的标签准备的初始步骤之后,我们统一了离线管道的其余部分并训练了单个多任务模型。在在线端,灵活的推理管道根据延迟、数据新鲜度和其他需求在不同环境中托管模型,并且模型通过统一的画布无关 API 公开。

图 3:整合的 ML 系统

三、离线设计

        在脱机模型训练管道中,每个建议任务都映射到需要显示建议的请求上下文。请求上下文架构因特定任务而异。例如,对于查询到项目建议,请求上下文将由查询、国家/地区和语言等元素组成。另一方面,对于逐项建议,请求上下文还将包括源项目和国家信息。请求上下文架构的组合是量身定制的,以适应每个建议任务的要求。

脱机管道从以下阶段记录的交互数据训练模型:

标签准备: 清理记录的交互数据并生成(request_context,标签)对。

特征提取:为上述生成的(request_context,标签)元组生成特征向量。

模型训练:基于(feature_vector,标签)行训练模型。

模型评估:使用适当的评估指标评估训练模型的性能。

部署: 使模型可用于在线投放。

        对于模型整合,我们将统一请求上下文设置为跨任务的所有上下文元素的联合。对于特定任务,缺少或不必要的上下文值将替换为 sentinel(默认)值。我们引入了一个task_type分类变量作为统一请求上下文的一部分,以通知目标推荐任务的模型。

        在标签准备中,来自每个画布的数据都会使用统一的请求上下文架构进行清理、分析和存储。然后将来自不同画布的标签数据与适当的分层合并在一起,以获得统一的标记数据集。在特征提取中,并非所有特征都包含某些任务的值,并使用适当的默认值填充。

四、在线设计

        大规模提供单个 ML 模型会带来某些独特的在线 MLOps 挑战(Kreuzberger 等人,2022 年)。每个用例在以下方面可能有不同的要求:

  • 延迟和吞吐量: 不同的服务级别协议 (SLA),以保证延迟和吞吐量目标,以提供最佳的最终用户体验。
  • 可用性: 模型服务正常运行时间的不同保证,无需诉诸回退。
  • 候选集:不同类型的项目(例如视频、游戏、人物等),可以根据特定于用例的业务需求进一步策划。
  • 预算: 模型推理成本的不同预算目标。
  • 业务逻辑: 不同的预处理和后处理逻辑。

        从历史上看,特定于用例的模型会进行调整以满足独特的要求。核心在线 MLOps 挑战是支持各种用例,而不会在模型性能方面倒退到最低公分母。

我们通过以下方式应对这一挑战:

  • 根据用例在不同的系统环境中部署相同的模型。每个环境都有“旋钮”来调整模型推理的特征,包括模型延迟、模型数据新鲜度和缓存策略以及模型执行并行性。
  • 公开用于消费系统的通用、与用例无关的 API。为了实现这种灵活性,API 支持异构上下文输入(用户、视频、流派等)、异构候选选择(用户、视频、流派等)、超时配置和回退配置。

五、吸取的教训

        将ML模型合并为单个模型可以被认为是软件重构的一种形式(Cinnéide等人,2016)。与软件重构类似,其中相关代码模块被重组和整合以消除冗余并提高可维护性,模型整合可以被认为是将不同的预测任务组合到单个模型中,并利用共享的知识和表示。这样做有几个好处。

5.1 减少代码和部署占用空间

        支持新的 ML 模型需要在代码、数据和计算资源方面进行大量投资。设置训练管道以生成标签、功能、训练模型和管理部署非常复杂。维护此类管道需要不断升级底层软件框架并推出错误修复。模型整合是降低此类成本的重要杠杆。

5.2 提高可维护性

        生产系统必须具有高可用性:必须快速检测和解决任何问题。ML 团队通常有随叫随到的轮换,以确保运营的连续性。单一的统一代码库使待命工作更轻松。好处包括几乎没有上下文切换,工作流的同质性,更少的故障点和更少的代码行。

5.3 将模型改进快速应用于多个画布

        使用多任务模型构建整合的 ML 系统使我们能够将一个用例中的改进快速应用于其他用例。例如,如果针对特定用例尝试某个功能,则通用管道允许我们在其他用例中尝试该功能,而无需额外的管道工作。对于其他用例,需要权衡潜在的回归,因为为一个用例引入了功能。但是,在实践中,如果合并模型中的不同用例足够相关,则这不是问题。

5.4 更好的可扩展性

        将多个用例整合到一个模型中需要灵活的设计,并在合并多个用例时要额外考虑。因此,这种基本的可扩展性使系统经得起未来的考验。例如,我们最初设计模型训练基础设施来整合一些用例。然而,事实证明,整合这些多个用例所需的灵活设计对于在同一基础设施上载入新模型训练用例是有效的。特别是,我们包含可变请求上下文模式的方法简化了使用相同的基础设施为新用例训练模型的过程。

六、结语

尽管 ML 系统整合不是灵丹妙药,可能并非适用于所有情况,但我们相信,在许多情况下,这种整合可以简化代码,允许更快的创新并提高系统的可维护性。我们的经验表明,合并对相似目标进行排名的模型会带来许多好处,但目前尚不清楚对目标进行排名完全不同且具有非常不同的输入特征的模型是否会从这种合并中受益。在未来的工作中,我们计划为何时最适合ML模型整合建立更具体的指导方针。最后,NLP 和建议的大型基础模型可能会对 ML 系统设计产生重大影响,并可能导致系统级别的更多整合。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/935820.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux(基础IO、文件权限、Makefile)

目录 1、man 手册 1.1 汉化 1.2 具体使用 2、文件权限 2.1 权限理解 2.2 文件详细信息查询 2.3 权限更改 3、常用函数接口 3.1 open 3.2 read 3.3 write 3.4 close 3.5 函数使用示例 4、make与Makefile 4.1 make 与 Makefile区别 4.2 Makefile的编写 5、vim简…

windows11系统重装步骤及优化技巧

目录 目录 本文目的 Windows11介绍 Windows下载 和win10对比 重装步骤 系统设置调整 系统备份还原 C盘减肥,空间优化技巧 Java开发工具 本文目的 说明windows11的系统重装步骤,大部分步骤也适用于其他windows版本。常用软件的安装与介绍。系统…

《图解HTTP》——上野 宣

图解HTTP 看完这本书并在此博客下摘录书中的部分知识以便回顾。 第一章 了解Web及网络基础 1.1 使用HTTP协议访问Web Web使用一种名为HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成从客户端到服务器端等一系列运作流程。而协…

Compose - 交互组合项

按钮 Button OutLinedButton带外边框、TextButton只是文字、IconButton只是图标形状。 Button(onClick { }, //点击回调modifier Modifier,enabled true, //启用或禁用interactionSource MutableInteractionSource(),elevation ButtonDefaults.elevatedButtonElevation( /…

Docker网络-探索容器网络如何相互通信

当今世界,企业热衷于容器化,这需要强大的网络技能来正确配置容器架构,因此引入了 Docker Networking 的概念。Docker 是一种容器化平台,允许您在独立、轻量级的容器中运行应用程序和服务。Docker 提供了一套强大的网络功能&#x…

【rust/egui】(六)看看template的app.rs:TextEdit

说在前面 rust新手,egui没啥找到啥教程,这里自己记录下学习过程环境:windows11 22H2rust版本:rustc 1.71.1egui版本:0.22.0eframe版本:0.22.0上一篇:这里 TextEdit 文本编辑框 其定义为&#…

【调试经验】Ubuntu22.04 安装和配置MySQL 8.0.34

在安装新版本的MySQL到电脑时,按着网上一些教程执行发现错误繁多,最后索性自己摸索并把服务装好了。自己也整理了一下在操作时的一些,上传分享上来希望能帮助到大家。 目录 正文 安装MySQL 配置MySQL 登录账户 方式1: 默认账户登录 方…

Tableau可视化入门实践-1

目录 Tableau 介绍基础统计图形条形图堆积图直方图饼图环形图 Tableau 介绍 Tableau是一款功能强大的数据可视化和业务智能工具,被广泛应用于各行各业的数据分析和决策支持领域。 Tableau提供了直观友好的用户界面,无需编程和复杂的数据处理技能&#x…

Tensorflow2.0搭建网络八股扩展

目录 一、自制数据集 准备:txt和图片 制作函数 二、断点继训,存取模型 1.读取保存的模型 2.保存模型 3.正确使用 三、参数提取,把参数存入txt 参数提取 四、acc/loss可视化,查看效果 1.前提开启:获取history…

ubuntu学习(六)----文件编程实现cp指令

1 思路 Linux要想复制一份文件通常指令为: cp src.c des.c 其中src.c为源文件,des.c为目标文件。 要想通过文件编程实现cp效果,思路如下 1 首先打开源文件 src.c 2 读src到buf 3 创建des.c 4 将buf写入到des.c 5 close两个文件 2 实现 vi …

并发编程基础知识篇--线程的状态和基本操作

目录 创建线程的四种方式 线程的状态和生命周期 扩展知识 线程的调度 线程状态的基本操作 interrupted 实例 join 实例 sleep 实例 扩展小知识 yield 实例 扩展 创建线程的四种方式 创建线程的四种方式 继承Thread类实现Runnable接口使用Callable和Future创…

博客系统——前端部分

目录 一、博客页面介绍 二、实现博客列表页 1、先实现导航栏 2、页面主体 左侧区域的实现:​编辑 右侧页面的实现:​编辑 博客列表页代码汇总: 三、实现博客详情页 代码实现: 四、实现博客登录页​编辑 五、博客编辑页 …

【赋权算法】Python实现熵权法

在开始之前,我们先说一下信息熵的概念。 当一件事情发生,如果是意料之中,那么这个事情就并不能拿来当做茶余饭后的谈资,我们可以说这个事情并没有什么信息和价值。而当一件不可能发生的事情发生的时候,我们可能就会觉…

挖数据四周年庆典,壕礼不断,惊喜不停!

挖数据四周岁啦!为了感谢广大用户们一路以来的支持与陪伴,我们特地准备了丰富的优惠活动,希望能够用最实际的行动来回馈您们的厚爱。四年的成长与蜕变,都是因为有您们的陪伴与鼓励,我们期待与您们一同分享这份喜悦与成…

Linux 基金会宣布正式进驻中国

在 LinuxCon 2017 (北京)即将召开前夕,我们Linux 中国会同 51CTO、开源中国对 Linux 基金会执行董事 Jim Zemlin 进行了一场远跨大洋的视频专访。 在这次专访中,Jim 先生回答了几个开源界和互联网领域关注的问题,并披…

PCI设备和PCI桥的配置空间(header_type0、header_type1)和配置命令(type0、type1)详解

1、PCI典型拓扑 2、type0和type1 名称含义Bus Number设备所在总线号Device Number设备分配到的设备号Function Number功能号,有的设备是支持多个功能的,最多8种功能Register Number要访问的寄存器地址 (1)type0和type1的区别:AD[1:0]是00代表…

几个nlp的小任务(生成式任务——语言模型(CLM与MLM))

@TOC 本章节需要用到的类库 微调任意Transformers模型(CLM因果语言模型、MLM遮蔽语言模型) CLM MLM 准备数据集 展示几个数据的结构

【AI底层逻辑】——篇章7(下):计算资源软件代码共享

续上篇... 目录 续上篇... 三、计算资源 1、第一阶段:数据大集中 2、第二阶段:资源云化 ①“云”的分类 ②虚拟化技术 ③边缘计算的普及 四、软件代码共享 总结 往期精彩: 三、计算资源 AlphaGo算法论文虽然已经发表,但…

华为OD七日集训第2期 - 按算法分类,由易到难,循序渐进,玩转OD(文末送书)

目录 一、适合人群二、本期训练时间三、如何参加四、7日集训第2期五、精心挑选21道高频100分经典题目,作为入门。第1天、逻辑分析第2天、字符串处理第3天、数据结构第4天、递归回溯第5天、二分查找第6天、深度优先搜索dfs算法第7天、动态规划 六、集训总结1、《代码…

rke安装k8s

1、修改集群中各物理机主机名hostname文件 # 查看 cat /etc/hostname # 命令修改 hostnamectl set-hostname k8s-master2、实现主机名与ip地址解析 # 查看cat /etc/hosts # 修改 vi /etc/hosts3、配置ip_forward过滤机制 # 修改 vi /etc/sysctl.conf net.ipv4.ip_forward1…