谷歌大佬谈 MLOps :机器学习中的持续交付和自动化流水线(上)

简介: 背景数据科学和机器学习正逐渐成为解决复杂现实问题以及在所有领域创造价值的核心功能。现在,有效运用机器学习技术的各种要素都已具备:

背景

数据科学和机器学习正逐渐成为解决复杂现实问题以及在所有领域创造价值的核心功能。现在,有效运用机器学习技术的各种要素都已具备:

  • 大型数据集
  • 经济实惠的计算资源(按需)
  • 适用于各种云平台的机器学习专用加速器
  • 不同机器学习研究领域(例如:计算机视觉、NLU 和 推荐系统)的快速发展。

因此,许多企业正在投资打造数据科学团队和机器学习功能,以开发出能够为用户带来商业价值的预测模型。


MLOps 简述

MLOps 是一种旨在统一机器学习系统开发 (Dev) 和机器学习系统运营 (Ops)的机器学习工程文化和实践。实施 MLOps 意味着您将在机器学习系统构建流程的所有步骤(包括:集成、测试、发布、部署和基础架构管理)中实现自动化和监控。

数据科学家可以在给定的相关训练数据集的情况下实现并训练一个机器学习模型,可在留出的离线数据集上实现出色的预测性能。但是,真正的挑战不是构建机器学习模型,而是构建集成的机器学习系统以及在生产环境中持续运行该系统。

在实际的机器学习系统中,只有一小部分是由机器学习代码组成的。所需的相关元素既庞大又复杂,如下图展示了机器学习系统的元素。

网络异常,图片无法展示
|


在此图中,系统的其余部分包括配置、自动化、数据收集、数据验证、测试和调试、资源管理、模型分析、过程和元数据管理、服务基础架构和监控。如需开发和运行类似的复杂系统,您可以将 DevOps 原则应用于机器学习系统 (MLOps)。

下面将介绍在为您的数据科学实践(例如 :ML 中的 CI、CD 和 CT)设置 MLOps 环境时,要考虑的概念。


DevOps 与 MLOps 的对比


DevOps 是开发和运行大规模软件系统的一种常见做法。这种做法具有诸多优势,例如:缩短开发周期、提高部署速度、实现可靠的发布。如需获得这些优势,您需要在软件系统开发中引入两个概念:

机器学习系统是一种软件系统,因此类似的做法有助于确保您能够可靠地大规模构建和运行机器学习系统。

但是,机器学习系统在以下方面与其他软件系统不同:

  • 团队技能:在机器学习项目中,团队通常包括数据科学家或机器学习研究人员,他们主要负责进行探索性数据分析、模型开发和实验。这些成员可能不是经验丰富的、能够构建生产级服务的软件工程师。
  • 开发:机器学习在本质上具有实验性。您应该尝试不同的特征、算法、建模技术和参数配置,以便尽快找到问题的最佳解决方案。您所面临的挑战在于跟踪哪些方案有效、哪些方案无效,并在最大程度提高代码重复使用率的同时维持可重现性。
  • 测试:测试机器学习系统比测试其他软件系统更复杂。除了典型的单元测试和集成测试之外,您还需要验证数据、评估经过训练的模型质量以及验证模型。
  • 部署:在机器学习系统中,部署不是将离线训练的机器学习模型部署为预测服务那样简单。机器学习系统可能会要求您部署多步骤流水线以自动重新训练和部署模型。此流水线会增加复杂性,并要求您自动执行部署之前由数据科学家手动执行的步骤,以训练和验证新模型。
  • 生产:机器学习模型的性能可能会下降,不仅是因为编码不理想,而且也因为数据在不断演变。换句话说,与传统的软件系统相比,模型可能会通过更多方式衰退,而您需要考虑这种降级现象。因此,您需要跟踪数据的概要统计信息并监控在线模型的性能,以便系统在值与预期不符时发送通知或回滚。

ML 和其他软件系统(在源代码控制的持续集成、单元测试、集成测试以及软件模块或包的持续交付等方面)类似,但是,在 ML 中,有一些显着的区别:

  • CI 不再仅仅测试和验证代码及组件,而且还会测试和验证数据、数据 schemas 和模型
  • CD 不再针对单个软件包或服务,而是一个系统(机器学习训练流水线),它应该会自动部署其他服务(模型预测服务)。
  • CT 是机器学习系统特有的一个新属性,它主要涉及自动化重新训练和服务模型。


机器学习生命周期的各个步骤

在任何机器学习项目中,定义业务用例并确定成功标准后,将机器学习模型交付给生产环境的过程涉及以下步骤。这些步骤可以手动完成,也可以由自动流水线完成。

  1. 数据提取:您可以为机器学习任务选择和集成来自各种数据源的相关数据。
  2. 数据分析:您可以执行探索性数据分析 (EDA) 以了解可用于构建机器学习模型的数据。此过程将产生以下结果:
  • 了解模型预期的数据 schema 和特性。
  • 识别模型所需的数据和特征工程。
  1. 数据准备:为机器学习任务准备数据。此准备工作涉及数据清理,即将数据拆分为训练集、验证集和测试集。您还可以将数据转换和特征工程应用于解决目标任务的模型。此步骤的输出是准备好的格式的数据拆分。
  2. 模型训练:数据科学家使用准备好的数据实现不同的算法,以训练各种机器学习模型。此外,您还需要对实现的算法进行超参数调节,以获得最佳机器学习模型。此步骤的输出是经过训练的模型。
  3. 模型评估:在预留的测试集上评估模型,以评估模型质量。此步骤的输出是一组用于评估模型质量的指标。
  4. 模型验证:模型已确定适合部署(它的预测性能优于特定基准)。
  5. 提供模型:经过验证的模型会部署到目标环境以提供预测。此部署可以是以下其中一项:
  • 具有 REST API 的微服务,可用于提供在线预测。
  • 边缘设备或移动设备的嵌入式模型。
  • 批量预测系统的一部分。
  1. 模型监控:监控模型预测性能,以便在机器学习过程中调用新的迭代。

这些步骤的自动化级别决定了机器学习过程的成熟度,成熟度反映了使用新数据训练新模型或者使用新实现训练新模型的速度


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 测试设置中进行)。


相关文章
|
8月前
|
人工智能 Kubernetes jenkins
容器化AI模型的持续集成与持续交付(CI/CD):自动化模型更新与部署
在前几篇文章中,我们探讨了容器化AI模型的部署、监控、弹性伸缩及安全防护。为加速模型迭代以适应新数据和业务需求,需实现容器化AI模型的持续集成与持续交付(CI/CD)。CI/CD通过自动化构建、测试和部署流程,提高模型更新速度和质量,降低部署风险,增强团队协作。使用Jenkins和Kubernetes可构建高效CI/CD流水线,自动化模型开发和部署,确保环境一致性并提升整体效率。
|
11月前
|
运维 Devops 持续交付
自动化运维的魔法:打造高效DevOps流水线
【10月更文挑战第34天】在数字化时代的浪潮中,DevOps成为企业追求敏捷、高效和稳定的关键。本文将通过一个真实案例,展示如何构建一个高效的DevOps流水线,实现从代码提交到部署的全自动化流程。我们将探讨流水线设计的哲学、工具选择以及面临的挑战,并分享实际的代码示例和操作步骤,帮助读者理解自动化运维的精髓。
249 2
|
8月前
|
机器学习/深度学习 数据采集 人工智能
容器化机器学习流水线:构建可复用的AI工作流
本文介绍了如何构建容器化的机器学习流水线,以提高AI模型开发和部署的效率与可重复性。首先,我们探讨了机器学习流水线的概念及其优势,包括自动化任务、确保一致性、简化协作和实现CI/CD。接着,详细说明了使用Kubeflow Pipelines在Kubernetes上构建流水线的步骤,涵盖安装、定义流水线、构建组件镜像及上传运行。容器化流水线不仅提升了环境一致性和可移植性,还通过资源隔离和扩展性支持更大规模的数据处理。
|
10月前
|
运维 监控 Devops
自动化运维实践:打造高效的DevOps流水线
在软件开发的快节奏中,自动化运维成为提升效率、确保质量的关键。本文将引导你理解自动化运维的价值,通过实际案例分享如何构建一个高效、可靠的DevOps流水线。我们将从持续集成(CI)开始,逐步深入到持续部署(CD),并展示代码示例来具体说明。准备好让你的运维工作飞跃式进步了吗?让我们开始吧!
|
12月前
|
运维 监控 Devops
自动化运维的魔法:打造高效DevOps流水线
【10月更文挑战第6天】 在现代软件开发的快节奏中,自动化运维成为提高效率、保障质量的重要手段。本文将带你了解如何构建高效的DevOps流水线,从持续集成到部署,再到监控和反馈,我们将一步步揭开自动化运维的神秘面纱。你将学习到如何通过代码和工具的结合,实现软件交付过程的自动化,以及如何通过这一流程提升团队的协作和响应速度。让我们开始探索自动化运维的奇妙之旅吧!
|
12月前
|
运维 jenkins 持续交付
自动化运维之路:构建高效CI/CD流水线
在软件开发的快节奏中,持续集成和持续部署(CI/CD)流水线是提升效率、保障质量的关键。本文将引导你理解CI/CD流水线的重要性,并手把手教你如何搭建一个高效的自动化运维系统。通过实际代码示例,我们将一步步实现从代码提交到自动测试、部署的全流程自动化,确保软件交付过程既快速又可靠。
|
持续交付 jenkins Devops
WPF与DevOps的完美邂逅:从Jenkins配置到自动化部署,全流程解析持续集成与持续交付的最佳实践
【8月更文挑战第31天】WPF与DevOps的结合开启了软件生命周期管理的新篇章。通过Jenkins等CI/CD工具,实现从代码提交到自动构建、测试及部署的全流程自动化。本文详细介绍了如何配置Jenkins来管理WPF项目的构建任务,确保每次代码提交都能触发自动化流程,提升开发效率和代码质量。这一方法不仅简化了开发流程,还加强了团队协作,是WPF开发者拥抱DevOps文化的理想指南。
256 1
|
运维 Devops jenkins
自动化运维:打造高效DevOps流水线
【8月更文挑战第44天】本文将通过深入浅出的方式,带你构建一个自动化的DevOps流水线,提升开发和部署效率。从基础概念到实际操作,我们一步步剖析如何实现代码提交、自动测试、构建、部署的全过程自动化。你将学会使用Jenkins、Git、Docker等工具,并结合Shell脚本编写,完成一个完整的自动化流程。文章末尾附有完整的示例代码,助你快速上手实践。
|
持续交付 jenkins C#
“WPF与DevOps深度融合:从Jenkins配置到自动化部署全流程解析,助你实现持续集成与持续交付的无缝衔接”
【8月更文挑战第31天】本文详细介绍如何在Windows Presentation Foundation(WPF)项目中应用DevOps实践,实现自动化部署与持续集成。通过具体代码示例和步骤指导,介绍选择Jenkins作为CI/CD工具,结合Git进行源码管理,配置构建任务、触发器、环境、构建步骤、测试及部署等环节,显著提升开发效率和代码质量。
248 0
|
持续交付 C# 敏捷开发
“敏捷之道:揭秘WPF项目中的快速迭代与持续交付——从需求管理到自动化测试,打造高效开发流程的全方位指南”
【8月更文挑战第31天】敏捷开发是一种注重快速迭代和持续交付的软件开发方法,通过短周期开发提高产品质量并快速响应变化。本文通过问题解答形式,探讨在Windows Presentation Foundation(WPF)项目中应用敏捷开发的最佳实践,涵盖需求管理、版本控制、自动化测试及持续集成等方面,并通过具体示例代码展示其实施过程,帮助团队提升代码质量和开发效率。
201 0