使用 TensorFlow Extended、Vertex AI Pipelines 和 Cloud Build 的 MLOps 的架构

本文档介绍了使用 TensorFlow Extended (TFX) 库的机器学习 (ML) 系统的整体架构。此外,还介绍了如何使用 Cloud BuildVertex AI Pipelines 为机器学习系统设置持续集成 (CI)、持续交付 (CD) 和持续训练 (CT)。

在本文档中,“机器学习系统”和“机器学习流水线”这两个术语指的是机器学习模型训练流水线,而不是模型评分或预测流水线。

本文档面向希望调整其 CI/CD 做法,以在 Google Cloud上将机器学习解决方案移至生产环境,并希望帮助确保机器学习流水线的质量、可维护性和适应性的数据科学家和机器学习工程师。

本文档介绍了以下主题:

  • 了解机器学习中的 CI/CD 和自动化。
  • 设计使用 TFX 的集成式机器学习流水线。
  • 使用 Vertex AI Pipelines 编排和自动化机器学习流水线。
  • 为使用 Cloud Build 的机器学习流水线设置 CI/CD 系统。

MLOps

如需在生产环境中集成机器学习系统,您需要编排机器学习流水线中的步骤。此外,您还需要自动执行该流水线,以持续训练模型。如需试验新的想法和功能,您需要在流水线的新实现中采用 CI/CD 做法。以下部分简要介绍了机器学习中的 CI/CD 和 CT。

机器学习流水线自动化

在某些用例中,以手动方式处理训练、验证和部署机器学习模型便已足够。如果您的团队只管理为数不多、不会经常重新训练或更改的机器学习模型,则此手动方式是没有问题的。但事实上,模型在部署到真实环境中后经常会出现故障,因为它们不能适应环境中的动态变化或描述此类动态变化的数据。

为了使机器学习系统适应这些变化,您需要应用以下 MLOps 技术:

您可以自动执行机器学习生产流水线,以使用新数据重新训练模型。您可以根据需要、计划、新数据的可用性、模型性能下降情况、数据统计属性的重大变动或其他条件来触发流水线。

CI/CD 流水线与 CT 流水线的比较

新数据的可用性是重新训练机器学习模型的一个触发因素。机器学习流水线的新实现(包括新模型架构、特征工程和超参数)的可用性是重新执行机器学习流水线的另一个重要触发因素。机器学习流水线的这种新实现作为新版模型预测服务,例如使用 REST API 提供在线服务的微服务。这两种情况的区别如下:

  • 如果使用新数据训练新机器学习模型,则执行之前部署的 CT 流水线。不会部署任何新的流水线或组件;只在流水线的最后提供一个新的预测服务或新训练的模型。
  • 如果使用新实现训练新机器学习模型,则通过 CI/CD 流水线部署新的流水线。

为了快速部署新的机器学习流水线,您需要设置 CI/CD 流水线。当新的实现可用并获准用于各种环境(例如开发、测试、预演、预生产和生产环境)时,此流水线负责自动部署新的机器学习流水线和组件。

下图展示了 CI/CD 流水线与机器学习 CT 流水线之间的关系。

CI/CD 流水线的输出是 CT 流水线。

图 1. CI/CD 和机器学习 CT 流水线。

这些流水线的输出如下所示:

  • 如果提供新实现,则成功的 CI/CD 流水线将部署新的机器学习 CT 流水线。
  • 如果提供新数据,成功的 CT 流水线会训练新模型并将其部署为预测服务。

设计基于 TFX 的机器学习系统

以下部分介绍如何设计使用 TensorFlow Extended (TFX) 的集成式机器学习系统,为机器学习系统设置 CI/CD 流水线。虽然有多个框架可用于构建机器学习模型,但 TFX 是一个集成式机器学习平台,可用于开发和部署生产环境中的机器学习系统。 TFX 流水线是用于实现机器学习系统的一系列组件。此 TFX 流水线专用于完成可扩缩的高性能机器学习任务。这些任务包括建模、训练、验证、提供推断和管理部署。TFX 的主要库如下所示:

TFX 机器学习系统概览

下图展示了如何集成各种 TFX 库以组成机器学习系统。

基于 TFX 的机器学习系统的步骤。

图 2. 一个典型的基于 TFX 的机器学习系统。

图 2 显示了一个典型的基于 TFX 的机器学习系统。您可以手动或通过自动流水线完成以下步骤:

  1. 数据提取:第一步是从数据源中提取新的训练数据。此步骤的输出是用于训练和评估模型的数据文件。
  2. 数据验证:TFDV 会根据预期(原始)数据架构验证数据。数据架构是在系统部署之前的开发阶段创建和确定的。数据验证步骤会检测与数据分布和架构偏差相关的异常值。此步骤的输出是异常值(如果有),以及关于是否执行下游步骤的决策。
  3. 数据转换:验证数据后,通过使用 TFT 执行数据转换和特征工程操作来拆分和准备用于机器学习任务的数据。此步骤的输出是用于训练和评估模型的数据文件,通常转换为 TFRecords 格式。此外,生成的转换工件有助于构建模型输入,并在训练后将转换过程嵌入导出的已保存模型。
  4. 模型训练和调整:如需实现和训练机器学习模型,请将 tf.Keras API 与上一步生成的转换后的数据搭配使用。如需选择可生成最佳模型的参数设置,您可以使用 Keras 调谐器,这是一个 Keras 的超参数调优库。或者,您也可以使用其他服务,如 KatibVertex AI VizierVertex AI 中的超参数调谐器。此步骤的输出是一个用于评估的保存模型,以及另一个用于在线提供该模型预测的保存模型。
  5. 模型评估和验证:在训练步骤完成后导出模型时,将以测试数据集为基础使用 TFMA 评估该模型的质量。TFMA 会评估整体模型质量,并确定数据模型的哪些部分未执行。此评估有助于确保模型仅在符合质量标准的情况下才会推荐用于服务。这些标准可以加入面对各种数据子集(例如,受众特征和位置)性能表现尚可的评价,以及较以前的模型或基准模型性能有所提升的评价。此步骤的输出是一组性能指标,以及关于是否将该模型投入生产的决策。
  6. 提供模型以进行预测:新训练的模型经过验证后,会部署为微服务,以使用 TensorFlow Serving 提供在线预测。此步骤的输出是经过训练的机器学习模型的预测服务部署。您可以通过在模型注册表中存储经过训练的模型来替换此步骤。随后,将启动一个单独的模型,服务 CI/CD 流程。

有关如何使用 TFX 库的示例,请参阅官方的 TFX Keras 组件教程

Google Cloud上的 TFX 机器学习系统

在生产环境中,系统的组件必须在可靠的平台上大规模运行。下图展示了 TFX 机器学习流水线的每个步骤如何使用 Google Cloud上的代管式服务来大规模确保敏捷性、可靠性和性能。

 Google Cloud上基于 TFX 的机器学习系统的步骤。

图 3. Google Cloud上基于 TFX 的机器学习系统。

下表介绍了图 3 中所示的主要Google Cloud 服务:

步骤 TFX 库 Google Cloud 服务
数据提取和验证 TensorFlow Data Validation Dataflow
数据转换 TensorFlow Transform Dataflow
模型训练和微调 TensorFlow Vertex AI Training
模型评估和验证 TensorFlow Model Analysis Dataflow
使用模型进行预测 TensorFlow Serving Vertex AI Prediction
模型存储 不适用 Vertex AI Model Registry
  • Dataflow 是一种全代管式无服务器的可靠服务,可用于在 Google Cloud上大规模运行 Apache Beam 流水线。Dataflow 用于扩缩以下流程:
    • 计算统计信息以验证传入的数据。
    • 执行数据准备和转换。
    • 针对大型数据集评估模型。
    • 计算评估数据集各个方面的指标。
  • Cloud Storage 是用于二进制大型对象的高可用性和持久性存储产品。Cloud Storage 托管在机器学习流水线执行过程中生成的工件,其中包括:
    • 数据异常值(如果有)
    • 转换后的数据和工件
    • 导出(训练)的模型
    • 模型评估指标
  • Vertex AI Training 是一种用于大规模训练机器学习模型的托管式服务。您可以使用 TensorFlow、Scikit Learn、XGBoost 和 PyTorch 的预构建容器执行模型训练作业。您还可以使用自己的自定义容器运行任何框架。对于训练基础架构,您可以使用加速器和多个节点进行分布式训练。此外,还提供基于贝叶斯优化的可扩缩服务,用于超参数调节
  • Vertex AI Prediction 是一项托管式服务,可使用经过训练的模型和在线预测功能来运行批量预测,方法是使用 REST API 将模型部署为微服务。该服务还与 Vertex Explainable AIVertex AI Model Monitoring 集成,可以了解您的模型,并在出现特征或特征归因偏差和偏移时收到提醒。
  • 借助 Vertex AI Model Registry,您可以管理机器学习模型的生命周期。您可以对导入的模型进行版本控制并查看其性能指标。然后,您可以将模型用于批量预测,或使用 Vertex AI Prediction 部署您的模型以进行在线传送

使用 Vertex AI Pipelines 编排机器学习系统

本文档介绍了如何设计基于 TFX 的机器学习系统,以及如何在 Google Cloud上大规模运行系统的每个组件。不过,您需要一个编排器才能将该系统的各个组件连接在一起。编排器按顺序运行流水线,并根据定义的条件自动从一个步骤转移到另一个步骤。例如,如果评估指标达到预定义的阈值,则定义的条件可能是在模型评估步骤完成后执行模型提供步骤。这些步骤也可以并行运行以节省时间,例如,验证部署基础架构和评估模型。编排机器学习流水线在开发和生产阶段都非常有用:

  • 在开发阶段,编排可帮助数据科学家运行机器学习实验,无需手动执行每个步骤。
  • 在生产阶段,编排可帮助根据计划或特定触发条件自动执行机器学习流水线。

使用 Vertex AI Pipelines 进行机器学习

Vertex AI Pipelines 是一项 Google Cloud 代管式服务,可让您编排和自动执行机器学习流水线,其中流水线的每个组件都可以容器化在Google Cloud 或其他云平台上运行。生成的流水线参数和工件会自动存储在 Vertex ML Metadata 中,这支持沿袭和执行跟踪。Vertex AI Pipelines 服务包含以下内容:

  • 用于管理和跟踪实验、作业和运行的界面。
  • 用于安排多步机器学习工作流的引擎。
  • 用于定义和处理流水线和组件的 Python SDK
  • 与 Vertex ML Metadata 集成,以保存有关执行、模型、数据集和其他工件的信息。

以下是在 Vertex AI Pipelines 上执行的流水线:

  • 一组容器化机器学习任务或组件。流水线组件是打包为 Docker 映像的独立代码。 组件执行流水线中的一个步骤。它接受输入参数并生成工件。
  • 通过 Python 网域特定的语言 (DSL) 定义的机器学习任务的序列规范。通过将上游步骤的输出连接到下游步骤的输入,隐式定义工作流的拓扑。流水线定义中的步骤调用流水线中的组件。在复杂的流水线中,组件可以循环执行多次,也可以根据条件执行。
  • 一组流水线输入参数,参数值传递给流水线组件,包括过滤数据的标准以及流水线生成的工件的存储位置。

下图显示了 Vertex AI Pipelines 的示例图。

使用 Vertex AI Pipelines 的机器学习流水线图。

图 4:Vertex AI Pipelines 的示例图。

Kubeflow Pipelines SDK

借助 Kubeflow Pipelines SDK,您可以创建组件、定义组件编排并将其作为流水线运行。如需详细了解 Kubeflow 流水线组件,请参阅 Kubeflow 文档中的创建组件

您还可以使用 TFX 流水线 DSLTFX 组件。TFX 组件封装了元数据功能。驱动程序通过查询元数据存储空间为执行程序提供元数据。发布者接受执行程序的结果并将其存储在元数据中。您还可以实现与元数据具有相同集成的自定义组件。您可以使用 tfx.orchestration.experimental.KubeflowV2DagRunner 将 TFX 流水线编译到与 Vertex AI Pipelines 兼容的 YAML。然后,您可以将该文件提交到 Vertex AI Pipelines 以供执行。

下图显示了容器化任务如何在 Vertex AI Pipelines 中调用 BigQuery 作业、Vertex AI(分布式)训练作业和 Dataflow 作业等其他服务。

 Google Cloud上的 Vertex AI Pipelines 的架构。

图 5. Vertex AI Pipelines 调用Google Cloud 代管式服务。

通过 Vertex AI Pipelines,您可以通过执行所需的 Google Cloud 服务来编排和自动执行生产机器学习流水线。在图 5 中,Vertex ML Metadata 充当 Vertex AI Pipelines 的机器学习元数据存储区。

流水线组件不限于在Google Cloud上执行与 TFX 相关的服务。这些组件可以执行任何与数据和计算相关的服务,包括用于 SparkML 作业的 DataprocAutoML 和其他计算工作负载。

在 Vertex AI Pipelines 中将任务容器化具有以下优势:

  • 将执行环境与代码运行时分离开来。
  • 在开发环境和生产环境之间提供代码的可再现性,因为您在生产环境中测试的内容是相同的。
  • 隔离流水线中的每个组件;每个组件都可以拥有自己的运行时版本、不同的语言和不同的库。
  • 有助于构成复杂的流水线。
  • 与 Vertex ML Metadata 集成,从而实现流水线执行作业和工件的可追溯性和可再现性。

如需全面了解 Vertex AI Pipelines,请参阅可用的笔记本示例列表。

触发和安排 Vertex AI Pipelines

将流水线部署到生产环境时,您需要自动执行其执行,具体取决于机器学习流水线自动化部分中讨论的场景。

Vertex AI SDK 支持以编程方式操作流水线。google.cloud.aiplatform.PipelineJob 类包含用于创建实验以及部署和运行流水线的 API。因此,通过使用 SDK,您可以从其他服务调用 Vertex AI Pipelines,以实现基于调度器或事件的触发器。

Vertex AI Pipelines 触发器。

图 6. 流程图,演示了使用 Pub/Sub 和 Cloud Run 函数为 Vertex AI Pipelines 的多个触发器。

在图 6 中,您可以看到有关如何触发 Vertex AI Pipelines 服务以执行流水线的示例。流水线是使用 Cloud Run 函数中的 Vertex AI SDK 触发的。Cloud Run 函数本身是 Pub/Sub 的订阅者,基于新消息触发。任何想要触发流水线执行的服务都可以在相应的 Pub/Sub 主题上发布。上面的示例具有三项发布服务:

  • Cloud Scheduler 将按计划发布消息,因此会触发流水线。
  • Cloud Composer 会在较大的工作流(例如,在 BigQuery 注入新数据后触发训练流水线的数据注入工作流)中发布消息。
  • Cloud Logging 根据符合某些过滤条件的日志发布消息。您可以设置过滤器,以检测是否收到新数据,甚至是 Vertex AI Model Monitoring 服务生成的偏差和偏移提醒。

为 Google Cloud上的机器学习设置 CI/CD

通过 Vertex AI Pipelines,您可以编排涉及多个步骤的机器学习系统,包括数据预处理、模型训练和评估以及模型部署。在数据科学探索阶段,Vertex AI Pipelines 可帮助整个系统快速进行实验。在生产阶段,Vertex AI Pipelines 让您可以根据新数据自动执行流水线,以训练或重新训练机器学习模型。

CI/CD 架构

下图简要介绍了使用 Vertex AI Pipelines 的机器学习的 CI/CD。

使用 Vertex AI Pipelines 的机器学习流水线的 CI/CD 架构。

图 7:使用 Vertex AI Pipelines 的 CI/CD 简要概览。

此架构的核心是 Cloud Build。Cloud Build 可以从 Artifact RegistryGitHubBitbucket 导入源代码,然后根据您的规范执行构建,并生成 Docker 容器或 Python tar 文件等工件。

Cloud Build 按照构建配置文件 (cloudbuild.yaml) 中定义的一系列构建步骤执行构建。每个构建步骤都在 Docker 容器中运行。您可以使用 Cloud Build 提供的受支持的构建步骤,也可以编写自己的构建步骤

为机器学习系统执行所需 CI/CD 的 Cloud Build 流程可以手动执行,也可以通过自动构建触发器执行。每当有更改推送到构建作业的源代码时,触发器都会执行您配置的构建步骤。您可以将构建触发器设置为在更改源代码库时执行构建例程,或仅在更改符合特定标准时执行构建例程。

此外,您还可以设置为响应不同触发器而执行的构建例程(Cloud Build 配置文件)。例如,您可以设置构建例程,这些例程在提交到开发分支或主分支时触发。

您可以使用配置变量的替换内容在构建时定义环境变量。这些替代变量是从触发的构建中捕获的。这些变量包括 $COMMIT_SHA$REPO_NAME$BRANCH_NAME$TAG_NAME$REVISION_ID。其他非基于触发器的变量是 $PROJECT_ID$BUILD_ID。对于那些直到构建时才知道值的变量,或者使用不同的变量值重复使用现有构建请求的情况,替代变量很有用。

CI/CD 工作流用例

源代码库通常包含以下各项:

  • Python 流水线工作流源代码(其中定义了流水线工作流)
  • Python 流水线组件源代码以及数据验证、数据转换、模型训练、模型评估和模型提供等不同流水线组件的相应组件规范文件。
  • 创建 Docker 容器映像所需的 Dockerfile,每个流水线组件一个 Dockerfile。
  • Python 单元测试和集成测试,用于测试在组件和整个流水线中实现的方法。
  • 其他脚本,包括 cloudbuild.yaml 文件、测试触发器和流水线部署。
  • 配置文件(例如 settings.yaml 文件),包括流水线输入参数的配置。
  • 笔记本,用于对模型进行探索性数据分析、模型分析和交互式实验。

在以下示例中,当开发者将源代码从数据科学环境推送到开发分支时会触发构建例程。

构建步骤示例。

图 8. 由 Cloud Build 执行的构建步骤示例。

Cloud Build 通常执行以下构建步骤,如图 7 所示:

  1. 将源代码库复制到 /workspace 目录下的 Cloud Build 运行时环境。
  2. 运行单元测试和集成测试。
  3. 可选:使用 Pylint 等分析器运行静态代码分析。
  4. 如果测试通过,则为每个流水线组件构建一个 Docker 容器映像。这些映像使用 $COMMIT_SHA 参数进行标记。
  5. Docker 容器映像会上传到 Artifact Registry(如图 7 所示)。
  6. 使用已创建并标记的 Docker 容器映像更新每个 component.yaml 文件中的映像网址。
  7. 编译流水线工作流以生成 pipeline.json 文件。
  8. pipeline.json 文件上传到了 Artifact Registry。
  9. 可选:在集成测试或生产执行过程中使用参数值运行流水线。执行的流水线会生成一个新模型,还可能将该模型部署为 Vertex AI Prediction 上的 API。

如需查看可用于生产环境的端到端 MLOps 示例,其中包括使用 Cloud Build 的 CI/CD,请参阅 GitHub 上的 Vertex Pipelines 端到端示例

其他注意事项

在 Google Cloud上设置机器学习 CI/CD 架构时,请考虑以下事项:

  • 对于数据科学环境,您可以使用本地机器或 Vertex AI Workbench
  • 您可以将自动执行的 Cloud Build 流水线配置为仅在修改文档文件或实验笔记本等情况下跳过触发器
  • 您可以将用于集成和回归测试的流水线作为构建测试执行。在将流水线部署到目标环境之前,您可以使用 wait() 方法等待提交的流水线运行完成。
  • 除使用 Cloud Build 外,您还可以使用 Jenkins 等其他构建系统。Google Cloud Marketplace 上提供了现成的 Jenkins 部署。
  • 您可以将流水线配置为根据不同的触发条件自动部署到不同的环境(包括开发、测试和预演环境)。此外,您还可以手动部署到特定环境,例如预生产或生产环境(通常在获得发布批准后)。您可以针对不同的触发条件或目标环境设置多个构建例程。
  • 您可以将 Apache Airflow(一种常用的编排和调度框架)用于通用工作流,该工作流可以使用全代管式 Cloud Composer 服务运行。
  • 当您将新版模型部署到生产环境时,请将其部署为 Canary 版本,以了解它的性能(CPU、内存和磁盘使用情况)。在配置新模型以处理所有实时流量之前,您还可以执行 A/B 测试。配置新模型以处理 10% 到 20% 的实时流量。如果新模型的性能优于当前模型,您可以将新模型配置为处理所有流量。否则,服务系统会回滚到当前的模型。

后续步骤

贡献者

作者:

其他贡献者:Wyatt Gorman | HPC 解决方案经理