Python 当在flask应用程序中使用uwsgi部署时,keras预测陷入困境
我有一个keras模型,它在单元测试和本地flask应用程序(flask run)中工作得非常好。然而,当我在uwsgi中启动flask应用程序时,它从第二个请求开始就被卡住了,杀死了整个应用程序。这是因为uwsgi产生了多个进程吗?我该如何避开这个问题?谢谢。我也有同样的问题,这可能不是理想的解决办法。 但我相信这是一个在多个进程中运行的Keras问题 我正在用lazy apps运行uWSGI=truePython 当在flask应用程序中使用uwsgi部署时,keras预测陷入困境,python,tensorflow,flask,keras,uwsgi,Python,Tensorflow,Flask,Keras,Uwsgi,我有一个keras模型,它在单元测试和本地flask应用程序(flask run)中工作得非常好。然而,当我在uwsgi中启动flask应用程序时,它从第二个请求开始就被卡住了,杀死了整个应用程序。这是因为uwsgi产生了多个进程吗?我该如何避开这个问题?谢谢。我也有同样的问题,这可能不是理想的解决办法。 但我相信这是一个在多个进程中运行的Keras问题 我正在用lazy apps运行uWSGI=true uwsgi --http 0.0.0.0:5000 --wsgi-file your_fl
uwsgi --http 0.0.0.0:5000 --wsgi-file your_flask_server.py --callable app --processes 2 --threads 2 --stats 127.0.0.1:9191 --lazy-apps
注意:通过延迟加载应用程序,这将消耗更多的内存,比如两倍的内存,因为它将在每个线程/进程中再次加载整个应用程序
以下是一些使用完整链接:
,
我有一个类似的问题:在docker环境中的flask应用程序中,我们会发现神经网络会在第一次预测之后挂起预测。为了解决这个问题,我创建了一个神经网络类
def __init__(self):
self.session = tf.Session()
self.graph = tf.get_default_graph()
self.model = self.__load_model()
with self.graph.as_default():
with self.session.as_default():
logging.info("neural network initialised")
最后3行似乎正确地初始化了图形和会话,但由于某些原因,会话没有在正确的位置发生。我的预测功能是:
def predict(self, x):
with self.graph.as_default():
with self.session.as_default():
y = self.model.predict(x)
return y
这似乎已经停止了挂起(我不知道为什么我需要一个会话和一个图表,但我在调试时添加了这两个,现在我害怕删除任何一个)我能够在multiprocessing.lock的帮助下得到我的模型预测 来自多处理导入锁的
类锁定预测器:
定义初始化(自):
self.mutex=Lock()
self.model=load_model()
def预测(自我,输入):
使用self.mutex:
返回self.model.predict(输入)
灵感来自这里:。
然而,当我有两个相互竞争的模型时,解决方案失败了。我尝试应用此处描述的Manager解决方案,但失败
一个合适的解决方案是基于建议的redis队列,这在上是推荐的。您应该发布负责模型的代码,代码被卡住了。由于服务器上的内存分配问题,我也遇到了同样的情况。你查过日志了吗?如果它抛出任何类型的警告,那么也请发布它们。确保您将keras模型保存在内存中,而不是为每个请求重新加载它。我仍然存在此问题。你找到解决方案了吗?它也解决了我(类似)的问题,但我得到了一个新的问题:我的不同烧瓶路线偶尔返回400次,显然是随机的…非常感谢Manoj。这仍然证明对Tensorflow 2.1.1非常有用。