【问题标题】:Tensorflow Serving: When to use it rather than simple inference inside Flask service?Tensorflow Serving:何时使用它而不是在 Flask 服务中进行简单推理?
【发布时间】:2018-07-09 16:23:13
【问题描述】:

我正在为使用对象检测 API 训练的模型提供服务。这是我的做法:

  • 在端口 9000 上创建一个 Tensorflow 服务,如basic tutorial中所述

  • 使用来自 tensorflow_serving.apis 的 predict_pb2 创建一个调用此服务的 python 代码,类似于this

  • 在 Flask 服务器中调用此代码以使服务可通过 HTTP 访问

不过,我可以通过以下方式更轻松地完成任务:

如您所见,我本可以跳过使用 Tensorflow 服务。

那么,在我的案例中使用 Tensorflow 服务有什么好的理由吗?如果没有,我应该在哪些情况下使用它?

【问题讨论】:

    标签: python tensorflow flask tensorflow-serving


    【解决方案1】:

    Flask 用于处理请求/响应,而 Tensorflow 服务专为在生产中提供灵活的 ML 模型而构建。

    让我们来看看你想要的一些场景:

    • 为多个产品提供多个模型(多对多关系),位于 同时。
    • 查看哪个模型对您的产品产生了影响(A/B 测试)。
    • 在生产中更新模型权重,就像保存一个新的一样简单 模型到一个文件夹。
    • 性能等同于用 C/C++ 编写的代码。

    您始终可以通过使用 Flask 向 TF Serving 发送请求来免费使用所有这些优势。

    【讨论】:

    • 抱歉耽搁了,感谢您的回答。对于第 2 点,您的意思是在切换模型时可以通过内存管理获得时间吗?对于第 4 点,当您只运行 sess.run(...) 时,您的性能不是已经非常接近 C/C++ 了吗?
    • Tensorflow 服务现在支持 RESTful API,您无需使用 predict_pb2 进行预测。在第 2 点中,我的意思是测试新模型的性能以回答诸如“我的新模型与旧模型相比性能如何”之类的问题。对于第 4 点,可能是的,但是恕我直言,在服务中精心构建的 c++ 推理代码的性能应该比我们在烧瓶中运行 sess.run() 更好(当我们的请求率很高,例如 100 个请求/秒时)。
    【解决方案2】:

    我相信您更喜欢 Tensorflow Serving 而不是 Flask 的大部分原因都与性能有关:

    • Tensorflow Serving 使用 gRPC 和 Protobuf,而常规 Flask Web 服务使用 REST 和 JSON。 JSON 依赖于 HTTP 1.1 而 gRPC 使用 HTTP/2 (there are important differences)。此外, Protobuf 是用于序列化数据和it is more efficient than JSON 的二进制格式。
    • TensorFlow Serving can batch requests 到相同的模型,它使用硬件(例如 GPU)更合适。
    • TensorFlow Serving 可以管理模型版本

    几乎所有事情都取决于您拥有的用例和场景,因此考虑利弊以及您的要求非常重要。 TensorFlow Serving 具有出色的功能,但也可以通过一些努力来实现这些功能以与 Flask 一起使用(例如,您可以创建批处理机制)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-26
      • 2017-07-20
      • 2017-09-24
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 2019-04-21
      • 1970-01-01
      相关资源
      最近更新 更多