Path: blob/master/site/zh-cn/tfx/tutorials/serving/rest_simple.ipynb
25118 views
Copyright 2020 The TensorFlow Authors.
使用 TensorFlow Serving 训练和应用 TensorFlow 模型
警告:此笔记本只适合在 Google Colab 中运行。它会在系统上安装软件包,并且需要 root 访问权限。如果要在本地 Jupyter 笔记本中运行,请谨慎操作。
注:您现在可以在 Jupyter 风格的笔记本中运行此示例而无需进行设置!只需点击“在 Google Colab 中运行”
本指南将训练一个神经网络模型来分类运动鞋和衬衫等服装图像、保存训练的模型,然后使用 TensorFlow Serving 应用该模型。本指南的重点是 TensorFlow Serving,而不是 TensorFlow 中的建模和训练。有关侧重于建模和训练的完整示例,请参阅基本分类示例。
本指南使用 tf.keras,它是 TensorFlow 中用来构建和训练模型的高级 API。
创建模型
导入 Fashion MNIST 数据集
本指南使用 Fashion MNIST 数据集,该数据集包含 10 个类别的 70,000 个灰度图像。这些图像以低分辨率(28x28 像素)展示了单件衣物,如下所示:
![]() |
图 1. Fashion-MNIST 样本(由 Zalando 提供,MIT 许可)。 |
Fashion MNIST 旨在临时替代经典 MNIST 数据集,后者常被用作计算机视觉机器学习程序的“Hello, World”。您可以直接从 TensorFlow 访问 Fashion MNIST,只需导入和加载数据。
注:尽管这些实际上是图像,但它们将作为 NumPy 数组而非二进制图像对象进行加载。
训练并评估模型
我们使用最简单的 CNN,因为我们不关注建模部分。
保存模型
要将训练的模型加载到 TensorFlow Serving 中,我们首先需要将其保存为 SavedModel 格式。这将在定义明确的目录层次结构中创建一个 protobuf 文件,并将包括版本号。TensorFlow Serving 允许我们选择在发出推断请求时要使用的模型版本或“可应用”版本。每个版本将导出到给定路径下的不同子目录。
检查保存的模型
我们将使用命令行实用工具 saved_model_cli
在 SavedModel 中查看 MetaGraphDefs(模型)和 SignatureDefs(您可以调用的方法)。请参阅 TensorFlow 指南中有关 SavedModel CLI 的讨论。
这告诉了我们很多关于模型的信息!在本例中,我们训练了模型,所以我们已经知道输入和输出,但如果没有训练模型,这将是重要信息。它并不能告诉我们所有信息(例如,告诉我们这是灰度图像数据),但这是一个很好的开始。
使用 TensorFlow Serving 应用模型
警告:如果您不是在 Google Colab 中运行,以下单元将使用 root 访问权限在系统上安装软件包。如果要在本地 Jupyter 笔记本中运行,请谨慎操作。
将 TensorFlow Serving 分发 URI 添加为软件包源:
We're preparing to install TensorFlow Serving using Aptitude since this Colab runs in a Debian environment. We'll add the tensorflow-model-server
package to the list of packages that Aptitude knows about. Note that we're running as root.
注:此示例以原生方式运行 TensorFlow Serving,但您也可以在 Docker 容器中运行,这是开始使用 TensorFlow Serving 最简单的一种方式。
安装 TensorFlow Serving
您只需要一个命令行!
开始运行 TensorFlow Serving
接下来,我们就要开始运行 TensorFlow Serving 并加载模型了。在模型加载后,我们就可以开始使用 REST 发出推断请求了。有一些重要参数:
rest_api_port
:用于 REST 请求的端口。model_name
:您将在 REST 请求的网址中使用它。可以是任意名称。model_base_path
:这是指向保存模型目录的路径。
在 TensorFlow Serving 中向模型发出请求
首先,我们来看一下测试数据中的一个随机样本。
好吧,看起来很有趣。要是让您来识别会有多难?现在,我们为一个包含三个推断请求的批次创建 JSON 对象,并查看模型的识别情况:
发出 REST 请求
可应用的最新版本
我们将一个预测请求作为 POST 发送到服务器的 REST 端点,并向其传递三个样本。我们将要求服务器在不指定特定版本的情况下提供可应用的最新版本。
可应用的特定版本
现在,我们指定一个可应用的特定版本。由于我们只有一个版本,所以我们选择版本 1。我们仍将查看所有三个结果。