Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Flask部署机器学习web应用程序的最佳实践_Python_Flask_Gensim - Fatal编程技术网

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

Python 使用Flask部署机器学习web应用程序的最佳实践,python,flask,gensim,Python,Flask,Gensim,希望你能帮忙。我正在用python和Flask创建一个web应用程序。我的web应用程序将要做的事情之一就是提供智能文档搜索。您可以输入文本,它将获取与您输入的文本部分类似的文档结果 我使用Flask作为前端来提供HTML、管理所需的任何DB交互和显示结果。它将把查询传递给Gensim相似性模型并进行查询 我的问题是,举办这些活动的最佳方式是什么?我已经探索过作为加载烧瓶的一部分加载模型,但它会使速度减慢很多(内存约为6gb),但它是有效的。然后我可以很容易地查询模型,因为它都在相同的程序范围内

希望你能帮忙。我正在用python和Flask创建一个web应用程序。我的web应用程序将要做的事情之一就是提供智能文档搜索。您可以输入文本,它将获取与您输入的文本部分类似的文档结果

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

我的问题是,举办这些活动的最佳方式是什么?我已经探索过作为加载烧瓶的一部分加载模型,但它会使速度减慢很多(内存约为6gb),但它是有效的。然后我可以很容易地查询模型,因为它都在相同的程序范围内

我担心的是,这将是不可伸缩的,可能不是最佳实践,我可能会更好地单独托管模型,并从我的Flask web应用程序对其进行API调用

如有任何想法和意见,将不胜感激

谢谢,
皮特

你的想法绝对正确

是的,您应该将模型的宿主与web应用程序分开。你对API的建议很好。即使在一开始它全部托管在一台机器上,仍然值得进行这种分离

一旦你通过一个API单独托管,那么随着你的web应用拥有更多的用户,扩展模型API就变得容易了

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

例如,一些访问超大数据集的系统会通过电子邮件返回响应,让您知道您的答案已准备好下载或查看。在这种情况下,您可以托管模型的一个实例,并将请求放入q队列中,逐个进行应答

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

以上两个选项都可以使用开源解决方案自行推出,也可以直接进入云中的托管服务,通过这两种方法中的任何一种实现自动扩展

如果您只是在没有资金的情况下自己制作这个项目,那么您很可能不想在云中使用托管服务,因为这些服务会自动向错误的方向扩展您的银行帐户

上述解决方案允许您进行更改、更新模型,甚至使用不同的模型,并在模型仍然符合API的情况下自行发布模型


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

谢谢。将以API调用的形式查看宿主。Gensim模型本身只返回一组文档ID和相似性分数。然后,我需要从数据库中获取这些ID的详细信息,该数据库存储模型中摄取的文档的信息。您是否建议在Flask web应用程序或Flask托管模型上进行DB抓取?我倾向于将其保留在web应用程序中,因为我在那里使用SQLAlchemy,它将全部保留在ORM中。好问题。我尽量保持我的答案尽可能的通用,因为这里可以添加的解决方案和其他信息的数量相当大。您甚至可能希望通过另一个API执行这些数据库调用,因此它也是一个远离您的webapp的可扩展解决方案。开始时,这可能并不重要,所以您可以将它放在烧瓶中,像编写API一样编写它。不要直接从控制器进行db调用。控制器应该调用模型API,获得响应,然后调用db API,它应该在您的flask应用程序中自己的包中。现在,我将留下关于如何处理ORM的部分,一旦您将项目的各个部分分开。感谢您的响应,我将对此展开讨论。