SageMaker TensorFlow 服务堆栈比较

SageMaker TensorFlow serving stack comparisons

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

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

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

最后,我了解到可以同时使用 Flask 和 TensorFlow serving。这会是 NGINX -> Gunicorn -> Flask -> TensorFlow Serving 吗?这样做有什么好处?

我会尽力回答您的问题。免责声明:我不是您所描述的所有方面的专家,我欢迎专家进行更正或补充。

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

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

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

现在,Flask 和 TensorFlow 服务的结合应该有意义了。您可以编写一个向用户公开 API 的 Flask Web 应用程序,并在后台调用由 TF Serving 托管的 TF 模型。用户使用 API 传输一些数据 (1),Flask 应用程序可能会转换数据(例如,将其包装在 numpy 数组中),调用 TF Server 以得到一个模型预测 (2)(3),或者转换预测(例如将大于 0.5 的预测概率转换为 class 标签 1),以及 return 对用户的预测 (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 服务服务器。