简介
本教程旨在介绍 TensorFlow Extended (TFX) 并帮助您学习如何创建自己的机器学习流水线。它在本地运行,并在 Jupyter 笔记本中显示与 TFX 和 TensorBoard 集成以及与 TFX 互动的情况。
您将遵循典型的机器学习开发流程,即从检查数据集开始,最后得到一个完整且有效的流水线。在此过程中,您会探索用于调试和更新流水线以及衡量性能的方法。
了解详情
有关详情,请参阅 TFX 用户指南。
分步说明
您需要按照典型的机器学习开发流程逐步创建流水线。具体步骤如下所示:
前提条件
- 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 的图表视图
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 步:深入剖析数据
所有数据科学或机器学习项目的第一项任务都是理解和清理数据。
- 理解每项特征的数据类型
- 寻找异常情况和缺失的值
- 理解每项特征的分布情况
组件
- ExampleGen:提取和拆分输入数据集。
- StatisticsGen:计算数据集的统计信息。
- SchemaGen:检查统计信息和创建数据架构。
- ExampleValidator:查找数据集中的异常情况和缺失的值。
在编辑器中:
- 在 ~/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.py
和taxi_utils.py
中标有Step 4
的行取消注释 - 花点时间查看取消注释的代码
在浏览器中:
- 返回 Airflow 中的 DAG 列表页面
- 点击出租车 DAG 右侧的刷新按钮
- 此时,您应该会看到“DAG [出租车] 现已刷新”
- 触发出租车
- 等待流水线处理完毕
- 全部变为深绿色
- 使用右侧的刷新按钮进行刷新或刷新页面
回到 Jupyter:
返回浏览器中的 Jupyter 标签页。
- 打开 step4.ipynb
- 按照笔记本中的说明操作
更高级的示例
本教程展示的示例仅供入门指导。如需获取更高级的示例,请参阅 TensorFlow 转换 Colab。
第 5 步:训练
使用完善、整洁且经过转换的数据训练 TensorFlow 模型。
- 包含第 4 步中的转换,以便一致地应用这些转换
- 将结果保存为 SavedModel 以便投入生产环境
- 使用 TensorBoard 可视化和探索训练过程
- 还要保存 EvalSavedModel 以分析模型的性能
组件
在编辑器中:
- 在 ~/airflow/dags 中,对
taxi_pipeline.py
和taxi_utils.py
中标有Step 5
的行取消注释 - 花点时间查看取消注释的代码
在浏览器中:
- 返回 Airflow 中的 DAG 列表页面
- 点击出租车 DAG 右侧的刷新按钮
- 此时,您应该会看到“DAG [出租车] 现已刷新”
- 触发出租车
- 等待流水线处理完毕
- 全部变为深绿色
- 使用右侧的刷新按钮进行刷新或刷新页面
回到 Jupyter:
返回浏览器中的 Jupyter 标签页。
- 打开 step5.ipynb
- 按照笔记本中的说明操作
更高级的示例
本教程展示的示例仅供入门指导。如需获取更高级的示例,请参阅 TensorBoard 教程。
第 6 步:分析模型性能
不仅仅要了解顶级指标。
- 用户只会体验到模型的查询性能
- 顶级指标可能会掩盖部分数据性能不佳的问题
- 模型的公平性十分重要
- 通常,用户或数据的关键子集非常重要,并且可能会很小
- 在重要但不常见的条件下的性能
- 针对关键受众群体(例如社交影响力人物)的性能
组件
- Evaluator 会深入分析训练结果。
在编辑器中:
- 在 ~/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 应用中运行模型。