使用 Flask 部署机器学习 Web 应用程序的最佳实践
Best practice for deploying machine learning web app with Flask
希望能帮到你。我正在使用 python 和 Flask 创建一个网络应用程序。我的网络应用程序要做的事情之一是提供智能文档搜索。您可以输入文本,它会获取与您输入的文本部分相似的文档结果。
我在前端使用 Flask 来为 HTML 提供服务,管理所需的任何数据库交互并显示结果。它会将查询传递给 Gensim 相似性模型并进行查询。
我的问题是托管这些的最佳方式是什么?我已经探索过加载模型作为加载烧瓶的一部分,但它会减慢很多速度(它在内存中大约 6gb)但它有效。然后我可以很容易地查询模型,因为它们都在同一个程序范围内。
我担心这将无法扩展并且可能不是最佳实践,我最好单独托管模型并从我的 Flask 网络应用程序对其进行 API 调用。
想法和观点将不胜感激。
谢谢,
皮特
你的想法肯定是对的。
是的,您应该将模型的托管与 Web 应用分开。您对 API 的建议很好。即使一开始都托管在一台机器上,做这个分离还是值得的。
一旦您通过 API 单独托管它,那么随着您的网络应用程序拥有更多用户,扩展模型变得很容易 API。
是否通过启动更多实例和平衡请求。或者,根据要求,您可以通过消息传递(如 Rabbitmq)或两者的结合来增加可扩展性和稳健性。
例如,某些访问超大数据集的系统,return 通过电子邮件回复,让您知道您的答案已准备好下载或查看。在这种情况下,你可能会托管一个模型实例,并将请求放入 q 队列中以逐一回答。
如果您需要模型的快速响应,那么您可能会通过更多实例和平衡进行扩展。
以上两个选项都可以使用开源解决方案自行推出,或者您可以直接使用云中的托管服务,这些服务将通过这两种方法中的任何一种自动扩展。
如果您只是在没有资金的情况下自己制作这个项目,那么您很可能不想开始使用云中的托管服务,因为这些服务会自动向错误的方向扩展您的银行账户。
以上解决方案允许您进行更改、更新模型,甚至使用不同的模型并自行发布,只要它仍然符合 API。
数据边界的分离和行为责任对于拥有可扩展和可维护的架构很重要。
希望能帮到你。我正在使用 python 和 Flask 创建一个网络应用程序。我的网络应用程序要做的事情之一是提供智能文档搜索。您可以输入文本,它会获取与您输入的文本部分相似的文档结果。
我在前端使用 Flask 来为 HTML 提供服务,管理所需的任何数据库交互并显示结果。它会将查询传递给 Gensim 相似性模型并进行查询。
我的问题是托管这些的最佳方式是什么?我已经探索过加载模型作为加载烧瓶的一部分,但它会减慢很多速度(它在内存中大约 6gb)但它有效。然后我可以很容易地查询模型,因为它们都在同一个程序范围内。
我担心这将无法扩展并且可能不是最佳实践,我最好单独托管模型并从我的 Flask 网络应用程序对其进行 API 调用。
想法和观点将不胜感激。
谢谢, 皮特
你的想法肯定是对的。
是的,您应该将模型的托管与 Web 应用分开。您对 API 的建议很好。即使一开始都托管在一台机器上,做这个分离还是值得的。
一旦您通过 API 单独托管它,那么随着您的网络应用程序拥有更多用户,扩展模型变得很容易 API。
是否通过启动更多实例和平衡请求。或者,根据要求,您可以通过消息传递(如 Rabbitmq)或两者的结合来增加可扩展性和稳健性。
例如,某些访问超大数据集的系统,return 通过电子邮件回复,让您知道您的答案已准备好下载或查看。在这种情况下,你可能会托管一个模型实例,并将请求放入 q 队列中以逐一回答。
如果您需要模型的快速响应,那么您可能会通过更多实例和平衡进行扩展。
以上两个选项都可以使用开源解决方案自行推出,或者您可以直接使用云中的托管服务,这些服务将通过这两种方法中的任何一种自动扩展。
如果您只是在没有资金的情况下自己制作这个项目,那么您很可能不想开始使用云中的托管服务,因为这些服务会自动向错误的方向扩展您的银行账户。
以上解决方案允许您进行更改、更新模型,甚至使用不同的模型并自行发布,只要它仍然符合 API。
数据边界的分离和行为责任对于拥有可扩展和可维护的架构很重要。