使用Flask部署机器学习Web应用程序的最佳实践

问题描述

希望您能提供帮助。我正在使用python和Flask创建一个网络应用。我的Web应用程序将要做的一件事是提供智能文档搜索。您可以输入文本,它将获取与您输入的文本部分相似的文档结果。

我使用Flask作为前端来提供HTML,管理所需的所有数据库交互并显示结果。它将把查询传递给Gensim相似性模型并进行查询。

我的问题是托管这些内容的最佳方法是什么?我已经探讨了如何在加载烧瓶时加载模型,但是这样做会大大降低速度(内存约为6gb),但是可以正常工作。然后,我可以很容易地查询模型,因为它们都在同一程序范围内。

我担心的是,这将无法扩展,并且可能不是最佳实践,我最好单独托管模型并从我的Flask Web应用程序对其进行API调用。

想法和观点将不胜感激。

谢谢, 皮特

解决方法

您的想法肯定在正确的轨道上。

是的,您应该将模型的托管与网络应用分开。您对API的建议是一个很好的建议。即使一开始它们都托管在一台计算机上,仍然值得进行这种分离。

一旦您通过API单独托管此代码,那么随着您的网络应用拥有更多用户,就很容易扩展模型API。

是否通过启动更多实例和平衡请求。或者,根据需求,您可以通过消息传递(例如Rabbitmq)或两者结合来增加可伸缩性和健壮性。

例如,某些访问极大数据集的系统通过电子邮件返回响应,以使您知道可以下载或查看答案。在这种情况下,您可以托管一个模型实例,然后将请求放入q队列中以一个接一个地回答。

如果您需要模型做出非常快速的响应,那么您可能会通过更多实例和平衡来进行扩展。

可以使用开源解决方案自行部署以上两个选项,也可以直接使用可通过这两种方法自动扩展的云中托管服务。

如果您只是没有资金就自己生产这个项目,那么您很可能不想从使用云中的托管服务开始,因为这些服务会自动以错误的方向扩展您的银行帐户。

以上解决方案允许您进行更改,更新模型,甚至使用其他模型,只要它仍然符合API,就可以自行发布。

分离数据边界和行为责任对于拥有可扩展和可维护的体系结构很重要。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...