我正在开发一个web应用程序,该应用程序使用celeb进行任务分配和管理。Web应用程序还使用机器学习和深度学习算法进行预测。这些预测模型作为单独的应用程序部署在单独的服务器上,其预测功能作为单独的任务与芹菜集成。
例如,X(用户(想知道股票价格的预测,并向web应用程序提交查询。Web应用程序将使用X的查询负载来启动芹菜任务。该Celery任务在执行某些操作后将任务提交给机器学习/深度学习的Celery正在工作的其他服务器,并开始等待其他服务器任务完成和接收响应。
与使用Flask为机器学习预测模型部署RESTful端点时相比,这将我们的性能提高到了10倍。对于深度学习,我们需要转移到Tensorflow并将其与芹菜集成。经过深入研究,得出结论,在机器学习服务器上的芹菜任务中使用Tensorflow Serving并调用预测函数。
另一种方法是使用Sanic将TensorFlow模型部署为单独的端点,而不是web应用程序的celele将任务直接提交给其他服务器celele,现在它将直接执行和调用RESTful APIEndpoint,这也将是异步的。
你有什么建议,在这种情况下什么对我们最有效?与RESTful API相比,芹菜能提供什么好处?反之亦然?
对于云应用程序中(主要(串行请求的在线处理,使用Celery来排队进行推理似乎不是一个好的设计选择,使用Flask或其任何组合也不是。Tensorflow服务是一种高性能的解决方案,可以为您处理动态批处理,无需将任务放入队列中,然后将其发送到tf服务,然后在处理之前再次排队。
无耻的插件:还有另一个名为virtex的包,构建在asyncio之上,它提供了一个完全不知道如何实现计算的服务解决方案。它很容易使用,而且性能很高。服务器在一个进程中运行,该进程具有处理请求的事件循环。有了这个框架,您可以用三个回调函数来定义请求处理(相当于将推理代码重构为三个签名受到轻度约束的函数(,virtex引擎在其事件循环中将它们链接在一起。virtex客户端可以以捆绑或串行方式发送请求。对于需要低延迟的在线应用程序,其中请求/模型输入比大约为1,这是我测试过的性能最高的http服务解决方案(它已分别针对Resnet50V2和bert base的tf服务和bert服务进行了基准测试(。