机器学习流水线

在生产机器学习中,目标不是构建单个模型并进行部署,目标是构建自动化流水线,以便随着时间的推移开发、测试和部署模型。原因何在?随着世界的变化,数据的变化趋势会导致生产环境中的模型过时。模型通常需要使用最新数据重新训练,以便长期继续提供高质量的预测。换句话说,您需要一种方法来用新模型替换过时模型。

如果没有流水线,替换过时模型是一个容易出错的过程。例如,一旦模型开始提供错误的预测结果,有人需要手动收集和处理新数据、训练新模型、验证其质量,最后部署该模型。机器学习流水线可以自动执行其中许多重复性过程,从而提高模型的管理和维护效率和可靠性。

构建流水线

机器学习流水线整理了构建模型并将其部署到明确定义的任务的步骤。流水线具有以下两种功能之一:提供预测或更新模型。

提供预测

服务流水线提供预测。它会将您的模型呈现在现实世界中,使其可供用户使用。例如,当用户想要预测(明天的天气情况、前往机场需要多少分钟,或者推荐视频列表)时,服务流水线会接收并处理用户的数据,进行预测,然后将结果传递给用户。

更新模型

模型往往会在投入生产后立即过时。实际上,它们是使用旧信息进行预测。他们的训练数据集捕获了一天前(在某些情况下,甚至一个小时前)的世界形势。世界不可避免地发生了改变:用户观看了更多视频,并且需要新的推荐列表;下雨导致流量变慢,用户需要更新到达时间的估算值;一种流行趋势会导致零售商请求更新某些商品的库存预测。

通常,团队会在生产模型过时之前就开始训练新模型。在某些情况下,团队会在连续的训练和部署周期中每天训练和部署新模型。理想情况下,训练新模型应该在生产模型过时之前进行。

以下流水线协同工作以训练新模型:

  • 数据流水线。数据流水线处理用户数据以创建训练和测试数据集。
  • 训练流水线。训练流水线使用数据流水线中的新训练数据集来训练模型。
  • 验证流水线。验证流水线使用数据流水线生成的测试数据集将经过训练的模型与生产模型进行比较,以验证该模型。

图 4 展示了每个机器学习流水线的输入和输出。

机器学习流水线

机器学习流水线展示其输入和输出。服务流水线会接受用户输入并提供预测结果。数据流水线处理应用数据日志以创建训练和测试数据集,训练和验证流水线使用这些数据集来训练和验证新模型

图 4. 机器学习流水线可自动执行多个模型开发和维护流程。每个流水线都会显示其输入和输出。

一般来说,下面介绍了流水线如何在生产环境中保留新模型:

  1. 首先,模型进入生产环境,服务流水线开始提供预测。

  2. 数据流水线会立即开始收集数据,以生成新的训练和测试数据集。

  3. 训练和验证流水线根据时间表或触发器,使用数据流水线生成的数据集训练和验证新模型。

  4. 如果验证流水线确认新模型并不比生产模型差,则部署新模型。

  5. 这个过程会不断重复。

模型过时和训练频率

几乎所有模型都会过时。某些模型过时的速度比其他模型更快。例如,推荐服装的模型通常很快就会过时,因为消费者偏好通常以频繁变化而闻名。另一方面,识别花卉的模型可能永远都不会过时。花朵的识别特征保持稳定。

大多数模型在投入生产后会立即开始过时。您需要建立能够反映数据性质的训练频率。如果数据是动态的,请经常训练。如果不是很动态,您可能不需要那么频繁地训练。

训练模型,以免其过时。早期训练提供了解决潜在问题的缓冲区,例如在数据或训练流水线失败,或模型质量不佳时。

建议的最佳做法是每天训练和部署新模型。与具有每日构建和发布流程的常规软件项目一样,用于训练和验证的机器学习流水线通常每天运行效果最佳。

服务流水线

传送流水线采用在线或离线两种方式之一生成和交付预测。

  • 在线预测在线预测是实时进行的,通常方法是向在线服务器发送请求并返回预测。例如,当用户想要预测时,系统会将用户的数据发送给模型,然后模型会返回预测结果。例如,Gmail 使用在线预测对传入的邮件进行实时分类

  • 离线预测离线预测已经过预计算和缓存。为了提供预测,应用会在数据库中找到缓存的预测结果并将其返回。例如,基于订阅的服务可以预测其订阅者的流失率。该模型可预测每位订阅者流失的可能性并对其进行缓存。当应用需要预测时(例如,为了激励可能即将流失的用户),只会查找预计算的预测。

图 5 显示了如何生成和交付在线预测和离线预测。

在线预测和离线预测

预测结果可以实时提供,也可以批量处理并缓存起来以供查询。

图 5. 在线预测可实时提供预测。系统会在传送时缓存离线预测并进行查询。

预测后处理

通常,预测会在传送之前进行后处理。例如,系统可能会对预测结果进行后处理,以移除恶意或有偏见的内容。分类结果可能会使用扭曲对结果重新排序(而不是显示模型的原始输出),例如,为了提供更权威的内容、呈现结果的多样性、将特定结果降级(如点击诱饵),或者出于法律原因移除结果。

图 6 显示了传送流水线以及传送预测所涉及的典型任务。

后处理预测

服务流水线通常会对预测进行后处理。

图 6. 服务流水线,说明提供预测所涉及的典型任务。

请注意,特征工程步骤通常在模型中构建,而不是单独的独立过程。服务流水线中的数据处理代码通常与数据流水线用于创建训练和测试数据集的数据处理代码几乎完全相同。

资产和元数据存储

服务流水线应包含一个存储库,用于记录模型预测结果和标准答案(如有可能)。

通过记录模型预测,您可以监控模型的质量。通过聚合预测结果,您可以监控模型的整体质量,并确定模型是否开始失去质量。通常,生产模型的预测结果应与训练数据集内标签值的平均值相同。如需了解详情,请参阅预测偏差

获取标准答案

在某些情况下,标准答案要过了很久才提供。例如,如果天气应用预测未来 6 周的天气,则 6 周内将无法获取真实天气数据(实际天气情况)。

请尽可能在应用中添加反馈机制,让用户报告标准答案。当用户将邮件从收件箱移至“垃圾邮件”文件夹时,Gmail 会隐式捕获用户反馈。但是,只有在用户正确分类其邮件时,这种方法才有效。当用户将垃圾邮件留在收件箱中(因为他们知道垃圾邮件而从不打开)时,训练数据会变得不准确。原本应该为“垃圾邮件”的邮件将被标记为“非垃圾邮件”。换言之,始终尝试各种方法来捕获和记录标准答案,但要注意反馈机制可能存在的不足。

图 7 显示了将预测结果传递给用户并记录到代码库的情况。

记录预测

服务流水线应记录预测结果以监控模型过时。

图 7. 记录预测以监控模型质量。

数据流水线

数据流水线从应用数据生成训练和测试数据集。然后,训练和验证流水线会使用数据集来训练和验证新模型。

数据流水线创建的训练和测试数据集具有最初用于训练模型的相同特征和标签,但包含更新的信息。例如,地图应用将根据数百万用户在不同地点之间的最近行程时间以及其他相关数据(如天气)生成训练和测试数据集。

视频推荐应用将生成训练和测试数据集,其中包括用户在推荐列表中点击过的视频(以及未点击的视频)以及其他相关数据,例如观看记录。

图 8 说明了使用应用数据生成训练和测试数据集的数据流水线。

数据流水线

数据流水线生成训练和测试数据集。

图 8. 数据流水线会处理应用数据,以便为训练和验证流水线创建数据集。

数据收集和处理

在数据流水线中收集和处理数据的任务可能不同于实验阶段(在该阶段,您确定您的解决方案可行):

  • 数据收集。在实验期间,收集数据通常需要访问保存的数据。对于数据流水线,收集数据可能需要发现和获得批准,以访问流式日志数据。

    如果您需要人工加标签的数据(如医学图片),则还需要通过收集和更新数据的流程。如果您需要人工标记的数据,请参阅 CrowdCompute 页面。

  • 数据处理。在实验期间,合适的特征来自于对实验数据集的抓取、联接和采样。对于数据流水线,生成相同的特征可能需要完全不同的过程。但是,请务必通过对特征和标签应用相同的数学运算来复制实验阶段的数据转换。

资产和元数据存储

您需要一个存储训练及测试数据集、对数据集进行版本控制和管理的流程。具有版本控制的代码库具有以下优势:

  • 可再现性。重新创建模型训练环境并对其进行标准化,并比较不同模型的预测质量。

  • 合规性。遵守可审核性和透明度方面的监管合规性要求。

  • 保留。设置数据保留值,以指明数据的存储时长。

  • 访问权限管理。通过精细的权限管理谁可以访问您的数据。

  • 数据完整性。跟踪和了解数据集随时间变化的情况,更轻松地诊断数据或模型存在的问题。

  • 可检测性。方便其他人找到您的数据集和功能。然后,其他团队可以确定它们是否有用。

记录数据

优质文档有助于其他人了解有关您数据的关键信息,例如数据的类型、来源、大小和其他重要的元数据。在大多数情况下,将数据记录在设计文档或 g3doc 中就足够了。如果您打算共享或发布数据,请使用数据卡片来设计信息结构。数据卡片可让其他人更轻松地发现和理解您的数据集。

训练和验证流水线

在生产模型过时之前,训练和验证流水线会生成新模型来替换生产模型。持续训练和验证新模型可确保最佳模型始终在生产环境中。

训练流水线使用训练数据集生成新模型,验证流水线使用测试数据集将新模型的质量与生产环境中的模型进行比较。

图 9 展示了使用训练数据集来训练新模型的训练流水线。

训练流水线

训练流水线使用新数据训练新模型。

图 9. 训练流水线使用最近的训练数据集来训练新模型。

训练模型后,验证流水线使用测试数据集将生产模型的质量与训练后的模型进行比较。

通常,如果训练后的模型没有比生产模型差很多,则训练后的模型会投入使用。如果训练后的模型更差,则监控基础架构应创建提醒。如果经过训练的模型的预测质量较差,则可能表示数据或验证流水线存在潜在问题。这种方法可确保使用最新数据训练的最佳模型始终在生产环境中使用。

资产和元数据存储

模型及其元数据应存储在带版本号的代码库中,以组织和跟踪模型部署。模型代码库具有以下优势:

  • 跟踪和评估。跟踪生产环境中的模型并了解其评估和预测质量指标。

  • 模型发布流程。轻松审核、批准、发布或回滚模型。

  • 可重现性和调试。通过跨部署跟踪模型的数据集和依赖项,重现模型结果并更有效地调试问题。

  • 可检测性。让他人更容易找到您的模型。然后,其他团队可以确定您的模型(或模型的某些部分)是否可以用于其目的。

图 10 展示了存储在模型代码库中且经过验证的模型。

模型存储

将模型存储在有版本控制的代码库中

图 10. 经过验证的模型会存储在模型代码库中,用于跟踪和可检测性。

您可以使用模型卡片记录并分享有关模型的关键信息,如模型用途、架构、硬件要求、评估指标等。

构建流水线的挑战

构建流水线时,您可能会遇到以下挑战:

  • 访问所需数据。如要访问数据,您可能需要说明您为何需要它。例如,您可能需要说明数据的使用方式,并澄清 PII 问题的解决方式。准备好展示概念验证,证明模型如何通过访问特定类型的数据做出更好的预测。

  • 使用合适的功能。在某些情况下,实验阶段中使用的功能将无法通过实时数据获得。因此,在实验时,请尝试确认您能够在生产环境中获得相同的功能。

  • 了解数据的收集和表示方式。了解数据的收集方式、数据收集者和收集方式(以及其他问题)可能需要时间和精力。请务必充分了解数据。请勿使用您不确定的数据来训练可能会部署到生产环境的模型。

  • 了解工作量、费用和模型质量之间的权衡。将新功能整合到数据流水线中可能需要执行大量工作。但是,此附加特征可能只会略微提高模型的质量。在其他情况下,添加新功能可能很容易。但是,获取和存储该功能的资源可能非常昂贵。

  • 获取计算资源。如果您需要 TPU 进行重新训练,可能很难获得所需的配额。此外,管理 TPU 也很复杂。例如,可能需要将模型或数据的某些部分拆分到多个 TPU 芯片中,以便针对 TPU 进行专门设计。

  • 查找合适的黄金数据集。如果数据频繁变化,获得具有一致且准确的标签的黄金数据集可能极具挑战性。

在实验期间捕获这些类型的问题可以节省时间。例如,您不想开发最佳的特征和模型后才知道它们在生产环境中不可行。因此,请尽早确认您的解决方案能否在生产环境的限制范围内运行。最好花时间验证解决方案的有效性,而不是需要返回到实验阶段,因为流水线阶段发现了无法解决的问题。