TFX 用户指南

简介

TFX 是一个基于 TensorFlow 的 Google 生产级机器学习 (ML) 平台。它提供了一个配置框架和共享库,用于集成定义、启动和监控机器学习系统所需的通用组件。

TFX 1.0

我们很高兴宣布 TFX 1.0.0 可用。这是 TFX 的第一个发布候选版本,它提供了稳定的公共 API 和工件。您可以放心,您的未来 TFX 管道在升级后将继续工作,前提是升级范围在该 RFC 中定义的兼容性范围内。

安装

Python PyPI

pip install tfx

每日构建包

TFX 还托管 Google Cloud 上 https://pypi-nightly.tensorflow.org 上的每日构建包。要安装最新的每日构建包,请使用以下命令

pip install --extra-index-url https://pypi-nightly.tensorflow.org/simple --pre tfx

这将安装 TFX 主要依赖项的每日构建包,例如 TensorFlow Model Analysis (TFMA)、TensorFlow Data Validation (TFDV)、TensorFlow Transform (TFT)、TFX Basic Shared Libraries (TFX-BSL)、ML Metadata (MLMD)。

关于 TFX

TFX 是一个用于在生产环境中构建和管理 ML 工作流程的平台。TFX 提供以下内容

  • 用于构建 ML 管道的工具包。TFX 管道允许您在多个平台上编排 ML 工作流程,例如:Apache Airflow、Apache Beam 和 Kubeflow Pipelines。

    了解有关 TFX 管道的更多信息.

  • 一组标准组件,您可以将其用作管道的一部分,或用作 ML 训练脚本的一部分。TFX 标准组件提供经过验证的功能,可帮助您轻松开始构建 ML 流程。

    了解有关 TFX 标准组件的更多信息.

  • 库,为许多标准组件提供基本功能。您可以使用 TFX 库将此功能添加到您自己的自定义组件中,或者单独使用它们。

    了解有关 TFX 库的更多信息.

TFX 是一个基于 TensorFlow 的 Google 生产级机器学习工具包。它提供了一个配置框架和共享库,用于集成定义、启动和监控机器学习系统所需的通用组件。

TFX 标准组件

TFX 管道是一系列组件,它们实现了一个专门为可扩展、高性能机器学习任务设计的 ML 管道。这包括建模、训练、服务推理以及将部署管理到在线、原生移动和 JavaScript 目标。

TFX 管道通常包含以下组件

  • ExampleGen 是管道的初始输入组件,它会摄取并可选地拆分输入数据集。

  • StatisticsGen 计算数据集的统计信息。

  • SchemaGen 检查统计信息并创建数据模式。

  • ExampleValidator 在数据集中查找异常和缺失值。

  • Transform 对数据集执行特征工程。

  • Trainer 训练模型。

  • Tuner 调优模型的超参数。

  • Evaluator 对训练结果进行深入分析,并帮助您验证导出的模型,确保它们“足够好”可以推送到生产环境。

  • InfraValidator 检查模型是否可以从基础设施中实际提供服务,并防止不良模型被推送。

  • Pusher 在服务基础设施上部署模型。

  • BulkInferrer 对模型执行批处理,其中包含未标记的推理请求。

此图说明了这些组件之间的数据流

Component Flow

TFX 库

TFX 包含库和管道组件。此图说明了 TFX 库和管道组件之间的关系

Libraries and Components

TFX 提供了几个 Python 包,这些包是用于创建管道组件的库。您将使用这些库来创建管道的组件,以便您的代码可以专注于管道中独特的方面。

TFX 库包括

  • TensorFlow 数据验证 (TFDV) 是一个用于分析和验证机器学习数据的库。它旨在高度可扩展,并与 TensorFlow 和 TFX 很好地协同工作。TFDV 包括

    • 可扩展的训练和测试数据摘要统计信息计算。
    • 与数据分布和统计信息的查看器集成,以及数据集对的方面比较(Facets)。
    • 自动数据模式生成,以描述对数据的期望,例如必需值、范围和词汇表。
    • 模式查看器,帮助您检查模式。
    • 异常检测,以识别异常,例如缺失特征、超出范围的值或错误的特征类型,仅举几例。
    • 异常查看器,以便您可以查看哪些特征存在异常,并了解更多信息以进行更正。
  • TensorFlow 变换 (TFT) 是一个用于使用 TensorFlow 预处理数据的库。TensorFlow 变换对于需要全通的数据很有用,例如

    • 通过均值和标准差对输入值进行归一化。
    • 通过对所有输入值生成词汇表来将字符串转换为整数。
    • 通过根据观察到的数据分布将浮点数分配到桶中来将浮点数转换为整数。
  • TensorFlow 用于使用 TFX 训练模型。它会摄取训练数据和建模代码,并创建一个 SavedModel 结果。它还集成了由 TensorFlow 变换创建的特征工程管道,用于预处理输入数据。

    KerasTuner 用于调优模型的超参数。

  • TensorFlow 模型分析 (TFMA) 是一个用于评估 TensorFlow 模型的库。它与 TensorFlow 一起使用来创建 EvalSavedModel,它成为其分析的基础。它允许用户使用其训练器中定义的相同指标,以分布式方式对大量数据评估其模型。这些指标可以在数据的不同切片上计算,并在 Jupyter 笔记本中可视化。

  • TensorFlow 元数据 (TFMD) 为元数据提供标准表示,这些元数据在使用 TensorFlow 训练机器学习模型时很有用。元数据可以手动生成或在输入数据分析期间自动生成,并且可以用于数据验证、探索和转换。元数据序列化格式包括

    • 描述表格数据的模式(例如,tf.Examples)。
    • 对这些数据集的摘要统计信息的集合。
  • ML 元数据 (MLMD) 是一个用于记录和检索与 ML 开发人员和数据科学家工作流程相关的元数据的库。元数据通常使用 TFMD 表示。MLMD 使用 SQL-LiteMySQL 和其他类似数据存储来管理持久性。

支持技术

必需

  • Apache Beam 是一个开源的统一模型,用于定义批处理和流式数据并行处理管道。TFX 使用 Apache Beam 来实现数据并行管道。然后,管道由 Beam 支持的分布式处理后端之一执行,这些后端包括 Apache Flink、Apache Spark、Google Cloud Dataflow 等。

可选

诸如 Apache Airflow 和 Kubeflow 之类的编排器使配置、操作、监控和维护 ML 管道变得更加容易。

  • Apache Airflow 是一个平台,用于以编程方式编写、调度和监控工作流。TFX 使用 Airflow 将工作流编写为任务的有向无环图 (DAG)。Airflow 调度程序在遵循指定依赖项的同时,在多个工作程序上执行任务。丰富的命令行实用程序使对 DAG 执行复杂手术变得轻而易举。丰富的用户界面使可视化生产环境中运行的管道、监控进度以及在需要时排查问题变得容易。当工作流定义为代码时,它们变得更易于维护、版本化、测试和协作。

  • Kubeflow 专注于使机器学习 (ML) 工作流在 Kubernetes 上的部署变得简单、可移植和可扩展。Kubeflow 的目标不是重新创建其他服务,而是提供一种直接的方法,将最优秀的开源 ML 系统部署到不同的基础设施中。 Kubeflow Pipelines 允许在 Kubeflow 上组合和执行可重复的工作流,并与实验和基于笔记本的体验集成。Kubeflow Pipelines 在 Kubernetes 上的服务包括托管的元数据存储、基于容器的编排引擎、笔记本服务器和 UI,以帮助用户大规模开发、运行和管理复杂的 ML 管道。Kubeflow Pipelines SDK 允许以编程方式创建和共享组件以及组合管道。

可移植性和互操作性

TFX 旨在可移植到多个环境和编排框架,包括 Apache AirflowApache BeamKubeflow。它还可以移植到不同的计算平台,包括内部部署和云平台,例如 Google Cloud Platform (GCP)。特别是,TFX 与多个托管 GCP 服务互操作,例如 Cloud AI Platform 用于 训练和预测,以及 Cloud Dataflow 用于 ML 生命周期其他几个方面的分布式数据处理。

模型与 SavedModel

模型

模型是训练过程的输出。它是训练过程中学习到的权重的序列化记录。这些权重随后可用于计算新输入示例的预测。对于 TFX 和 TensorFlow,'模型' 指的是包含在该点之前学习到的权重的检查点。

请注意,'模型' 也可能指的是 TensorFlow 计算图的定义(即 Python 文件),它表示如何计算预测。根据上下文,这两个含义可以互换使用。

SavedModel

  • 什么是 SavedModel:TensorFlow 模型的通用、语言中立、封闭、可恢复的序列化。
  • 为什么它很重要:它使更高级别的系统能够使用单个抽象来生成、转换和使用 TensorFlow 模型。

SavedModel 是在生产环境中提供 TensorFlow 模型或导出经过训练的模型以供原生移动或 JavaScript 应用程序使用的推荐序列化格式。例如,要将模型转换为用于进行预测的 REST 服务,您可以将模型序列化为 SavedModel,并使用 TensorFlow Serving 提供服务。有关更多信息,请参阅 提供 TensorFlow 模型服务

模式

一些 TFX 组件使用输入数据的描述,称为模式。模式是 schema.proto 的实例。模式是一种 协议缓冲区,通常称为“protobuf”。模式可以指定特征值的类型、特征是否必须存在于所有示例中、允许的值范围以及其他属性。使用 TensorFlow 数据验证 (TFDV) 的好处之一是,它会通过从训练数据推断类型、类别和范围来自动生成模式。

以下是模式 protobuf 的摘录

...
feature {
  name: "age"
  value_count {
    min: 1
    max: 1
  }
  type: FLOAT
  presence {
    min_fraction: 1
    min_count: 1
  }
}
feature {
  name: "capital-gain"
  value_count {
    min: 1
    max: 1
  }
  type: FLOAT
  presence {
    min_fraction: 1
    min_count: 1
  }
}
...

以下组件使用模式

  • TensorFlow 数据验证
  • TensorFlow 变换

在典型的 TFX 管道中,TensorFlow 数据验证会生成一个模式,该模式会被其他组件使用。

使用 TFX 进行开发

TFX 为机器学习项目的每个阶段提供了一个强大的平台,从本地机器上的研究、实验和开发到部署。为了避免代码重复并消除潜在的 训练/服务偏差,强烈建议您为模型训练和已训练模型的部署实现 TFX 管道,并使用 转换 组件,这些组件利用 TensorFlow 转换 库进行训练和推理。通过这样做,您将始终如一地使用相同的预处理和分析代码,并避免训练数据和生产中提供给已训练模型的数据之间的差异,以及从一次编写该代码中获益。

数据探索、可视化和清理

Data Exploration, Visualization, and Cleaning

TFX 管道通常从 ExampleGen 组件开始,该组件接受输入数据并将其格式化为 tf.Examples。通常,这在数据被拆分为训练和评估数据集之后完成,因此实际上有两个 ExampleGen 组件的副本,每个训练和评估一个。这通常紧随其后的是 StatisticsGen 组件和 SchemaGen 组件,它们将检查您的数据并推断数据模式和统计信息。模式和统计信息将被 ExampleValidator 组件使用,该组件将查找数据中的异常、缺失值和不正确的数据类型。所有这些组件都利用了 TensorFlow 数据验证 库的功能。

TensorFlow 数据验证 (TFDV) 是在对数据集进行初始探索、可视化和清理时的一个宝贵工具。TFDV 检查您的数据并推断数据类型、类别和范围,然后自动帮助识别异常和缺失值。它还提供可视化工具,可以帮助您检查和理解您的数据集。在您的管道完成之后,您可以从 MLMD 中读取元数据,并在 Jupyter 笔记本中使用 TFDV 的可视化工具来分析您的数据。

在您完成初始模型训练和部署之后,TFDV 可用于监控来自推理请求到已部署模型的新数据,并查找异常和/或漂移。这对于随着时间的推移由于趋势或季节性而发生变化的时间序列数据特别有用,并且可以帮助告知何时存在数据问题或何时需要对模型进行重新训练以使用新数据。

数据可视化

在您完成数据在使用 TFDV 的管道部分(通常是 StatisticsGen、SchemaGen 和 ExampleValidator)中的第一次运行之后,您可以在 Jupyter 风格的笔记本中可视化结果。对于其他运行,您可以比较这些结果,并在进行调整时,直到您的数据对您的模型和应用程序来说是最佳的。

您将首先查询 ML 元数据 (MLMD) 以找到这些组件执行结果的位置,然后使用 TFDV 中的可视化支持 API 在笔记本中创建可视化。这包括 tfdv.load_statistics()tfdv.visualize_statistics() 使用此可视化,您可以更好地了解数据集的特征,并在必要时根据需要进行修改。

开发和训练模型

Feature Engineering

典型的 TFX 管道将包括一个 转换 组件,该组件将通过利用 TensorFlow 转换 (TFT) 库的功能来执行特征工程。转换组件使用 SchemaGen 组件创建的模式,并应用 数据转换 来创建、组合和转换将用于训练模型的特征。如果存在缺失值或类型转换的可能性,则应在转换组件中完成缺失值的清理和类型的转换,因为这些可能性也可能存在于发送到推理请求的数据中。 在 TFX 中设计用于训练的 TensorFlow 代码时,有一些重要的注意事项

Modeling and Training

转换组件的结果是一个 SavedModel,它将在 TensorFlow 中的建模代码中导入和使用,在 Trainer 组件期间。此 SavedModel 包含在转换组件中创建的所有数据工程转换,以便在训练和推理期间使用完全相同的代码执行相同的转换。使用建模代码(包括来自转换组件的 SavedModel),您可以使用训练和评估数据并训练您的模型。

在使用基于 Estimator 的模型时,建模代码的最后一部分应将您的模型保存为 SavedModel 和 EvalSavedModel。保存为 EvalSavedModel 可确保在评估期间也提供训练时使用的指标(请注意,这对于基于 keras 的模型不是必需的)。保存 EvalSavedModel 需要您在 Trainer 组件中导入 TensorFlow 模型分析 (TFMA) 库。

import tensorflow_model_analysis as tfma
...

tfma.export.export_eval_savedmodel(
        estimator=estimator,
        export_dir_base=eval_model_dir,
        eval_input_receiver_fn=receiver_fn)

可以在 Trainer 之前添加一个可选的 Tuner 组件来调整模型的超参数(例如,层数)。对于给定的模型和超参数搜索空间,调整算法将根据目标找到最佳超参数。

分析和理解模型性能

Model Analysis

在完成初始模型开发和训练之后,重要的是分析并真正理解模型的性能。典型的 TFX 管道将包括一个 Evaluator 组件,该组件利用 TensorFlow 模型分析 (TFMA) 库的功能,该库为开发的这一阶段提供了强大的工具集。Evaluator 组件使用您上面导出的模型,并允许您指定一个 tfma.SlicingSpec 列表,您可以在可视化和分析模型性能时使用这些列表。每个 SlicingSpec 定义了您想要检查的训练数据的切片,例如分类特征的特定类别或数值特征的特定范围。

例如,这对于尝试了解模型对客户不同细分的性能非常重要,这些细分可以按年度购买、地理数据、年龄组或性别进行细分。这对于具有长尾的数据集尤其重要,在这些数据集中,主导组的性能可能会掩盖对重要但较小组的不可接受的性能。例如,您的模型可能对普通员工表现良好,但对管理人员表现糟糕,而您可能需要知道这一点。

模型分析和可视化

在您完成数据在训练模型和运行 Evaluator 组件(它利用 TFMA)对训练结果进行第一次运行之后,您可以在 Jupyter 风格的笔记本中可视化结果。对于其他运行,您可以比较这些结果,并在进行调整时,直到您的结果对您的模型和应用程序来说是最佳的。

您将首先查询 ML 元数据 (MLMD) 以找到这些组件执行结果的位置,然后使用 TFMA 中的可视化支持 API 在笔记本中创建可视化。这包括 tfma.load_eval_resultstfma.view.render_slicing_metrics 使用此可视化,您可以更好地了解模型的特征,并在必要时根据需要进行修改。

验证模型性能

作为分析模型性能的一部分,您可能希望根据基线(例如当前正在服务的模型)验证性能。模型验证是通过将候选模型和基线模型都传递给 Evaluator 组件来执行的。Evaluator 计算候选模型和基线模型的指标(例如 AUC、损失),以及相应的差异指标集。然后可以应用阈值并用于控制将模型推送到生产环境中。

验证模型是否可以服务

Infra Validation

在部署已训练的模型之前,您可能希望验证模型是否真的可以在服务基础设施中提供服务。这在生产环境中尤其重要,以确保新发布的模型不会阻止系统提供预测。 InfraValidator 组件将在沙盒环境中对您的模型进行金丝雀部署,并可选地发送实际请求以检查您的模型是否正常工作。

部署目标

一旦您开发并训练了您满意的模型,现在是时候将其部署到一个或多个部署目标,这些目标将接收推理请求。TFX 支持部署到三类部署目标。已训练的模型已导出为 SavedModels,可以部署到所有这些部署目标中的任何一个或全部。

Component Flow

推理:TensorFlow Serving

TensorFlow Serving (TFS) 是一个灵活、高性能的机器学习模型服务系统,专为生产环境而设计。它使用 SavedModel,并通过 REST 或 gRPC 接口接受推理请求。它作为一组进程在多个网络服务器上运行,使用多种高级架构来处理同步和分布式计算。有关开发和部署 TFS 解决方案的更多信息,请参阅 TFS 文档

在典型的管道中,已在 Trainer 组件中训练的 SavedModel 将首先在 InfraValidator 组件中进行基础设施验证。InfraValidator 启动一个金丝雀 TFS 模型服务器来实际服务 SavedModel。如果验证通过,Pusher 组件将最终将 SavedModel 部署到您的 TFS 基础设施。这包括处理多个版本和模型更新。

在原生移动和物联网应用程序中进行推理:TensorFlow Lite

TensorFlow Lite 是一套工具,专门帮助开发人员在原生移动和物联网应用程序中使用其已训练的 TensorFlow 模型。它使用与 TensorFlow Serving 相同的 SavedModels,并应用量化和修剪等优化来优化结果模型的大小和性能,以应对在移动和物联网设备上运行的挑战。有关使用 TensorFlow Lite 的更多信息,请参阅 TensorFlow Lite 文档。

在 JavaScript 中进行推理:TensorFlow JS

TensorFlow JS 是一个 JavaScript 库,用于在浏览器和 Node.js 上训练和部署 ML 模型。它使用与 TensorFlow Serving 和 TensorFlow Lite 相同的 SavedModels,并将它们转换为 TensorFlow.js Web 格式。有关使用 TensorFlow JS 的更多详细信息,请参阅 TensorFlow JS 文档。

使用 Airflow 创建 TFX 管道

有关详细信息,请查看 airflow 工作坊

使用 Kubeflow 创建 TFX 管道

设置

Kubeflow 需要 Kubernetes 集群才能大规模运行管道。请参阅 Kubeflow 部署指南,该指南将指导您了解 部署 Kubeflow 集群 的选项。

配置和运行 TFX 管道

请按照 TFX on Cloud AI Platform Pipeline 教程 在 Kubeflow 上运行 TFX 示例管道。TFX 组件已容器化以组成 Kubeflow 管道,该示例说明了配置管道以读取大型公共数据集并在云中大规模执行训练和数据处理步骤的能力。

用于管道操作的命令行界面

TFX 提供了一个统一的 CLI,它可以帮助您执行各种管道操作,例如在各种编排器(包括 Apache Airflow、Apache Beam 和 Kubeflow)上创建、更新、运行、列出和删除管道。有关详细信息,请按照 这些说明 进行操作。