无法在uwsgi + nginx部署下利用tensorflow模型

时间:2018-09-26 16:57:57

标签: python docker tensorflow uwsgi

我正在尝试使用MTCNN in tensorflow + flask + uWSGI来部署面部检测服务。我的部署基于this docker,并添加了此自定义uwsgi.ini

[uwsgi]
module = main
callable = app
enable-threads = true
cheaper = 2
processes = 16
threads = 16
http-timeout = 60

但是当我尝试使用刚刚构建的docker镜像进行人脸检测时,我总是得到504 Gateway Time-out。实际上,当我深入研究时,我注意到代码可以很好地运行到this session.run line

    for op_name in data_dict:
        with tf.variable_scope(op_name, reuse=True):
            for param_name, data in iteritems(data_dict[op_name]):
                try:
                    var = tf.get_variable(param_name)
                    session.run(var.assign(data))
                except ValueError:
                    if not ignore_missing:
                        raise

起初,我认为这是与uwsgi worker下的线程相关的问题,因此我增加了进程和线程的数量,但没有成功。

当我使用flask调试器运行相同的代码时,它运行得很好,并在不到一秒钟的时间内处理了图像。因此,这不是代码问题,而是配置或这些工具组合的问题。

3 个答案:

答案 0 :(得分:2)

您还需要设置cheaper = 0。 这是我的uwsgi,正在运行。

[uwsgi]
module = main
callable = app
master = false 
processes = 1
cheaper = 0

答案 1 :(得分:0)

使用master = falseprocesses = 1进行uwsgi配置。 tensorflow hangs in a multiprocess setting是一个已知问题。

答案 2 :(得分:0)

我遇到了类似的问题。没有 Tensorflow 和 Keras 的服务很好,但是一旦我导入这个库,我就会收到内部服务器错误。

有人告诉我尝试使用 gunicorn 代替 uWSGI,这很有效。

顺便说一句,你不需要改变太多,只是

  1. /etc/systemd/system/myproject.service
  2. /etc/nginx/nginx.conf

使用this paper on Digitalocean

希望有用。也对不起我的英语