我有一个训练有素的 Tensorflow 模型,我想使用 REST API 提供预测方法。我能想到的是使用Flask构建一个简单的REST API,接收JSON作为输入,然后调用Tensorflow中的predict方法,然后将预测结果返回给客户端。
我想知道这样做是否有任何顾虑,尤其是在生产环境中?
非常感谢!
我有一个训练有素的 Tensorflow 模型,我想使用 REST API 提供预测方法。我能想到的是使用Flask构建一个简单的REST API,接收JSON作为输入,然后调用Tensorflow中的predict方法,然后将预测结果返回给客户端。
我想知道这样做是否有任何顾虑,尤其是在生产环境中?
非常感谢!
我首先想到的是性能。
TensorFlow 团队似乎已经解决了服务器/客户端的使用情况。您可能想研究tensorflow serving。默认情况下,它使用 gRPC 作为通信协议。
我们在工作中使用 Flask + TensorFlow 服务。我们的设置可能不是为模型提供服务的最佳方式,但它可以完成工作并且到目前为止对我们来说效果很好。
设置如下:
这里的好处是模型不是由 Flask API 应用程序提供的。docker 镜像模型服务器可以很容易地替换为运行在为机器硬件而不是 docker 容器编译的 GPU 上的模型服务器。
我认为您的主要关注点之一可能是批量处理请求。例如,假设您的模型是经过训练的 CNN,例如 VGG、Inception 或类似的。如果您使用 Flask 实现常规 Web 服务,对于您收到的每个预测请求(假设您在 GPU 上运行),您将在 GPU 中对单个图像进行预测,这可能不是最佳的,因为您可以批量处理类似的请求,例如例子。
这是 TensorFlow Serving 旨在提供的功能之一,能够在发送到 GPU 之前将对相同模型/签名的请求组合成一个批次,从而更有效地使用资源和(可能)提高吞吐量。您可以在此处找到更多信息:https ://github.com/tensorflow/serving/tree/master/tensorflow_serving/batching
也就是说,这在很大程度上取决于场景。但是要记住对预测进行批处理是很重要的。