2

SageMaker 似乎给出了使用两个不同的服务堆栈来提供自定义 docker 图像的示例:

  1. NGINX + Gunicorn + Flask
  2. NGINX + TensorFlow 服务

有人可以向我解释一下(我对网络工程知之甚少)这些不同组件的职责吗?而且由于第二个堆栈只有两个组件而不是一个,我是否可以正确地假设 TensorFlow Serving 完成了 Gunicorn 和 Flask 的工作(无论可能是什么)?

最后,我读到可以同时使用 Flask 和 TensorFlow 服务。那么这会是 NGINX -> Gunicorn -> Flask -> TensorFlow Serving 吗?这有什么好处?

4

1 回答 1

2

我会尝试在高层次上回答你的问题。免责声明:我不是您所描述的所有方面的专家,我欢迎来自专家的更正或补充。

我将从下到上介绍不同的组件:

TensorFlow Serving是一个库,用于将 TensorFlow 模型部署和托管为模型服务器,接受带有输入数据的请求并返回模型预测。这个想法是使用 TensorFlow 训练模型,将它们导出为 SavedModel 格式并使用 TF Serving 为它们提供服务。你可以设置一个 TF Server 来接受通过 HTTP 和/或 RPC 的请求。RPC 的一个优点是请求消息是经过压缩的,这在发送大型有效负载(例如图像数据)时非常有用。

Flask是一个用于编写 Web 应用程序的 Python 框架。它比 TF Serving 更通用,并且广泛用于构建 Web 服务,例如在微服务架构中。

现在,Flask 和 TensorFlow 服务的结合应该是有意义的。您可以编写一个 Flask Web 应用程序,该应用程序向用户公开 API,并在后台调用由 TF Serving 托管的 TF 模型。用户使用 API 传输一些数据(1),Flask 应用程序可能会转换数据(例如,将其包装在 numpy 数组中),调用 TF Server 以获取模型预测(2)(3),可能会转换预测(例如将大于 0.5 的预测概率转换为类别标签 1),并将预测返回给用户(4)。您可以将其可视化如下:

在此处输入图像描述

Gunicorn是一个 Web 服务器网关接口 (WSGI),通常用于在生产系统中托管 Flask 应用程序。顾名思义,它是 Web 服务器和 Web 应用程序之间的接口。当你在开发一个 Flask 应用时,你可以在本地运行它来测试它。在生产中,gunicorn 将为您运行该应用程序。

TF Serving 会将您的模型作为功能应用程序托管。因此,您不需要 gunicorn 来为您运行 TF Server 应用程序。

Nginx是实际的 Web 服务器,它将托管您的应用程序,处理来自外部的请求并将它们传递给应用程序服务器(gunicorn)。Nginx 不能直接与 Flask 应用程序对话,这就是 gunicorn 存在的原因。

这个答案也可能会有所帮助。

最后,如果您在云平台上工作,Web 服务器部分可能会为您处理,因此您需要编写 Flask 应用程序并使用 gunicorn 托管它,或者设置 TF Serving 服务器。

于 2019-01-18T08:53:59.500 回答