我会尝试从高层次上回答您的问题。免责声明:我不是您所描述的所有方面的专家,我欢迎来自专家的更正或补充。
我将从下到上介绍不同的组件:
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 存在的原因。
This answer 也可能会有所帮助。
最后,如果您在云平台上工作,Web 服务器部分可能会为您处理,因此您需要编写 Flask 应用程序并使用 gunicorn 托管它,或者设置 TF Serving 服务器。