背景
数据科学和机器学习正逐渐成为解决复杂现实问题以及在所有领域创造价值的核心功能。现在,有效运用机器学习技术的各种要素都已具备:
- 大型数据集
- 经济实惠的计算资源(按需)
- 适用于各种云平台的机器学习专用加速器
- 不同机器学习研究领域(例如:计算机视觉、NLU 和 推荐系统)的快速发展。
因此,许多企业正在投资打造数据科学团队和机器学习功能,以开发出能够为用户带来商业价值的预测模型。
MLOps 简述
MLOps 是一种旨在统一机器学习系统开发 (Dev) 和机器学习系统运营 (Ops)的机器学习工程文化和实践。实施 MLOps 意味着您将在机器学习系统构建流程的所有步骤(包括:集成、测试、发布、部署和基础架构管理)中实现自动化和监控。
数据科学家可以在给定的相关训练数据集的情况下实现并训练一个机器学习模型,可在留出的离线数据集上实现出色的预测性能。但是,真正的挑战不是构建机器学习模型,而是构建集成的机器学习系统以及在生产环境中持续运行该系统。
在实际的机器学习系统中,只有一小部分是由机器学习代码组成的。所需的相关元素既庞大又复杂,如下图展示了机器学习系统的元素。
在此图中,系统的其余部分包括配置、自动化、数据收集、数据验证、测试和调试、资源管理、模型分析、过程和元数据管理、服务基础架构和监控。如需开发和运行类似的复杂系统,您可以将 DevOps 原则应用于机器学习系统 (MLOps)。
下面将介绍在为您的数据科学实践(例如 :ML 中的 CI、CD 和 CT)设置 MLOps 环境时,要考虑的概念。
DevOps 与 MLOps 的对比
DevOps 是开发和运行大规模软件系统的一种常见做法。这种做法具有诸多优势,例如:缩短开发周期、提高部署速度、实现可靠的发布。如需获得这些优势,您需要在软件系统开发中引入两个概念:
机器学习系统是一种软件系统,因此类似的做法有助于确保您能够可靠地大规模构建和运行机器学习系统。
但是,机器学习系统在以下方面与其他软件系统不同:
- 团队技能:在机器学习项目中,团队通常包括数据科学家或机器学习研究人员,他们主要负责进行探索性数据分析、模型开发和实验。这些成员可能不是经验丰富的、能够构建生产级服务的软件工程师。
- 开发:机器学习在本质上具有实验性。您应该尝试不同的特征、算法、建模技术和参数配置,以便尽快找到问题的最佳解决方案。您所面临的挑战在于跟踪哪些方案有效、哪些方案无效,并在最大程度提高代码重复使用率的同时维持可重现性。
- 测试:测试机器学习系统比测试其他软件系统更复杂。除了典型的单元测试和集成测试之外,您还需要验证数据、评估经过训练的模型质量以及验证模型。
- 部署:在机器学习系统中,部署不是将离线训练的机器学习模型部署为预测服务那样简单。机器学习系统可能会要求您部署多步骤流水线以自动重新训练和部署模型。此流水线会增加复杂性,并要求您自动执行部署之前由数据科学家手动执行的步骤,以训练和验证新模型。
- 生产:机器学习模型的性能可能会下降,不仅是因为编码不理想,而且也因为数据在不断演变。换句话说,与传统的软件系统相比,模型可能会通过更多方式衰退,而您需要考虑这种降级现象。因此,您需要跟踪数据的概要统计信息并监控在线模型的性能,以便系统在值与预期不符时发送通知或回滚。
ML 和其他软件系统(在源代码控制的持续集成、单元测试、集成测试以及软件模块或包的持续交付等方面)类似,但是,在 ML 中,有一些显着的区别:
- CI 不再仅仅测试和验证代码及组件,而且还会测试和验证数据、数据 schemas 和模型。
- CD 不再针对单个软件包或服务,而是一个系统(机器学习训练流水线),它应该会自动部署其他服务(模型预测服务)。
- CT 是机器学习系统特有的一个新属性,它主要涉及自动化重新训练和服务模型。
机器学习生命周期的各个步骤
在任何机器学习项目中,定义业务用例并确定成功标准后,将机器学习模型交付给生产环境的过程涉及以下步骤。这些步骤可以手动完成,也可以由自动流水线完成。
- 数据提取:您可以为机器学习任务选择和集成来自各种数据源的相关数据。
- 数据分析:您可以执行探索性数据分析 (EDA) 以了解可用于构建机器学习模型的数据。此过程将产生以下结果:
- 了解模型预期的数据 schema 和特性。
- 识别模型所需的数据和特征工程。
- 数据准备:为机器学习任务准备数据。此准备工作涉及数据清理,即将数据拆分为训练集、验证集和测试集。您还可以将数据转换和特征工程应用于解决目标任务的模型。此步骤的输出是准备好的格式的数据拆分。
- 模型训练:数据科学家使用准备好的数据实现不同的算法,以训练各种机器学习模型。此外,您还需要对实现的算法进行超参数调节,以获得最佳机器学习模型。此步骤的输出是经过训练的模型。
- 模型评估:在预留的测试集上评估模型,以评估模型质量。此步骤的输出是一组用于评估模型质量的指标。
- 模型验证:模型已确定适合部署(它的预测性能优于特定基准)。
- 提供模型:经过验证的模型会部署到目标环境以提供预测。此部署可以是以下其中一项:
- 具有 REST API 的微服务,可用于提供在线预测。
- 边缘设备或移动设备的嵌入式模型。
- 批量预测系统的一部分。
- 模型监控:监控模型预测性能,以便在机器学习过程中调用新的迭代。
这些步骤的自动化级别决定了机器学习过程的成熟度,成熟度反映了使用新数据训练新模型或者使用新实现训练新模型的速度。
MLOps 成熟度等级
下面来介绍 MLOps 成熟度的三个等级,从最常见的等级(该级别不涉及自动化)开始,一直到自动执行机器学习和 CI/CD 流水线。
MLOps 等级 0:手动过程
许多团队都有数据科学家和机器学习研究人员,他们可以构建领先的模型,但他们构建和部署机器学习模型的过程完全是手动的。这样的级别被视为基本成熟度等级(等级 0)。下图展示了此过程的工作流。
特性
以下列表突出显示了 MLOps 等级 0 流程的特性,如上图所示:
- 手动的,脚本驱动的交互式过程:每个步骤(包括数据分析、数据准备、模型训练和验证)都是手动的。该过程需要手动执行每个步骤,并且手动从一个步骤转到另一个步骤。此过程通常由数据科学家以交互方式在Notebook中编写和执行的实验性代码,直到生成有效的模型为止。
- 机器学习开发与运营(operations)分离:该过程会将创建模型的数据科学家与将模型用作预测服务的工程师分开。数据科学家将经过训练的模型作为制品移交给工程团队,以便在其 API 基础架构上进行部署。此移交工作可能包括将经过训练的模型放在存储位置、在代码库中检查模型对象,或者将其上传到模型注册表(模型仓库)。然后,部署模型的工程师需要在生产环境中提供所需的功能以实现低延时服务,这可能会导致训练-模型服务偏差。
- 不频繁发布迭代:该过程假定您的数据科学团队管理一些不会频繁更改(更改模型实现或使用新数据重新训练模型)的模型。新模型版本每年仅部署几次。
- 无 CI:由于假定几乎不更改实现,因此 CI 已被忽略。通常,测试代码是 Notebook 或脚本执行的一部分。实现实验步骤的脚本和 Notebook 由源代码控制,并生成经过训练的模型、评估指标和可视化等制品。
- 无 CD:由于不会频繁部署模型版本,因此,不考虑 CD。
- 部署指的是预测服务:该过程仅涉及将经过训练的模型部署为预测服务(例如,具有 REST API 的微服务),而不是部署整个机器学习系统。
- 缺少主动性能监控:该过程不会跟踪或记录模型预测和行为,模型预测和行为是检测模型性能下降和其他模型行为偏移所必需的信息。
工程团队可能会对 API 配置、测试和部署(包括安全、回归以及负载测试和金丝雀测试)进行自己的复杂设置。此外,在升级模型以处理所有预测请求流量之前,新版机器学习模型的生产部署通常会进行 A/B 测试或在线实验。
挑战
MLOps 等级 0 在许多开始将机器学习应用于其用例的企业中很常见。如果难得更改或训练模型,则由数据科学家驱动此手动过程可能就足够了。实际上,在现实环境中部署模型时,模型通常会失效。模型无法适应环境的动态变化或描述环境的数据的变化。如需了解详情,请参阅为什么机器学习模型会在生产环境中崩溃和失效。
如需战胜这些挑战并保持模型在生产环境中的准确性,您需要执行以下操作:
- 在生产环境中主动监控模型的质量:监控可让您检测性能下降和模型过时等情况。它会提示您执行新的实验迭代以及(手动)针对新数据重新训练模型。
- 频繁地重新训练生产模型:如需捕获不断演变和新兴的模式,您需要使用最新数据重新训练模型。例如,如果您的应用使用机器学习推荐时尚产品,则其建议应适应最新的趋势和产品。
- 不断尝试新的实现以生成模型:如需利用最新的技术理念和技术进步,您需要尝试新的实现,例如:特征工程、模型结构和超参数。例如,如果您在人脸检测中使用计算机视觉,则人脸模式是固定的,但更好的新技术可以提高检测准确度。
为了战胜此手动过程的挑战,具有 CI/CD 和 CT 的 MLOps 做法将很有用。通过部署机器学习训练流水线,您可以启用 CT,并且可以设置 CI/CD 系统以快速测试、构建和部署机器学习流水线的新实现。
MLOps 等级 1:自动化机器学习流水线
等级 1 的目标是通过自动执行机器学习流水线来持续训练模型;这样可以持续交付模型预测服务。如需自动执行在生产环境中使用新数据重新训练模型的过程,您需要在流水线中引入自动化数据和模型验证步骤,以及触发流水线和元数据管理。
下图是针对 CT 的自动化机器学习流水线的示意图。
特性
以下列表突出显示了 MLOps 等级 1 设置的特性,如上图所示:
- 快速实验:机器学习实验的步骤已经过编排。各个步骤之间的转换是自动执行的,这样可以快速迭代实验,并更好地准备将整个流水线移至生产环境。
- 生产环境中的模型 CT:系统会在生产环境中根据实时流水线触发器使用新数据自动训练模型。
- 实验与运营之间的对称性:在开发或实验环境中使用的流水线实现会在预生产和生产环境中使用,这是 MLOps 做法的主要方面,用于统一 DevOps。
- 组件和流水线的模块化代码:如需构建机器学习流水线,组件必须可重复使用、可组合,并且有望跨机器学习流水线共享。虽然 EDA 代码仍可在 notebooks 中使用,但组件的源代码必须模块化。此外,组件最好应容器化,以执行以下操作:
- 将执行环境与自定义代码运行时环境分离。
- 使代码在开发和生产环境之间可重现。
- 隔离流水线中的每个组件。组件可以有自己的运行时环境版本,并且可以有不同的语言和库。
- 持续交付模型:生产环境中的机器学习流水线会向使用新数据进行训练的新模型持续交付预测服务。模型部署步骤是自动执行的,该步骤将经过训练和验证的模型用作在线预测的预测服务。
- 流水线部署:在等级 0 中,您可以将经过训练的模型作为预测服务部署到生产环境。对于等级 1,您可以部署整个训练流水线,该流水线会自动重复运行以将经过训练的模型用作预测服务。
组件
本部分讨论您需要添加到架构以实现机器学习持续训练的组件。
数据和模型验证
将机器学习流水线部署到生产环境时,机器学习流水线触发器部分中讨论的一个或多个触发器会自动执行流水线。流水线需要新的实时数据来生成使用新数据进行训练的新模型版本(如上图 所示)。因此,生产流水线需要自动化数据验证和模型验证步骤,以确保实现以下预期行为:
- 数据验证:在模型训练之前需要执行此步骤,以确定您应该重新训练模型还是停止执行流水线。如果流水线识别到以下情况,则系统会自动做出此决策。
- 数据 schema 偏差:这些偏差被视为输入数据中的异常情况,这意味着下游流水线步骤(包括数据处理和模型训练)接收的数据不符合预期架构。在这种情况下,您应该停止流水线,以便数据科学团队进行调查。团队可能会发布对流水线的修复或更新,以处理架构中的这些更改。架构偏差包括接收出乎意料的特征、未接收所有预期特征或接收具有出乎意料的值的特征。
- 数据值偏差:这些偏差是数据统计属性的重大变化,这意味着数据模式正在变化,您需要触发模型的重新训练才能捕获这些变化。
- 模型验证:此步骤发生在您使用新数据成功训练模型之后。您可以在模型投入生产环境之前对其进行评估和验证。此离线模型验证步骤包含以下操作。
- 在测试数据集上使用经过训练的模型生成评估指标值,以评估模型的预测质量。
- 将新训练的模型生成的评估指标值与当前模型(例如:生产模型、基准模型或其他业务需求模型)进行比较。在将新模型投入生产环境之前,请确保新模型的性能比当前模型更好。
- 确保模型的性能对于数据的各个细分来说是一致的。例如,新训练的客户流失模型的总体预测准确率可能比先前模型高,但每个客户区域的准确率值可能存在较大的偏差。
- 确保针对部署测试模型,包括测试基础架构与预测服务 API 的兼容性和一致性。
除了离线模型验证之外,新部署的模型在为在线流量提供预测之前会进行在线模型验证(在金丝雀部署或 A/B 测试设置中进行)。