【问题标题】:keras prediction gets stuck when deployed using uwsgi in a flask app在烧瓶应用程序中使用 uwsgi 部署时,keras 预测会卡住
【发布时间】:2018-08-08 02:59:15
【问题描述】:

我有一个在单元测试和本地烧瓶应用程序(烧瓶运行)中完美运行的 keras 模型。但是,当我在 uwsgi 中启动烧瓶应用程序时,它从第二个请求开始就卡住了,从而杀死了整个应用程序。这是因为 uwsgi 产生了多个进程吗?我该如何解决这个问题?谢谢。

【问题讨论】:

  • 你应该发布负责模型的代码,卡住的代码。
  • 由于服务器上的内存分配问题,我也发生了同样的情况。你检查过日志吗?如果它抛出任何类型的警告,请也发布它们。
  • 确保将 keras 模型保存在内存中,而不是为每个请求重新加载它
  • 我仍然有这个问题。你找到解决办法了吗?

标签: python tensorflow flask keras uwsgi


【解决方案1】:

我遇到了同样的问题,这可能不是理想的解决方法。 但我相信这是在多个进程中运行的 Keras 问题。

我正在使用lazy-apps = true 运行uWSGI。

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

注意:通过延迟加载应用程序,这将消耗更多内存,例如内存的两倍,因为它会在每个线程/进程中再次加载整个应用程序

这里有一些使用完整的链接: Similar Issue, Similar Issue

Example deployment guide

【讨论】:

  • 它也解决了我的(类似)问题,但我得到了一个新问题:我的不同 Flask 路由偶尔返回 400,显然是随机的......
  • 非常感谢 Manoj。这仍然被证明对 Tensorflow 2.1.1 非常有用/有帮助。
【解决方案2】:

借助 multiprocessing.lock,我能够让我的模型进行预测

from multiprocessing import Lock

class LockedPredictor:
    def __init__(self):
        self.mutex = Lock()
        self.model = load_model()

    def predict(self, input):
        with self.mutex: 
          return self.model.predict(input)

灵感来自这里:https://dref360.github.io/keras-web/。 但是,当我有两个竞争模型时,解决方案失败了。我尝试应用此处描述的管理器解决方案,但失败了。

一个适当的解决方案将基于here 建议的redis 队列,这是在Keras website 上推荐的。

【讨论】:

    【解决方案3】:

    我遇到了类似的问题:在 docker 环境中的烧瓶应用程序中,我们会发现神经网络在第一次预测后会挂在 predict 上。为了解决这个问题,我创建了一个神经网络类

    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
    

    这似乎已经停止了挂起(我不知道为什么我需要一个会话和一个图表,但我在调试时添加了两者,现在我害怕删除)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 2020-10-11
      相关资源
      最近更新 更多