TFServe简介:简单易用的HTTP服务器,用于tensorflow 模型推理

TFServe简介:简单易用的HTTP服务器,用于tensorflow 模型推理

机器学习中最有趣(也很有趣)的部分是利用你花时间训练的模型。虽然有很多关于如何训练模型的资源,但我们经常发现很难弄清楚如何部署使用训练模型进行推理的系统(即进行预测)。TFServe是一个框架,旨在通过HTTP服务器以简单方便的方式为tensorflow模型提供服务。

TFServe是一个建立在apistar之上的微框架。要安装它,只需运行:

$ pip install tfserve

如何使用TFServe?

让我们从这个常见的场景开始。在ImageNet上谷歌为图像分类训练了一个Tensorflow Inception CNN 模型。您希望构建一个使用此模型进行推理的HTTP服务。

从描述中可以看出,这个模型接收224x224的RGB图像,并返回最可能的类(来自ImageNet中可用的1000个类)。下载模型,得到一frozen_graph.pb(或类似)文件。

现在怎么办呢?这就是tfserve发挥作用的地方:

你需要5个部分:

  • 模型文件:它可以是.pb包含ckpt文件的 文件或模型目录。
  • 输入张量名称:图的输入张量的名称。
  • 输出张量名称:图的输出张量的名称。
  • encode:python函数,接收请求正文数据并输出dict映射输入张量名称以输入numpy值。
  • decode:python函数,它接收dict映射输出张量名称以输出numpy值并返回HTTP响应。

输入和输出张量名称

您可能知道,每个tensorflow graph张量都由唯一名称标识。创建图时会声明此名称。您需要指定tfserve输入张量的名称。输出张量也是如此。

但我从一些Tensorflow回购下载了这个模型,我不知道输入/输出张量名称!

只需使用 tfserve.helper.estimate_io_tensors函数来了解可能的i / o张量供您选择。

例如,

> import tfserve import helper
> helper.estimate_io_tensors("frozen_model.pb")
Possible INPUT tensors:
 import/img:0
 
Possible OUTPUT tensors:
 pred/out:0
 pred/softmax_out:0

编码函数

实现接收HTTP请求正文数据的函数,并将dict映射输入张量名称输出到输入numpy值。

在图像分类示例之后,该encode函数将接收HTTP请求正文中提供的二进制数据,并应将dict映射“ import/img:0” 输出到224x224归一化的RGB numpy图像,Python代码如下:

def encode(request_data):
 with tempfile.NamedTemporaryFile(mode="wb", suffix=".jpg") as f:
 f.write(request_data)
 img = PIL.Image.open(f.name).resize((224, 224)) 
 img = np.asarray(img) / 255.
 
 return {"import/img:0": img}

解码函数

实现一个函数,该函数接收dict映射输出张量名称以输出numpy值并返回HTTP响应。

在图像分类示例之后,该decode函数将接收到具有类概率的1000大小数组的dict映射pred/softmax_out:0。我希望返回一个JSON对象,如:

{
 class: "german shepard",
 prob: 0.98,
}

其中包含有关最可能的类的信息。

然后,decode函数将是,Python代码如下:

def decode(outputs):
 p = outputs["pred/softmax_out:0"]
 index = np.argmax(p)
 return {
 "class": index_to_class_name(index),
 "prob": float(p[index])
 }

运行服务器

您现在可以运行提供上述所有5个部分的服务器(模型路径,输入张量,输出张量encode和decode函数),python示例如下:

from tfserve import TFServeApp
app = TFServeApp("frozen_graph.pb", ["import/img:0"],
 ["pred/softmax_out:0"], encode, decode)
app.run('127.0.0.1', 5000, debug=True)

如何发送一个实际的图像到模型?

服务器将在127.0.0.1:5000启动并运行。为了运行模型,您应该将POST请求发送到/并将二进制映像作为请求体。您应该在decode函数中实现JSON响应。

TFServe简介:简单易用的HTTP服务器,用于tensorflow 模型推理

您可以在请求正文中提供任何类型的数据。您只需要在encode函数中正确处理它,以便为图形的输入张量提供信息。

此外,您可以在HTTP响应中返回任何类型的数据(除了JSON对象,它可能包含带有分段信息的二进制图像)。您只需要在decode函数中构建响应。

结论

使用tfserve,运行tensorflow训练模型非常简单容易。只需提供模型路径,输入/输出张量名称,将encode请求数据转换为输入张量的decode函数以及将输出张量转换为响应的函数。tfserve将处理其余的事情。

相关推荐