rest - 使用 Celery 或 RESTful API 服务深度学习模型?

标签 rest tensorflow deep-learning celery

我正在开发一个使用 celery 进行任务分配和管理的网络应用程序。 Web 应用程序还使用机器学习和深度学习算法进行预测。这些预测模型作为单独的应用程序部署在单独的服务器上,并且它们的预测功能作为单独的任务与 celery 集成。

例如,X(用户)想知道股票价格的预测并向网络应用程序提交查询。 Web 应用程序将使用 X 的查询负载启动 celery 任务。此 Celery 任务在执行某些操作后将任务提交给机器学习/深度学习的 celery 正在工作的其他服务器,并开始等待其他服务器任务完成并接收响应。

与我们使用 Flask 为机器学习预测模型部署 RESTful 端点时相比,这将我们的性能提高了 10 倍。对于深度学习,我们需要迁移到 Tensorflow 并将其与 celery 集成。经过深入研究,决定使用 Tensorflow Serving 并在机器学习服务器上的 celery 任务中调用预测函数。

其他方法是使用 Sanic 将 TensorFlow 模型部署为单独的端点,而不是 Web 应用程序的 celery 直接向其他服务器 celery 提交任务,现在它将直接执行和调用 RESTful API 端点也是异步的。

您有什么建议,在这种情况下什么最适合我们?与 RESTful API 相比,celery 有什么优势,反之亦然?

最佳答案

对于云应用程序中(大部分)串行请求的在线处理,使用 Celery 对批处理进行推理排队似乎不是一个好的设计选择,使用 Flask 或它们的任何组合也不是。 Tensorflow serving 是一种为您处理动态批处理的高性能解决方案,无需将任务放在队列中,然后将其发送到 tf-serving,只是在处理之前再次排队。

无耻外挂:还有一个包叫virtex ,建立在 asyncio 之上,它提供了一个服务解决方案,它完全不知道你的计算是如何实现的。它非常易于使用且性能高。服务器在具有事件循环处理请求的单个进程中运行。使用此框架,您可以使用三个回调函数定义您的请求处理(这相当于将您的推理代码重构为三个其签名受到适度约束的函数),并且 Virtex 引擎在其事件循环中将它们链接在一起。 Virtex 客户端可以以捆绑或串行方式发送请求。对于要求低延迟的在线应用程序,其中请求/模型输入比率大约为 1,它是我测试过的性能最高的 http 服务解决方案(它已经针对 Resnet50V2 和 BERT-base 的 tf-serving 和 bert-serving 进行了基准测试,分别)。

关于rest - 使用 Celery 或 RESTful API 服务深度学习模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58509111/

相关文章:

neural-network - 如何在caffe中使用convert_imageset来处理未放在一个文件夹中的图像?

javascript - Rest API 显示 [object Object] 而不是数组对象

php - Mailchimp API v3.0 更改订阅者电子邮件

python - 从维度为 [N] 的张量创建维度为 [N,D] 的矩阵

tensorflow - tf.py_function和tf.function在目的上有什么区别?

python - 如何使用 Keras 合并层进行具有两个输出的自动编码器

c# - 在 C# 中替代 HttpListener 和 Griffin.WebServer

java - 带有 JSON : PUT and DELETE not working 的 RESTful Web 服务

android - 如何构建 TensorFlow Lite 并在 Qt 项目中使用?

python-3.x - Keras 支持参数优化器吗?