RecSysOps: 大规模推荐系统运维最佳实践

运维大规模系统总会面临很多挑战,本文介绍了Netflix在运维大规模推荐系统时总结出的最佳实践。原文: RecSysOps: Best Practices for Operating a Large-Scale Recommender System

alt

运维大规模推荐系统是一项复杂的工作,这样的系统有高可用性和吞吐量的需求,涉及众多服务和团队,环境时刻都在变化,新成员或新项目可能随时进入服务,新代码和新机器学习模型经常需要部署到生产环境中。因此,我们在Netflix需要解决的问题是,如何确保推荐系统在这样一个动态环境中健康运行?

本文将介绍RecSysOps,这是一套最佳实践,是我们在Netflix运维大规模推荐系统时学到的经验教训。这套最佳实践帮助我们保持系统健康,同时1)减少灭火时间,2)专注于创新,3)与利益相关者建立信任。

RecSysOps有四个关键组件: 问题检测、问题预测、问题诊断和问题解决,接下来我们将回顾每个组件并分享相关经验。

问题检测(Issue Detection)
alt

在RecSysOps的四个组件中,问题检测是最关键的一个,它会触发其余步骤。缺乏良好的问题检测设置就像闭着眼睛开车一样。

从形式上讲,问题检测非常简单,如果生产中出现问题,需要能够快速检测到。然而,事情出错的方式有无数种,其中许多问题我们可能还没有遇到过。以下是我们在增加问题检测覆盖率方面学到的一些经验。

第一步是整合相关学科中所有已知的最佳实践。因为创建推荐系统涉及软件工程和机器学习,包括所有DevOps和MLOps实践,如单元测试、集成测试、持续集成、数据量检查和模型度量检查。幸运的是,有许多可用的资源(如The ML Test Score: A Rubric for ML Production Readiness and Technical Debt Reduction一文所言),其中包含检查列表,可用于检查机器学习系统并确定其缺陷。

第二步是从工程师角度对系统进行端到端监视。在大规模推荐系统中,经常有许多团队参与其中,从机器学习团队角度来看,既有上游团队(提供数据),也有下游团队(使用模型)。我们从中学到的是,不要只依赖合作伙伴团队的审计,最好是审计(从我们自己角度)所有的输入和输出,包括模型以及由模型生成的分数。例如,我们可能对上游团队生成的数据的特定部分感兴趣,而该部分的更改可能不会在团队整体审计中显示出来。另一个例子是,如果某个团队对使用我们的模型进行预测感兴趣,我们可以一起记录模型预测的细节,例如对于一小部分流量的特性,从我们自己的角度进行审核。这种类型的端到端审计可以帮助我们发现上下游的许多问题,特别是在涉及到有新数据源的新项目开始的时候。

实现全面覆盖的第三步是了解利益相关者的关注点,这是增加问题检测组件覆盖率的最佳方法。在我们的推荐系统中,有两个主要视角: 成员和项目。

  • 从成员角度来看,问题非常简单。如果某个成员选择了一个在服务排名模型中排名不高的项目,就会产生潜在的问题。因此,监测和分析这些案例对于发现问题非常重要,也是未来创新的灵感来源。
  • 从项目角度来看,需要确保与负责项目的团队接触并理解他们的关注点。在Netflix,这些团队表示了对项目冷启动和潜在生产偏差的担忧。这些都是RecSys社区中活跃的研究领域,但首先,我们需要帮助这些团队围绕关注点定义指标,并构建监控这些指标的工具。我们还需要帮助他们了解每个项目是否出现了这些问题,并将这些工具直接集成到问题检测组件中。从而使我们能够1)扩大问题检测范围,2)主动解决与项目相关的关键问题,并与利益相关者建立信任。

总结:

实现所有已知的最佳实践

以我们自己的方式监控端到端系统

理解利益相关者的关注点

问题预测(Issue Prediction)
alt

能够快速发现生产问题当然很好,但如果能够预测这些问题并在投入生产之前修复那就更好了。例如,因为每个项目只启动一次,因此项目的冷启动(如新电影、新节目或新游戏)在Netflix非常重要。所以我们想知道是否可以预测某个项目是否会在发布日期前出现冷启动问题。这需要预测未来的生产模式,这是一项很有挑战性的工作。基于历史数据点,我们可以建立模型,预测产品模型在发布当天的行为统计数据。该模型使我们能够提前一周或更长时间捕捉到与项目冷启动相关的潜在问题,这使我们有时间在项目真正发布之前修复问题。

总结:

尝试在问题发生之前预测问题,而不是在问题进入生产环境后发现问题

问题诊断(Issue Diagnosis)
alt

一旦用检测或预测模型确定了问题,下一阶段是寻找其根本原因。首先需要独立复现问题。然而,大型推荐系统是非常动态的,可能无法通过简单的重新运行代码来重现问题(例如,底层输入数据或特征值可能已经更改)。因此,为了再现该问题,需要预先设置适当的日志记录,包括记录项目候选项、上下文、特征、服务模型id或再现问题所需的任何东西。为了降低成本,只记录一小部分流量的相关信息。在这种情况下,需要仔细设计抽样方法,从而能够充分覆盖所有重要的流量部分。

再现问题之后,下一步是确定问题是与机器学习模型的输入相关还是与模型本身相关。为了了解问题是否与输入数据有关,需要验证输入是否准确有效。虽然某些特征值可以追溯到它们的原始事实并进行验证,但可能有许多特征涉及复杂的数据处理或特征本身就是机器学习模型。因此,在实践中验证输入值是一个具有挑战性的问题。

一个简单的解决方案是将特征值与可比较的项目或成员的对应值进行比较,从而使我们能够确定特征值是否在预期范围内。这种方法虽然简单,但对于标记异常非常有效。例如,在某种情况下,该方法标记了与语言特征值相关的异常值,经过进一步的调查发现,该项目的语言在上游数据库中没有被正确配置。

如果所有输入特征都是正确的,下一步就是深入挖掘机器学习模型及其训练数据,以找到问题的根本原因。有许多用于模型检查和模型解释的工具,例如Shap和Lime。基于模型的体系结构(例如,可视化决策树节点或神经网络层),还可以开发自定义工具来检查所期望的属性。这种类型的分析曾经帮助我们确定处理缺失值时的错误,或者帮助我们确定训练数据的错误部分。

总结:

设置日志记录以再现问题

开发工具来检查输入的有效性

开发工具来检查机器学习模型的内部组件

问题解决(Issue Resolution)
alt

一旦确定了问题的根本原因,下一步就是修复问题。这部分类似于典型的软件工程,我们可以提供短期的修复程序或长期的解决方案。然而,为机器学习模型应用热修复程序很具有挑战性。因为这些模型是高度优化的,可能需要一段时间来训练,任何手动修改都可能导致次优推荐。那么,我们如何在将生态系统其他部分的成本降至最低的同时修复这个问题呢?解决方案需要领域洞察力和创造力,而这高度依赖于产品、平台和利益相关者。由于每个热修复程序都有自己的利弊,所以最好提前准备一个热修复解决方案列表,从而使我们能够针对每种情况快速选择和部署最合适的方案。

除了修复问题,解决问题的另一个阶段是改进RecSysOps本身。例如:

  • 是否有可能更快检测到问题?或者预测出问题?
  • 是否有可能改进工具来更快诊断问题?

最后,重要的是要使RecSysOps尽可能不产生额外成本,使操作更加顺畅,系统更加可靠。例如:

  • 确保检测或预测组件在定期、自动运行。
  • 如果在某些步骤中需要人的判断(例如诊断或解决方案),确保相关人员已经获取所有需要的信息,从而使他们能够迅速做出明智的决定
  • 确保部署热修复程序非常简单,只需单击几下即可

总结:

是否准备了一组热修复策略,并量化与每个策略相关的利弊

每一次事件都让RecSysOps变得更好

使RecSysOps尽可能不产生额外成本

总结

在这篇文章中,我们介绍了RecSysOps,以及在Netflix学到的一套最佳实践和教训。RecSysOps由四个部分组成: 问题检测、问题预测、问题诊断和问题解决。我们认为这些模式对于任何真实世界运行的推荐系统都是有用的,可以让它保持良好运行并随着时间的推移不断改进。为大规模推荐系统开发这样的组件是一个迭代的过程,有其自身的挑战并且未来需要不断迭代。例如,可能需要不同类型的模型来进行问题检测和预测。对于问题诊断和解决,需要对机器学习体系架构和设计假设有更深的理解。总的来说,将这些方面组合在一起帮助我们显著减少了问题,增加了与利益相关者的信任,并使我们可以专注于创新。

alt

你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。
微信公众号:DeepNoMind

- END -

本文由 mdnice 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JSP ssm 特殊人群防走失系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 JSP ssm 特殊人群防走失系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源 代码和数据库,系统主要…

C语言_指针进阶(下)

文章目录 前言一、函数指针数组二、指向函数指针数组的指针三. 回调函数四. qsort 函数五. 数组名的理解 sizeof5.1 数组名的理解(二维数组)5.1.1 数组名的理解 strlen5.1.2 例题:例一.例二.例三.例四. 前言 一、函数指针数组 数组是一个存放相同类型数…

Ubuntu22.04配置WiFi

Ubuntu22.04配置WiFi 注意:在/etc/netplan/​下的配置文件,格式一定要正确,否则用sudo netplan try​的时候会报错 一、查看无线网卡的名称 //choice-1 ls /sys/class/net//choice-2 ip a//choice-3 ifconfig -a‍ 二、修改配置文件 文件…

为何红黑树在B/B+树之上仍然占据重要地位?

为何红黑树在B/B树之上仍然占据重要地位? 引言二、红黑树和B/B树的基本原理2.1、红黑树的特点和性质2.2、B/B树的特点和性质2.3、红黑树和B/B树的比较 三、B/B树相对于红黑树的优势四、红黑树仍然占据重要地位的原因总结 博主简介 💡一个热爱分享高性能服…

openwrt开启SSH远程访问与开启WEB远程访问——三种方法

openwrt 开启SSH远程访问 首先,你的电脑用网线连接路由器LAN口是可以访问WEB页面和SSH连接的。 例如,电脑1连接Openwrt路由器,可以进行SSH连接到openwrt 路由器。但是电脑2无法远程访问Openwrt路由器网页和SSH远程连接。 本次操作固件版本…

2023年8月京东洗衣机行业品牌销售排行榜(京东数据挖掘)

鲸参谋监测的京东平台8月份洗衣机市场销售数据已出炉! 根据鲸参谋平台的数据显示,8月份,京东平台上洗衣机的销量共计117万,环比增长约5%,同比下降约8%;销售额为18亿,环比下降约2%,同…

使用cpolar配合Plex搭建私人媒体站

文章目录 1.前言2. Plex网站搭建2.1 Plex下载和安装2.2 Plex网页测试2.3 cpolar的安装和注册 3. 本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1.前言 用手机或者平板电脑看视频,已经算是生活中稀松平常的场景了,特别是各…

ESP32-BOX的组件配置添加核心部分详细介绍

前言 (1)为了方便开发,ESP32提供了组件库方便用户进行二次开发。 github仓库;gitee仓库 (2)在学习本章之前最好有CMake或者Makefile的基础,如果没有也不要慌,有的话最好。 &#xff…

fcpx视频编辑处理 Final Cut Pro for Mac

Final Cut Pro是一款专业的视频剪辑软件,适用于Mac操作系统。Final Cut Pro X版本在视频剪辑方面进行了大规模的更新和改进,下面将介绍Final Cut Pro X中的一些主要功能和特性: Magnetic Timeline。这个新功能使得多条剪辑片段如同磁铁般吸合…

STM32 Cubemx 基本定时器Basic Timers

文章目录 前言简介Cubemx使用 前言 持续学习stm32中… 简介 基本定时器有TIM6和TIM7,是一个16位的向上定时器。基本定时器的用途较少,只能用于纯粹的定时器以及驱动DAC模块。 注:基本定时器各自独立,不存在共用的资源。 基本定…

修改el-card的header的背景颜色

修改el-card的header的背景颜色 1.修改默认样式 好处是当前页面的所有的el-card都会变化 页面卡片&#xff1a; <el-card class"box-card" ><div slot"header" class"clearfix"><span>卡片名称</span><el-button s…

【算法专题突破】滑动窗口 - 水果成篮(13)

目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后&#xff1a; 1. 题目解析 题目链接&#xff1a;904. 水果成篮 - 力扣&#xff08;Leetcode&#xff09; 题目有很长一段话&#xff0c;但是我们读一遍题目可以提炼转化出题目的要求 &#xff1a; 其实就是找出一个最长…

ArcGIS标注的各种用法和示例

标注是将描述性文本放置在地图中的要素上或要素旁的过程。 本文整理了ArcGIS中的各种标注方法、可能遇到的问题和细节,内容比较杂,想到哪写到哪。 一、正常标注某一字段值的内容 右键点击【属性】,在【标注】选项卡下勾选【标注此图层中的的要素】,在【文本字符串】栏中…

对话大模型中的情感支持及商业化落地

在1982年经典科幻电影《银翼杀手》中&#xff0c;仿生人瑞秋因为被植入记忆而以为自己是真人&#xff0c;当被告知自己是仿生人时&#xff0c;她拒绝相信&#xff0c;流下了眼泪。如今&#xff0c;随着AI领域对话大模型技术的发展&#xff0c;“比人更像真人”的人工智能正从梦…

【PHP】麻醉临床信息系统

麻醉临床信息系统以服务围术期临床业务工作的开展为核心&#xff0c;为医护人员、业务管理人员、院级领导提供流程化、信息化、自动化、智能化的临床业务综合管理平台。 麻醉信息系统处理的数据包含病人的手术信息、麻醉信息、病人手术过程中从监护仪上采集到的数据和病人情况等…

Git 版本控制系统 笔记

概念&#xff1a;一个免费开源&#xff0c;分布式的代码版本控制系统&#xff0c;帮助开发团队维护代码 作用&#xff1a;记录代码内容&#xff0c;切换代码版本&#xff0c;多人开发时高效合并代码内容【团队开发同一个项目的代码版本管理】 1、Git 安装 之前写了&#xff0…

Spring系列文章:Spring事务

一、事务简述 1、什么是事务&#xff08; Transaction&#xff08;tx&#xff09;&#xff09; 在⼀个业务流程当中&#xff0c;通常需要多条DML&#xff08;insert delete update&#xff09;语句共同联合才能完成&#xff0c;这 多条DML语句必须同时成功&#xff0c;或者同…

C++(day4)

思维导图 封装Mystring #include <iostream> #include<cstring>using namespace std;class Mystring{ public://无参构造函数Mystring():size(10){strnew char[size];strcpy(str,"");cout<<"无参构造函数"<<endl;}//有参构造函数…

怎么压缩pdf文件大小?详细压缩步骤

怎么压缩pdf文件大小&#xff1f;在日常的工作和学习中&#xff0c;我们频繁地处理PDF文件。然而&#xff0c;有时候这些文件的大小可能会非常庞大&#xff0c;这给我们带来了一系列的问题。首先&#xff0c;它们占用了大量的存储空间&#xff0c;使得我们的设备变得拥挤不堪。…