我正在尝试使用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调试器运行相同的代码时,它运行得很好,并在不到一秒钟的时间内处理了图像。因此,这不是代码问题,而是配置或这些工具组合的问题。
答案 0 :(得分:2)
您还需要设置cheaper = 0
。
这是我的uwsgi,正在运行。
[uwsgi]
module = main
callable = app
master = false
processes = 1
cheaper = 0
答案 1 :(得分:0)
使用master = false
和processes = 1
进行uwsgi配置。 tensorflow hangs in a multiprocess setting是一个已知问题。
答案 2 :(得分:0)
我遇到了类似的问题。没有 Tensorflow 和 Keras 的服务很好,但是一旦我导入这个库,我就会收到内部服务器错误。
有人告诉我尝试使用 gunicorn 代替 uWSGI,这很有效。
顺便说一句,你不需要改变太多,只是
/etc/systemd/system/myproject.service
/etc/nginx/nginx.conf
希望有用。也对不起我的英语