【问题标题】:Serve trained Tensorflow model with REST API using Flask?使用 Flask 使用 REST API 为训练有素的 Tensorflow 模型提供服务?
【发布时间】:2016-07-29 08:17:03
【问题描述】:

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

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

非常感谢!

【问题讨论】:

  • 你有成功吗?我很期待。

标签: python rest machine-learning tensorflow tensorflow-serving


【解决方案1】:

我首先想到的是性能。

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

【讨论】:

  • 我同意,但你知道我们受了多少痛苦吗?一旦我们恢复模型并在烧瓶服务器中重用它们,也许它不会有太大的伤害。
  • @SungKim 你的意思是你真的更喜欢使用烧瓶吗?
【解决方案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 上的模型服务器。

【讨论】:

  • 您能谈谈您在此设置中看到的推理时间吗? (以及烧瓶 API 增加的开销)
  • 对于我们的用例,它运行良好,但我们没有收到大量请求,因此在推理之前批处理 api 请求并不是我们用例中的“必须”。我会说这种设置,以及向模型服务器发送请求等的开销,与使用 tensorflow 和烧瓶在同一个单体中将模型加载到内存中一样快。我们发现这个设置很有用,因为我们可以从 python 烧瓶应用程序中移除 tensorflow 复杂性。我们没有做很多测试和比较推理时间,对我们来说关键优势是关注点分离。
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 2019-02-04
    • 1970-01-01
    • 2016-09-11
    • 2019-04-21
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    相关资源
    最近更新 更多