TFX 开发者教程

Python PyPI

简介

本教程旨在介绍 TensorFlow Extended (TFX) 并帮助您学习如何创建自己的机器学习流水线。它在本地运行,并在 Jupyter 笔记本中显示与 TFX 和 TensorBoard 集成以及与 TFX 互动的情况。

您将遵循典型的机器学习开发流程,即从检查数据集开始,最后得到一个完整且有效的流水线。在此过程中,您会探索用于调试和更新流水线以及衡量性能的方法。

了解详情

有关详情,请参阅 TFX 用户指南

分步说明

您需要按照典型的机器学习开发流程逐步创建流水线。具体步骤如下所示:

  1. 设置环境
  2. 创建初始流水线框架
  3. 深入剖析数据
  4. 特征工程
  5. 训练
  6. 分析模型性能
  7. 为投入生产环境做好准备

前提条件

  • Linux/MacOS
  • Virtualenv
  • Python 3.5 及更高版本
  • Git

所需的软件包

根据您的环境,您可能需要安装多个软件包:

sudo apt-get install python-dev  \
        build-essential libssl-dev libffi-dev \
        libxml2-dev libxslt1-dev zlib1g-dev \
        python-pip
    

MacOS 环境

MacOS 在运行 Airflow 时有时无法分叉线程,具体取决于配置。要避免这类问题,您需要修改 ~/.bash_profile 文件,并将以下行添加到该文件末尾:

export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
    

教程资料

本教程的代码位于:https://github.com/tensorflow/tfx/tree/master/tfx/examples/workshop

代码按照您所执行的步骤进行划分,因此对于每个步骤,您都会获得所需的代码以及关于使用相应代码执行哪些操作的说明。

教程文件包含练习和练习答案,可以帮助您解决遇到的困难。

练习

  • taxi_pipeline.py
  • taxi_utils.py
  • taxi DAG

答案

  • taxi_pipeline_solution.py
  • taxi_utils_solution.py
  • taxi_solution DAG

将执行的操作

您将学习如何使用 TFX 创建机器学习流水线

  • 当您要部署生产型机器学习应用时,适合使用 TFX 流水线
  • 当数据集很大时,适合使用 TFX 流水线
  • 当训练/应用一致性很重要时,适合使用 TFX 流水线
  • 当推断版本管理很重要时,适合使用 TFX 流水线
  • Google 会在生产型机器学习过程中使用 TFX 流水线

您将遵循典型的机器学习开发流程

  • 提取、理解并清理数据
  • 特征工程
  • 训练
  • 分析模型性能
  • 循序渐进地改进
  • 为投入生产环境做好准备

为每个步骤添加代码

本教程将所有代码都放入了文件中,但步骤 3-7 的所有代码都用内联注释进行了注释和标记。内联注释可以标识代码行对应的步骤。例如,第 3 步的代码标有注释 # Step 3

您将为每个步骤添加的代码通常分为 3 个代码部分:

  • 导入
  • DAG 配置
  • 从 create_pipeline() 调用返回的列表
  • taxi_utils.py 中的支持代码

在学习本教程时,您需要取消注释您当前所执行的教程步骤对应的代码行。这样会添加相应步骤的代码,并更新流水线。在执行此操作时,我们强烈建议您检查要取消注释的代码

芝加哥出租车数据集

出租车 芝加哥出租车

您将使用芝加哥市发布的出租车行程数据集

您可以在 Google BigQuery详细了解此数据集,并在 BigQuery 界面中探索完整的数据集。

模型目标 - 二元分类

客户给的小费是多于还是少于 20%?

第 1 步:设置环境

设置脚本 (setup_demo.sh) 会安装 TFX 和 Airflow,并配置 Airflow 以使其易于在本教程中使用。

在 Shell 中:

cd
    virtualenv -p python3 tfx-env
    source ~/tfx-env/bin/activate
    mkdir tfx; cd tfx

    pip install tensorflow==1.13.1
    pip install tfx==0.13.0
    git clone https://github.com/tensorflow/tfx.git
    cd ~/tfx/tfx/tfx/examples/workshop/setup
    ./setup_demo.sh
    

您应该查看 setup_demo.sh 以了解其会执行哪些操作。

第 2 步:创建初始流水线框架

Hello World

在 Shell 中:

# Open a new terminal window, and in that window ...
    source ~/tfx-env/bin/activate
    airflow webserver -p 8080

    # Open another new terminal window, and in that window ...
    source ~/tfx-env/bin/activate
    airflow scheduler

    # Open yet another new terminal window, and in that window ...
    # Assuming that you've cloned the TFX repo into ~/tfx
    source ~/tfx-env/bin/activate
    cd ~/tfx/tfx/tfx/examples/workshop/notebooks
    jupyter notebook
    

您在此步骤中启动了 Jupyter 笔记本。稍后,您会在此文件夹中运行笔记本。

在浏览器中:

  • 打开浏览器,然后转到 http://127.0.0.1:8080

问题排查

如果您在网络浏览器中加载 Airflow 控制台时遇到任何问题,或在运行 airflow webserver 时出现任何错误,则可能是因为您在端口 8080 中运行了其他应用。这是 Airflow 的默认端口,但您可以将其更改为任何其他未使用的用户端口。例如,要在端口 7070 中运行 Airflow,您可以运行以下命令:

airflow webserver -p 7070
    

DAG 视图按钮

DAG 按钮

  • 使用左侧的按钮可启用出租车 DAG
  • 做出更改后,使用右侧的按钮可刷新出租车 DAG
  • 使用右侧的按钮可触发出租车 DAG
  • 点击出租车可转到出租车 DAG 的图表视图

图表刷新按钮

Airflow CLI

您还可以使用 Airflow CLI 启用和触发 DAG:

# enable/disable
    airflow unpause <your DAG>
    airflow pause <your DAG>

    # trigger
    airflow trigger_dag <your DAG>
    

等待流水线处理完毕

在 DAG 视图中触发流水线后,您可以观察流水线完成处理过程。当各个组件运行时,DAG 图表中组件的轮廓颜色会更改,以显示相应状态。当组件处理完毕后,其轮廓会变为深绿色,表明其已处理完毕。

到目前为止,流水线中只有 CsvExampleGen 组件,因此您需要等待其变为深绿色(约 1 分钟)。

设置完毕

第 3 步:深入剖析数据

所有数据科学或机器学习项目的第一项任务都是理解和清理数据。

  • 理解每项特征的数据类型
  • 寻找异常情况和缺失的值
  • 理解每项特征的分布情况

组件

数据组件 数据组件

在编辑器中:

  • 在 ~/airflow/dags 中,对 taxi_pipeline.py 中标有 Step 3 的行取消注释
  • 花点时间查看取消注释的代码

在浏览器中:

  • 点击左上角的“DAG”链接,返回 Airflow 中的 DAG 列表页面
  • 点击出租车 DAG 右侧的刷新按钮
    • 此时,您应该会看到“DAG [出租车] 现已刷新”
  • 触发出租车
  • 等待流水线处理完毕
    • 全部变为深绿色
    • 使用右侧的刷新按钮进行刷新或刷新页面

深入剖析数据

回到 Jupyter:

之前,您运行了 jupyter notebook,它在浏览器标签页中打开了一个 Jupyter 会话。现在返回浏览器中的这一标签页。

  • 打开 step3.ipynb
  • 按照笔记本中的说明操作

深入剖析数据

更高级的示例

本教程展示的示例仅供入门指导。如需获取更高级的示例,请参阅 TensorFlow 数据验证 Colab

要详细了解如何使用 TFDV 探索和验证数据集,请参阅 tensorflow.org 中的示例

第 4 步:特征工程

您可以通过特征工程提高数据的预测质量以及/或者降低维度。

  • 特征组合
  • 词汇表
  • 嵌入
  • PCA
  • 分类编码

使用 TFX 的好处之一是,您只需编写一次转换代码,生成的转换在训练和模型应用之间会保持一致。

组件

转换

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

在编辑器中:

  • 在 ~/airflow/dags 中,对 taxi_pipeline.pytaxi_utils.py 中标有 Step 4 的行取消注释
  • 花点时间查看取消注释的代码

在浏览器中:

  • 返回 Airflow 中的 DAG 列表页面
  • 点击出租车 DAG 右侧的刷新按钮
    • 此时,您应该会看到“DAG [出租车] 现已刷新”
  • 触发出租车
  • 等待流水线处理完毕
    • 全部变为深绿色
    • 使用右侧的刷新按钮进行刷新或刷新页面

特征工程

回到 Jupyter:

返回浏览器中的 Jupyter 标签页。

  • 打开 step4.ipynb
  • 按照笔记本中的说明操作

更高级的示例

本教程展示的示例仅供入门指导。如需获取更高级的示例,请参阅 TensorFlow 转换 Colab

第 5 步:训练

使用完善、整洁且经过转换的数据训练 TensorFlow 模型。

  • 包含第 4 步中的转换,以便一致地应用这些转换
  • 将结果保存为 SavedModel 以便投入生产环境
  • 使用 TensorBoard 可视化和探索训练过程
  • 还要保存 EvalSavedModel 以分析模型的性能

组件

在编辑器中:

  • 在 ~/airflow/dags 中,对 taxi_pipeline.pytaxi_utils.py 中标有 Step 5 的行取消注释
  • 花点时间查看取消注释的代码

在浏览器中:

  • 返回 Airflow 中的 DAG 列表页面
  • 点击出租车 DAG 右侧的刷新按钮
    • 此时,您应该会看到“DAG [出租车] 现已刷新”
  • 触发出租车
  • 等待流水线处理完毕
    • 全部变为深绿色
    • 使用右侧的刷新按钮进行刷新或刷新页面

训练模型

回到 Jupyter:

返回浏览器中的 Jupyter 标签页。

  • 打开 step5.ipynb
  • 按照笔记本中的说明操作

训练模型

更高级的示例

本教程展示的示例仅供入门指导。如需获取更高级的示例,请参阅 TensorBoard 教程

第 6 步:分析模型性能

不仅仅要了解顶级指标。

  • 用户只会体验到模型的查询性能
  • 顶级指标可能会掩盖部分数据性能不佳的问题
  • 模型的公平性十分重要
  • 通常,用户或数据的关键子集非常重要,并且可能会很小
    • 在重要但不常见的条件下的性能
    • 针对关键受众群体(例如社交影响力人物)的性能

组件

在编辑器中:

  • 在 ~/airflow/dags 中,对两个 taxi_pipeline.py 中标有 Step 6 的行取消注释
  • 花点时间查看取消注释的代码

在浏览器中:

  • 返回 Airflow 中的 DAG 列表页面
  • 点击出租车 DAG 右侧的刷新按钮
    • 此时,您应该会看到“DAG [出租车] 现已刷新”
  • 触发出租车
  • 等待流水线处理完毕
    • 全部变为深绿色
    • 使用右侧的刷新按钮进行刷新或刷新页面

分析模型性能

回到 Jupyter:

返回浏览器中的 Jupyter 标签页。

  • 打开 step6.ipynb
  • 按照笔记本中的说明操作

分析模型性能

更高级的示例

本教程展示的示例仅供入门指导。如需获取更高级的示例,请参阅 TFMA 芝加哥出租车教程

第 7 步:为投入生产环境做好准备

如果新模型已准备就绪,请进行相应设置。

  • 如果您要替换目前在生产环境中的模型,则首先要确保新模型的性能更优
  • ModelValidator 会说明 Pusher 组件模型是否有问题
  • Pusher 会将 SavedModel 部署到特定位置

部署目标会从特定位置接收新模型

  • TensorFlow Serving
  • TensorFlow Lite
  • TensorFlow JS
  • TensorFlow Hub

组件

  • ModelValidator 会确保模型“性能足够强大”,适合推送到生产环境。
  • Pusher 会将模型部署到应用基础架构。

在编辑器中:

  • 在 ~/airflow/dags 中,对两个 taxi_pipeline.py 中标有 Step 7 的行取消注释
  • 花点时间查看取消注释的代码

在浏览器中:

  • 返回 Airflow 中的 DAG 列表页面
  • 点击出租车 DAG 右侧的刷新按钮
    • 此时,您应该会看到“DAG [出租车] 现已刷新”
  • 触发出租车
  • 等待流水线处理完毕
    • 全部变为深绿色
    • 使用右侧的刷新按钮进行刷新或刷新页面

为投入生产环境做好准备

后续步骤

您现在已经训练并验证了您的模型,还在 ~/airflow/saved_models/taxi 目录下导出了 SavedModel 文件。您的模型现在可以投入生产环境了。您现在可以将模型部署到任何 TensorFlow 部署目的地,包括:

  • TensorFlow Serving,用于在服务器或服务器场中应用模型,并处理 REST 和/或 gRPC 推断请求。
  • TensorFlow Lite,用于将模型包含在 Android 或 iOS 原生移动应用中,或者 Raspberry Pi、IoT 或微控制器应用中。
  • TensorFlow.js,用于在网络浏览器或 Node.JS 应用中运行模型。