经验教训:Instacart 的实时机器学习之旅 - shu


Instacart 广泛地结合了机器学习,以提高我们“四面市场”中所有参与者的体验质量——在 Instacart 应用程序上下订单以在 30 分钟内获得交货的客户,可以随时上网以满足客户需求的购物者订单、销售产品并可以实时更新其目录的零售商,以及参与 Instacart 广告平台拍卖以推广其产品的品牌合作伙伴。


作者:舒光华

图 1 描绘了 Instacart 的典型购物旅程,由数百个机器学习模型提供支持。所有这些操作都是实时发生的,这意味着实时利用机器学习可以为业务提供重要价值。我们经历的主要变化之一是将我们的许多面向批处理的 ML 系统转换为实时系统。在这篇文章中,我们描述了我们的过渡过程,回顾了主要挑战和决定,并吸取了重要的教训,可以帮助其他人从我们的经验中学习。

面向批处理的机器学习系统的历史


图 2:面向批处理的 ML 系统

生产中的大多数机器学习都是关于利用源自原始数据的信号(特征)来预测目标(标签)。特征的质量至关重要,特征主要按新鲜度分为两类:

  • 批量特征:从历史数据中提取的特征,通常通过批处理。这些类型的特征通常很少更改,例如食品的类别或营养信息。
  • 实时特征:从实时数据中提取的特征,通常通过流处理。这些类型的特征通常会频繁变化,这些变化对于模型预测和决策至关重要。一些示例包括实时商品可用性、供应(在线购物者数量)和需求(订单数量)以及客户实时购物会话。

对于相对较小的公司来说,从面向批处理的 ML 系统开始是一个自然的选择,因为现有的面向批处理的基础设施可以引导进步。虽然我们的一些物流系统使用实时预测,主要使用交易数据和一些事件驱动的特征计算,但生成特征并不容易,并且没有在公司内广泛采用。

Instacart 的大多数其他机器学习系统都是从面向批处理的系统开始的,具有两个主要特征:

  • 1)机器学习模型只能访问批处理功能;
  • 2) 这些模型批量离线生成预测,然后离线使用这些预测进行分析,或者使用查找表在线使用这些预测。

机器学习工程师可以简单地将模型输出写入数据库表,应用程序可以在生产中读取它们,而无需任何复杂的基础设施。
但是,我们在这些面向批处理的 ML 系统中遇到了一些限制:
  1. 陈旧的预测:预计算的预测在许多应用程序中提供了较差的体验,因为它们只对过去发生的请求产生陈旧的响应。例如,批量预测只允许我们对历史查询进行分类,但在新查询上表现不佳。
  2. 资源使用效率低下:每天为所有客户生成预测是一种资源浪费,因为许多客户并非每天都处于活跃状态。
  3. 有限的覆盖范围:该系统提供有限的覆盖范围。例如,由于基数很大,不可能缓存所有用户-项目对的预测,我们必须截断长尾中的对。
  4. 响应滞后:模型对最近的变化响应较慢,因为模型无法访问实时功能,例如客户在当前购物会话中的意图和实时产品可用性。
  5. 次优:数据新鲜度会影响模型输出的质量。如果没有最新的信号(例如供需),履行过程可能不是最理想的,因为模型无法访问实时变化,而且决策滞后会导致资源分配效率低下。

当我们在 Instacart 应用程序中引入产品创新以改进个性化时,灵感、实时捕捉和提供动态功能变得至关重要。这需要将 Instacart 的大部分 ML 服务从面向批处理的系统转换为实时系统。除其他外,我们经历了以下重大转变以启用实时 ML:
  • 实时服务:从提供预先计算的预测到实时服务,以减少陈旧性、有限的覆盖范围和资源利用不足。
  • 实时特性:从批处理特性到实时特性,确保数据新鲜,并使模型能够响应最新的变化。

过渡 1:从提供预先计算的预测到实时服务


图 3:具有实时服务的 ML 平台

两种产品使过渡到实时服务系统成为可能:特征商店和在线推理平台。特征存储是用于快速特征检索的键值存储,在线推理平台是将每个模型作为 RPC(远程过程调用)端点托管的系统。Real-Time Serving 通过集成新功能(例如个性化)改进了机器学习应用程序,通过消除未使用的预测的执行来优化计算资源,以及通过优化长尾查询来增加转换。最重要的是,它还提供了更好的客户体验,因为它结合了个性化结果并为新用户/查询改进了结果。

尽管这种转变对于机器学习应用来说是一个重大胜利,但引入实时服务带来了许多技术挑战。
转向实时服务的挑战

  • 延迟:延迟在用户体验中起着重要作用;没有人喜欢在购物时等待搜索结果加载。实时服务系统引入了对特征检索、特征工程和模型预测的依赖性,并且使得这些过程必须快速并且可以在紧张的延迟预算下进行访问。
  • 可用性:实时推理系统引入了可能导致后端服务停机的故障点。确保模型服务的高可用性需要更好的监控、错误处理和部署实践。
  • 陡峭的学习曲线:该系统涉及理解许多新的组件和过程。它主要对机器学习工程师具有挑战性,因为它改变了开发过程并引入了许多新工具。

关键决策
  • 统一接口:开发统一接口Griffin使我们能够集成单元测试、集成测试和金丝雀部署等最佳实践。它还通过提供标准工作流模板和用于快速故障排除的工具来缩短机器学习工程师的学习曲线。此外,为我们的系统创建单个入口点使我们能够标准化监控、可观察性和其他可靠性所需的流程。
  • 通用服务格式:我们选择了在 Instacart 广泛用于服务间通信的 RPC 框架。重用现有工具使我们能够快速开发生产级平台并支持多种语言之间的通信,例如 Ruby、Scala、Python 和 Go。此外,它允许机器学习工程师在团队之间共享知识,并通过协作更快地成长。

过渡 2:从批处理功能到实时功能


图 4:具有实时服务和实时功能的 ML 平台

通过消除预先计算的预测的陈旧性和有限的覆盖范围,向实时服务的过渡改善了用户体验。然而,所有的预测仍然基于批量特征。购物旅程中的最佳体验需要批量功能和实时功能。为了实现实时特性,我们开发了一个带有流技术的实时处理管道,如图 4 所示。管道监听存储在Kafka中由服务发布的原始事件,使用Flink将它们转换为所需的特性,并将它们下沉到 Feature存储按需访问。尽管流媒体是一项相对成熟的技术,但我们在转型过程中仍面临不少挑战。

挑战:

  • 不同组织中的孤立流技术:不同团队对流处理的需求各不相同,从简单的通知到分析。因此,每个组织都采用了适合其各自需求的工具,我们最终得到了三种不同的流媒体工具。这在每个组织内部都可以正常工作,但对于机器学习来说却是一个挑战,因为它需要跨不同组织构建事件。
  • 活动一致性和质量:活动主要由当地团队根据其特定需求进行消费/管理。这在合并事件以生成实时特征时带来了两个挑战:1)不清楚哪些事件可用;2) 活动质量无法保证。
  • 具有新开发流程的复杂管道:如图 4 所示,实时功能管道引入了新的技术堆栈。它从服务发布的原始事件开始,经过流处理和特征存储,并实时响应用户请求。这方面的挑战是双重的。一方面,实时特征(一般来说是流式传输)对于机器学习工程师和数据科学家来说并不是常识。另一方面,建立流式处理的开发环境涉及更多。数据流技术在 JVM(Java 和 Scala)中效果最好,而在 Python 中的支持并不理想,这一事实也使得学习曲线更加陡峭。

关键决策

  • 集中式事件存储:鉴于不同组织中存在多个流式后端的挑战性情况,我们选择 Kafka 作为集中式存储,将所有原始事件放在一起,以便我们可以从它们以一致的格式导出 ML 特征。这会给管道带来一些额外的延迟(通常在 100 毫秒内)并使用更多资源,但好处大于这些缺点。首先,集中式存储可以快速扩展,避免在实时 ML 系统和不同的流媒体工具之间构建多个接口。其次,这不会影响现有的事件使用模式,集中式事件存储可以轻松集成模式验证和数据质量检查以提高事件质量。
  • 独立的事件存储和计算:我们还选择了独立的事件存储和事件计算。一方面,按照关注点分离的设计原则,对系统进行了模块化,采用了最好的工作工具。另一方面,它以一致的格式和可配置的保留期为单个持久存储中的所有事件提供基本事实参考。这使得数据审计和合规审查更容易,并在需要时支持在保留期内重放事件。
  • 尽早组建跨职能工作组:由于实时功能(或一般的实时 ML 计划)是一项高度跨职能的工作,因此在流程的早期,我们在不同团队中组建了一个工作组,其中包括产品/专家业务开发、流媒体技术和 ML 开发。这个小组对于我们讨论和达成解决我们在启用实时 ML 方面的现有挑战的决策至关重要。它还有助于我们讨论和评估实时 ML 的早期用例。例如,由于工作组的集体意见,我们优先考虑实时项目可用性作为第一个用例,因为它本身不仅是一个基本模型,而且还提供基本的项目可用性分数,以提高项目找到率和客户体验,提高 ETA 预测准确性,并改进许多需要最新项目可用性的服务信息。这一基本用例的成功使得此后实时机器学习得以迅速采用。

回顾


图 5:使用实时 ML 的 Instacart 购物之旅

通过两个关键的转变和其他改进,我们创建了一个具有实时服务和实时功能的 ML 平台,如图 5 所示。该平台将购物之旅转变为更加动态和高效,具有更好的个性化和优化的履行。以下是平台上推出的应用程序的一些亮点:

  • 实时项目可用性在几小时内更新项目可用性分数。这直接提高了物品找到率,减少了不良订单,并最终提高了客户满意度。
  • 基于会话的推荐和个性化模型在购物会话中实时进行预测。例如,通过根据客户在最近会话中的选择删除他们不感兴趣的项目,我们已经通过实时用户印象数据使 Instacart 店面更加新鲜和动态。
  • 欺诈检测算法实时捕捉可疑行为,并在损失发生之前防止欺诈活动成为可能。仅此一项就直接减少了每年数以百万计的欺诈相关成本。

总体而言,实时 ML 平台每天传输数 TB 的事件数据,生成与数小时前相比具有数秒级延迟的特征,并实时为数百个模型提供服务。该平台解决了批处理系统的局限性,帮助相关的机器学习应用程序实时化,同时释放机器学习应用程序以产生更大的业务影响。去年,该平台在一系列 A/B 实验中实现了可观的 GTV(总交易价值)增长。

得到教训

  • 基础设施在实时 ML 中发挥着关键作用 向实时系统过渡需要对基础设施工具和流程进行重大投资,以实现更好的可观察性、高效计算、高可用性和可靠部署。我们使用了许多工具和流程来实现实时服务和实时功能,这使我们能够快速生产平台并在 Instacart 中展示影响力。使用允许使用多种工具的统一界面对于我们的成功至关重要。
  • 逐步取得进展从面向批处理的 ML 系统到实时 ML 平台是一大步。为了使其更易于管理,我们在上面详述的两个不同阶段进行了过渡。我们还为每个过渡确定了至少一个有影响力的用例。因此,在每个过渡阶段,我们都有明确的目标,并且可以轻松衡量增量影响。这不仅使平台更新更加渐进,而且还减少了采用该平台的机器学习工程师的学习曲线。
  • 通用和专业的解决方案我们采用了通用的解决方案,帮助我们以出色的支持覆盖了大多数案例。为了加速开发,我们开始构建更专业的产品,例如嵌入平台,以专注于更有针对性的情况并减少支持请求。泛化和专业化之间的这种平衡提高了那些专业用例的生产力,并实现了整个系统的高可靠性。
  • 使用产品发展基础设施在早期开发过程中采用我们平台的机器学习工程师通过提供反馈和通过向 Instacart 的其他产品团队推销平台来提高采用率,在提高质量方面发挥了重要作用。