机器学习工程领域非常广泛,以至于在将模型从实验阶段转移到生产部署过程中,容易迷失在各个必要步骤中。近年来,机器学习、新兴的机器学习概念(如注意力机制),以及最近的大型语言模型(LLMs)几乎每天都出现在新闻中。然而,很少有讨论聚焦于生产级机器学习,即将机器学习应用于实际产品和应用中的过程。
生产级机器学习涵盖了机器学习领域中除模型训练之外的所有内容。可以将生产级机器学习视为机器学习开发实践与现代软件开发实践的结合。机器学习流水线为生产级机器学习奠定了基础,而实现和执行机器学习流水线则是生产级机器学习的关键要素。
在本章中,我们将介绍生产级机器学习的概念。此外,我们将介绍什么是机器学习流水线,分析其优势,并逐步讲解机器学习流水线的各个步骤。
什么是生产级机器学习?
在学术或研究环境中,建模相对简单。通常情况下,你会拥有一个数据集(通常是一个已经清理并标记好的标准数据集),你将使用这个数据集来训练模型并评估结果。目标仅仅是构建一个能够做出良好预测的模型。可能需要进行几次迭代以充分优化模型,但一旦对结果满意,通常就完成了。
生产级机器学习(ML)则需要远不止一个模型。我们发现,一个模型通常只占进入生产的ML应用所需代码的5%左右。生产级ML应用程序在其生命周期中将被部署、维护和改进,以便持续为用户提供高质量的体验。
让我们来看看非生产环境(通常是研究或学术)中的ML与生产环境中ML的一些差异:
- 在学术或研究环境中,你通常使用的是静态数据集。而生产级ML则使用真实世界的数据,这些数据是动态且不断变化的。
- 对于学术或研究ML来说,设计优先级通常是尽可能在整个训练集上实现最高准确率。而对于生产级ML,有多个设计优先级,包括快速推断、公平性、良好的可解释性、可接受的准确率以及成本最小化。
- 研究ML的模型训练基于单一的最佳结果及实现它所需的调整和训练。生产级ML则需要持续监控、评估和再训练。
- 可解释性和公平性对于任何类型的ML建模都非常重要,但对于生产级ML而言尤其关键。
- 最后,在学术和研究ML中的主要挑战是找到并调优高准确率的模型,而生产级ML的主要挑战在于高准确率模型以及操作该模型所需的完整系统。
在生产ML环境中,你不仅仅是在输出一个单一结果,而是在开发一个通常是你服务中的关键任务部分的产品或服务。例如,如果你在进行监督学习,你需要确保标签的准确性。还需要确保训练数据集中的样本涵盖与模型接收请求相同的特征空间。此外,你还希望降低特征向量的维度,以优化系统性能,同时保留或增强数据中的预测信息。
在整个过程中,你需要考虑并衡量数据和模型的公平性,尤其是对稀有情况的处理。在医疗等领域,稀有但重要的情况可能是成功的关键。
此外,将一款软件投放到生产中也需要包括生产软件部署所需的所有系统设计,如下所示:
- 数据预处理方法
- 并行化模型训练配置
- 可重复的模型分析
- 可扩展的模型部署
你的生产级ML系统需要自动运行,以便持续监控模型性能、获取新数据、根据需要再训练和重新部署,从而保持或提升性能。
当然,你还需要尽量构建一个在成本最小化的情况下实现最大性能的生产级ML系统。这看似是一项艰巨的任务,但好消息是,已经有成熟的工具和方法可以帮助实现这一目标。
机器学习流水线的优势
当新的训练数据变得可用时,应触发一个包含数据验证、预处理、模型训练、分析和部署的工作流程。机器学习流水线的主要优势在于对模型生命周期各步骤的自动化。我们观察到,许多数据科学团队手动执行这些步骤,这既耗费成本又容易产生错误。在本书中,我们将介绍各种工具和解决方案来实现ML流水线的自动化。
让我们更详细地看看构建ML流水线的好处。
专注于开发新模型,而非维护现有模型
自动化的ML流水线使数据科学家可以在模型生命周期的大部分时间内无需维护现有模型。通常,数据科学家需要花费大量时间来保持已开发模型的更新状态。他们手动运行脚本来预处理训练数据,编写一次性部署脚本,或手动调整模型参数。自动化流水线让数据科学家能够专注于开发新模型——他们工作的乐趣所在。最终,这将提高数据科学家的工作满意度和在竞争激烈的就业市场中的留任率。
防止错误
自动化流水线可以防止错误。正如我们将在后续章节中解释的,新创建的模型将与一组版本化的数据相关联,预处理步骤也将与已开发的模型绑定。这意味着如果收集了新数据,将生成模型的新版本;如果更新了预处理步骤,训练数据将变得无效,并会生成新的模型。
在手动ML工作流程中,常见的错误来源是模型训练后预处理步骤的更改。在这种情况下,我们可能会部署一个与训练时预处理指令不同的模型,这种错误很难调试,因为模型仍然可以进行推断,但结果可能不正确。使用自动化工作流可以防止此类错误。
为调试和结果重现创建记录
在结构良好的流水线中,实验跟踪会生成模型更改记录。这种模型发布管理的形式使数据科学家能够追踪最终选择并部署的模型。这一记录在数据科学团队需要重新创建模型、创建模型新变体或跟踪模型性能时尤其有价值。
标准化
标准化的ML流水线改善了数据科学团队的工作体验。数据科学家不仅能更快地上手,还可以在团队间流动并找到一致的开发环境。这提高了效率,减少了适应新项目的时间。
ML流水线的商业价值
简而言之,自动化ML流水线的实施为数据科学团队带来了四大关键好处:
- 更多的时间用于开发新模型
- 更新现有模型的流程更简化
- 减少了模型重现所需的时间
- 获得有关先前开发模型的良好信息
所有这些方面将减少数据科学项目的成本。自动化ML流水线还能够:
- 帮助检测数据集或训练模型中的潜在偏差,以防止对使用模型的人群造成不良影响(例如,亚马逊的基于ML的简历筛选器被发现对女性存在偏见)。
- 创建记录(通过实验跟踪和模型发布管理),如果有关于数据保护法的问题,例如欧洲的AI法规或美国的AI权利法案,可以提供帮助。
- 解放数据科学家的开发时间,提升他们的工作满意度。
何时使用机器学习流水线
生产级ML和ML流水线带来了多种优势,但并不是每个数据科学项目都需要流水线。有时,数据科学家只是想尝试一个新模型、研究一种新的模型架构或复现最近的研究成果。在这些情况下,流水线的用处不大。然而,一旦模型有了用户(例如,在应用程序中使用),它将需要持续更新和微调。在这种情况下,你就需要ML流水线。如果你在开发一个计划投入生产的模型,并且对设计相当有信心,从一开始使用流水线将有助于节省未来将模型投入生产时的时间。
随着ML项目的增长,流水线的重要性也随之增加。如果数据集或资源需求较大,ML流水线方法能够轻松实现基础设施扩展。如果可重复性很重要,即使只是实验性项目,ML流水线的自动化和审计跟踪也能提供支持。
机器学习流水线的步骤
ML流水线从新的训练数据的导入开始,以接收关于新训练模型性能的某种反馈结束。该反馈可以是生产性能指标,也可以是产品用户的反馈。流水线包括多个步骤,如数据预处理、模型训练、模型分析和模型部署。
如图1-1所示,流水线实际上是一个循环过程。数据可以持续收集,因此ML模型可以不断更新。更多的数据通常意味着改进的模型。正因为这种数据的持续流入,自动化就显得尤为重要。
在真实应用中,你需要频繁地重新训练模型。如果不这样做,模型的准确率在许多情况下会下降,因为训练数据与模型进行预测时的新数据有所不同。如果重新训练是手动过程,需要手动验证新训练数据或分析更新后的模型,那么数据科学家或ML工程师将没有时间去开发适用于其他业务问题的新模型。
让我们讨论一下ML流水线中最常见的几个步骤。
数据导入和数据版本控制
数据导入是每个ML流水线的起始步骤。在此步骤中,我们将数据处理成流水线后续组件可以使用的格式。数据导入步骤不执行任何特征工程,这将在数据验证步骤之后进行。此时也是对传入数据进行版本控制的好时机,以便在流水线结束时将一个数据快照与训练后的模型关联起来。
数据验证
在训练新的模型版本之前,我们需要验证新数据。数据验证(在第2章详细讨论)主要检查新数据的统计信息——例如范围、类别数量和类别分布是否符合预期。如果检测到任何异常,还会提醒数据科学家。
例如,假设你在训练一个二元分类模型,训练数据中50%是类X样本,50%是类Y样本。如果这两个类别的比例从50/50变成了70/30,数据验证工具会提醒你。如果在未调整模型损失函数或对样本类别进行过采样/欠采样的情况下,用这样一个不平衡的训练集训练模型,模型的预测可能会偏向占优势的类别。
数据验证工具还允许数据科学家比较数据集并突出异常。如果验证结果显示异常,流水线可以停止运行,并提醒数据科学家。如果检测到数据分布的变化,数据科学家或ML工程师可以改变各个类别的采样(例如,从每个类别中选择相同数量的样本),或调整模型的损失函数,启动新的模型构建流水线并重新开始生命周期。
特征工程
通常,你无法直接使用新收集的数据来训练ML模型。几乎所有情况下,你都需要预处理数据才能在训练中使用。此预处理称为特征工程。标签通常需要转换为独热编码或多热编码,模型输入也同样如此。如果你使用文本数据训练模型,则需将文本的字符转换为索引,或将文本标记转换为词向量。由于预处理仅在模型训练前进行,而非在每次训练周期时进行,因此将预处理作为训练模型前的单独生命周期步骤最为合理。
数据预处理工具从简单的Python脚本到复杂的图模型各有不同。重要的是,当预处理步骤发生变化时,之前的训练数据应变为无效,强制更新整个流水线。
模型训练和模型调优
模型训练是大多数ML流水线的主要目标。在此步骤中,我们训练一个模型,使其能够以最低的误差预测输出。随着模型变大,尤其是在数据集较大时,此步骤的管理可能会变得很困难。由于计算资源通常是有限的,因此高效分配模型训练资源至关重要。
模型调优近年来备受关注,因为它可以显著提高性能并带来竞争优势。根据ML项目的需求,你可以选择在开始考虑ML流水线之前调优模型,或者将调优作为流水线的一部分。由于流水线的底层架构具有可扩展性,我们可以同时或按顺序生成大量模型,从而选出最终生产模型的最佳超参数。
模型分析
通常,我们使用准确率或损失来确定模型参数的最佳集合。但一旦确定了模型的最终版本,进行更深入的性能分析就非常有用。这可能包括计算其他指标,例如精确率、召回率和曲线下面积(AUC),或在比训练时使用的验证集更大的数据集上评估模型的性能。
深入的模型分析还应检查模型预测的公平性。除非将数据集划分并计算每个部分的性能,否则无法了解模型在不同用户群体中的表现。我们还可以研究模型对训练中使用特征的依赖性,探索如果更改某个训练样本的特征,模型的预测会如何变化。
与模型调优和最终选择最佳表现模型的步骤类似,此工作流步骤需要数据科学家的审核。自动化流程可以确保模型分析的结果一致,且可以与其他分析结果进行比较。
模型部署
一旦训练、调优并分析了模型,就可以投入生产。不幸的是,许多模型是通过一次性实现的方式部署的,这会使后续模型更新过程变得脆弱。
模型服务器允许你在不重新部署应用程序的情况下更新模型版本。这将减少应用程序的停机时间,并降低应用开发团队与ML团队之间的沟通量。
展望
在第20章和第21章中,我们将介绍两个生产级ML流程的示例,其中我们将从头到尾实现一个ML流水线。在这些示例中,我们将使用TensorFlow Extended(TFX),这是一个开源的端到端ML平台,可以让你像构建生产系统一样实现ML流水线。
但首先,我们会更详细地讨论ML流水线的各个步骤。我们将从数据收集、标注和验证开始,接下来进行讲解。