10

我有一个训练有素的 Tensorflow 模型,我想使用 REST API 提供预测方法。我能想到的是使用Flask构建一个简单的REST API,接收JSON作为输入,然后调用Tensorflow中的predict方法,然后将预测结果返回给客户端。

我想知道这样做是否有任何顾虑,尤其是在生产环境中?

非常感谢!

4

3 回答 3

3

我首先想到的是性能。

TensorFlow 团队似乎已经解决了服务器/客户端的使用情况。您可能想研究tensorflow serving。默认情况下,它使用 gRPC 作为通信协议。

于 2016-04-08T23:35:21.697 回答
2

我们在工作中使用 Flask + TensorFlow 服务。我们的设置可能不是为模型提供服务的最佳方式,但它可以完成工作并且到目前为止对我们来说效果很好。

设置如下:

  1. 因为构建 tfserving 需要很长时间,所以我们构建了一个 docker 镜像(不支持 GPU 或其他任何东西,但它仅适用于服务模型,它比直接从巨大的 Python/Flask 单体中提供模型更快更好)。模型服务器镜像可以在这里找到:https ://hub.docker.com/r/epigramai/model-server/
  2. 然后 Flask 用于设置 API。为了向模型服务器发送请求,我们需要一个 grcp 预测客户端,所以我们用 Python 构建了一个可以直接导入到烧瓶 API 中的客户端,https://github.com/epigramai/tfserving_predict_client/

这里的好处是模型不是由 Flask API 应用程序提供的。docker 镜像模型服务器可以很容易地替换为运行在为机器硬件而不是 docker 容器编译的 GPU 上的模型服务器。

于 2017-08-03T22:06:16.557 回答
1

我认为您的主要关注点之一可能是批量处理请求。例如,假设您的模型是经过训练的 CNN,例如 VGG、Inception 或类似的。如果您使用 Flask 实现常规 Web 服务,对于您收到的每个预测请求(假设您在 GPU 上运行),您将在 GPU 中对单个图像进行预测,这可能不是最佳的,因为您可以批量处理类似的请求,例如例子。

这是 TensorFlow Serving 旨在提供的功能之一,能够在发送到 GPU 之前将对相同模型/签名的请求组合成一个批次,从而更有效地使用资源和(可能)提高吞吐量。您可以在此处找到更多信息:https ://github.com/tensorflow/serving/tree/master/tensorflow_serving/batching

也就是说,这在很大程度上取决于场景。但是要记住对预测进行批处理是很重要的。

于 2018-08-22T03:09:09.243 回答