在生产环境中的机器学习中,目标不是构建单个模型并部署它。目标是构建自动化流水线,以便随着时间的推移开发、测试和部署模型。为什么呢?随着世界变化,数据趋势也会发生变化,导致生产环境中的模型过时。模型通常需要使用最新数据重新训练,才能在长期内继续提供高质量的预测。换句话说,您需要一种方法来替换过时的模型,以便使用最新的模型。
如果没有流水线,替换过时的模型就很容易出错。例如,一旦模型开始提供错误的预测,就需要有人手动收集和处理新数据,训练新模型,验证其质量,然后最终部署该模型。机器学习流水线可自动执行许多此类重复性流程,从而更高效、更可靠地管理和维护模型。
构建流水线
机器学习流水线将构建和部署模型的步骤整理成明确定义的任务。流水线具有以下两种功能之一:提供预测或更新模型。
提供预测结果
服务流水线用于提供预测结果。它将您的模型展示给现实世界,让用户可以访问。例如,当用户需要预测时(例如明天的天气如何、前往机场需要多少分钟,或者推荐的视频列表),服务流水线会接收并处理用户的数据,做出预测,然后将预测结果提供给用户。
更新模型
模型在部署到生产环境后,很快就会过时。从本质上讲,它们是使用旧信息进行预测。其训练数据集捕获的是一天前(在某些情况下是一小时前)的世界状态。世界在不断变化:用户观看了更多视频,需要新的推荐列表;下雨导致交通变缓,用户需要更新到达时间估计值;热门趋势导致零售商请求更新特定商品的库存预测。
通常,团队会在生产模型过时之前很久就训练新模型。在某些情况下,团队会在持续的训练和部署周期中每天训练和部署新模型。理想情况下,应在新版模型过时之前及时训练新模型。
以下流水线可协同工作来训练新模型:
- 数据流水线。数据流水线会处理用户数据,以创建训练数据集和测试数据集。
- 训练流水线。训练流水线使用来自数据流水线的新训练数据集来训练模型。
- 验证流水线。验证流水线通过将训练后的模型与生产模型进行比较来验证训练后的模型,所用的是由数据流水线生成的测试数据集。
图 4 展示了每个机器学习流水线的输入和输出。
机器学习流水线
图 4. 机器学习流水线可自动执行许多开发和维护模型的过程。每个流水线都会显示其输入和输出。
从非常一般的层面来看,流水线通过以下方式在生产环境中保持模型的新鲜度:
首先,模型投入生产,服务流水线开始提供预测。
数据流水线会立即开始收集数据,以生成新的训练数据集和测试数据集。
根据时间表或触发条件,训练和验证流水线会使用数据流水线生成的数据集来训练和验证新模型。
当验证流水线确认新模型不逊于生产模型时,系统会部署新模型。
此过程会不断重复。
模型过时程度和训练频率
几乎所有模型都会过时。有些模型比其他模型更快过时。例如,推荐服装的模型通常很快就会过时,因为消费者的偏好众所周知地经常变化。另一方面,识别花卉的模型可能永远不会过时。花卉的识别特征保持稳定。
大多数模型在投入生产环境后立即开始过时。您需要确定一个能反映数据性质的训练频率。如果数据是动态的,请经常训练。如果变化不大,您可能不需要经常训练。
在模型过时之前对其进行训练。提前训练可提供缓冲时间来解决潜在问题,例如数据或训练流水线失败,或者模型质量较差。
建议的最佳实践是每天训练和部署新模型。 与具有每日构建和发布流程的常规软件项目一样,用于训练和验证的机器学习流水线通常在每天运行时效果最佳。
检查您的理解情况
服务流水线
服务流水线通过以下两种方式之一生成和交付预测结果:在线或离线。
在线预测。在线预测是实时进行的,通常通过向在线服务器发送请求并返回预测结果来实现。 例如,当用户需要预测时,系统会将用户的数据发送给模型,然后模型会返回预测结果。
离线预测。离线预测是预先计算并缓存的。为了提供预测,应用会在数据库中查找缓存的预测并返回该预测。例如,基于订阅的服务可能会预测订阅者的流失率。该模型会预测每位订阅者的流失可能性并将其缓存。当应用需要预测结果时(例如,为了激励可能即将流失的用户),只需查找预先计算的预测结果即可。
图 5 显示了在线预测和离线预测的生成和交付方式。
在线和离线预测
图 5. 在线预测可实时提供预测结果。离线预测会缓存起来,并在提供预测时进行查找。
预测后处理
通常情况下,预测结果在交付之前会经过后处理。例如,可以对预测结果进行后处理,以移除有害或有偏见的内容。分类结果可能通过某个流程对结果进行重新排序,而不是显示模型的原始输出,例如,为了提升更权威的内容、呈现多样化的结果、降低特定结果(例如点击诱饵)的排名,或出于法律原因移除结果。
图 6 显示了服务流水线以及交付预测结果所涉及的典型任务。
后处理预测
图 6. 服务流水线,用于说明交付预测结果所涉及的典型任务。
请注意,特征工程步骤通常是在模型内构建的,而不是一个单独的独立流程。服务流水线中的数据处理代码通常与数据流水线用于创建训练和测试数据集的数据处理代码几乎完全相同。
素材资源和元数据存储
传送流水线应包含一个用于记录模型预测和(如果可能)标准答案的代码库。
记录模型预测结果有助于您监控模型质量。通过汇总预测结果,您可以监控模型的总体质量,并确定模型是否开始失去质量。一般来说,生产模型的预测结果应与训练数据集中的标签具有相同的平均值。如需了解详情,请参阅预测偏差。
捕获标准答案
在某些情况下,标准答案只有在很久之后才会提供。例如,如果天气应用预测未来 6 周的天气,那么 6 周内都无法获得实际天气情况这一真实数据。
如果可能,请在应用中添加反馈机制,让用户报告实际情况。当用户将邮件从收件箱移至垃圾邮件文件夹时,邮件应用可以隐式捕获用户反馈。不过,只有在用户正确分类邮件时,此功能才有效。如果用户将垃圾邮件留在收件箱中(因为他们知道这是垃圾邮件,并且从不打开),训练数据就会变得不准确。相应邮件会被标记为“非垃圾邮件”,但实际上应标记为“垃圾邮件”。换句话说,始终尝试寻找捕获和记录标准答案的方法,但也要注意反馈机制中可能存在的缺点。
图 7 显示了向用户提供预测结果并将预测结果记录到代码库的过程。
记录预测
图 7. 记录预测结果以监控模型质量。
数据流水线
数据流水线可根据应用数据生成训练数据集和测试数据集。然后,训练和验证流水线会使用这些数据集来训练和验证新模型。
数据流水线会创建训练数据集和测试数据集,这些数据集具有最初用于训练模型的相同特征和标签,但包含更新的信息。例如,地图应用会根据数百万用户最近在各点之间的出行时间以及天气等其他相关数据,生成训练数据集和测试数据集。
视频推荐应用会生成训练数据集和测试数据集,其中包含用户从推荐列表中点击的视频(以及未点击的视频),以及其他相关数据,例如观看记录。
图 8 展示了使用应用数据生成训练数据集和测试数据集的数据流水线。
数据流水线
图 8. 数据流水线处理应用数据,以创建用于训练和验证流水线的数据集。
数据收集和处理
数据流水线中用于收集和处理数据的任务可能与实验阶段(您在该阶段确定了解决方案的可行性)不同:
数据收集。在实验期间,收集数据通常需要访问已保存的数据。对于数据流水线,收集数据可能需要发现并获得访问流式日志数据的批准。
如果您需要人工标记的数据(例如医学图像),则还需要一个用于收集和更新这些数据的流程。
数据处理。在实验期间,合适的特征来自对实验数据集的抓取、联接和抽样。对于数据流水线,生成这些相同的特征可能需要完全不同的流程。不过,请务必复制实验阶段的数据转换,方法是对特征和标签应用相同的数学运算。
素材资源和元数据存储
您需要一个流程来存储、版本控制和管理训练数据集和测试数据集。启用版本控制的代码库具有以下优势:
可再现性。重新创建并标准化模型训练环境,以及比较不同模型之间的预测质量。
合规性。遵守可审核性和透明度方面的监管合规性要求。
留存。设置数据保留值,以确定数据存储时长。
访问权限管理。通过精细的权限管理功能,控制哪些人可以访问您的数据。
数据完整性。跟踪和了解数据集随时间的变化,从而更轻松地诊断数据或模型存在的问题。
可发现性。让其他人能够轻松找到您的数据集和功能。然后,其他团队可以确定这些模型是否适合其用途。
记录数据
良好的文档有助于他人了解有关数据的关键信息,例如数据类型、来源、大小和其他基本元数据。在大多数情况下,在设计文档 中记录数据就足够了。如果您打算分享或发布数据,请使用 数据卡片 来整理信息。数据卡片可让其他人更轻松地发现和了解您的数据集。
训练和验证流水线
训练和验证流水线会生成新模型来替换过时的生产模型。通过不断训练和验证新模型,确保生产环境中始终使用最佳模型。
训练流水线会根据训练数据集生成新模型,而验证流水线会使用测试数据集将新模型的质量与生产环境中的模型进行比较。
图 9 展示了使用训练数据集训练新模型的训练流水线。
训练流水线
图 9. 训练流水线使用最新的训练数据集训练新模型。
模型训练完毕后,验证流水线会使用测试数据集将生产模型的质量与训练模型的质量进行比较。
一般来说,如果训练后的模型与生产模型相比没有明显变差,则训练后的模型会投入生产。如果训练后的模型效果更差,监控基础架构应创建提醒。如果训练后的模型预测质量较差,可能表示数据或验证流水线存在潜在问题。此方法可确保始终在生产环境中使用基于最新数据训练的最佳模型。
素材资源和元数据存储
模型及其元数据应存储在版本控制的代码库中,以便整理和跟踪模型部署。模型代码库具有以下优势:
跟踪和评估。跟踪生产环境中的模型,并了解其评估和预测质量指标。
模型发布流程。轻松查看、批准、发布或回滚模型。
可重现性和调试。通过跟踪模型在各个部署中的数据集和依赖项,重现模型结果并更有效地调试问题。
可发现性。让其他人能够轻松找到您的模型。其他团队随后可以确定您的模型(或其中的部分内容)是否可用于其用途。
图 10 展示了存储在模型代码库中的已验证模型。
模型存储
图 10. 经过验证的模型会存储在模型代码库中,以便进行跟踪和发现。
使用 模型卡片 记录并分享有关模型的重要信息,例如其用途、架构、硬件要求、评估指标等。
检查您的理解情况
构建流水线的挑战
在构建流水线时,您可能会遇到以下挑战:
获取所需数据的访问权限。数据访问可能需要说明您需要访问的原因。例如,您可能需要说明数据的使用方式,并阐明如何解决个人身份信息 (PII) 问题。准备好展示概念验证,证明您的模型在获得特定类型的数据后可以做出更准确的预测。
获取合适的特征。在某些情况下,实验阶段使用的功能无法通过实时数据获得。因此,在进行实验时,请尽量确认您能否在正式版中获得相同的功能。
了解数据的收集和呈现方式。了解数据的收集方式、收集者以及收集方式(以及其他问题)可能需要花费时间和精力。请务必透彻了解数据。请勿使用您不确信的数据来训练可能用于生产环境的模型。
了解在工作量、费用和模型质量之间进行权衡取舍。 将新功能纳入数据流水线可能需要付出大量精力。不过,添加的特征可能只会略微提高模型质量。在其他情况下,添加新功能可能很容易。 不过,获取和存储该功能的资源可能非常昂贵。
获取计算资源。如果您需要 TPU 进行重新训练,可能很难获得所需的配额。此外,管理 TPU 也非常复杂。例如,您可能需要专门为 TPU 设计模型或数据的某些部分,方法是将这些部分拆分到多个 TPU 芯片上。
找到合适的黄金数据集。如果数据经常变化,则很难获得具有一致且准确标签的黄金数据集。
在实验期间发现这些类型的问题可以节省时间。例如,您不希望开发出最佳的特征和模型,结果却发现它们在生产环境中不可行。因此,请尽早确认您的解决方案是否能在生产环境的限制范围内正常运行。最好花时间验证解决方案是否有效,而不是因为流水线阶段发现了无法克服的问题而需要返回实验阶段。