当前位置:网站首页>解决Pytorch模型在Gunicorn部署无法运行或者超时问题

解决Pytorch模型在Gunicorn部署无法运行或者超时问题

2022-08-02 06:12:00 [email protected]

@TOC解决Pytorch模型在Gunicorn部署无法运行或者超时问题

问题描述
训练出了一个Pytorch 文本生成模型,想要用Flask+Gunicorn的方法部署。但是请求模型进行生成的接口时,一直没有结果,最后导致timeout。

我的模型生成接口大概长这样:

model = load_model() #load_model会返回一个pytorch模型

@app.route('/generate')
def generate_texts():
    text = model.generate()
    return text 

当我用gunicorn部署:

gunicorn -c gunicorn_conf.py news_server:app  > logs/runlog.txt 2>&1 &1

我的gunicorn_conf.py文件长这样的:

#!/usr/bin/python
#coding=utf-8

#nohup gunicorn -c gunicorn_conf.py online_server:app &
import multiprocessing

preload_app = True
debug = True
bind = '0.0.0.0:9091'
workers = 3
threads = 6
backlog = 32  #服务器中在pending状态的最大连接数,即client处于waiting的数目。超过这个数目, client连接会得到
一个error。
worker_class = 'gevent'
worker_connections = 10 #最大客户端并发数量,默认情况下这个值为1000。此设置将影响gevent和eventlet工作模式
#timeout = 1
#proc_name = 'gunicorn.pid'
pidfile = 'logs/gunicorn.pid'
accesslog = 'logs/access.log'
access_log_format = '%(h)s %(t)s %(U)s %(q)s'
#errorlog = 'logs/gun_error.log'
#loglevel = 'logs/debug'
#logfile = 'logs/gun_debug.log'


部署并没有发现什么异常。但是每次请求这个模型生成文本接口时,一直得不到结果,最后超时。
经过一天的debug和查资料,发现国外一个老哥有很类似的问题。

https://stackoverflow.com/questions/67069183/worker-timeout-when-preloading-pytorch-model-in-flask-app-on-render-com

问题原因
Pytorch会在和Gunicorn的preload_app选项为True时出现bug。应该是gunicorn的共享内存机制和Pytorch有一些冲突。

解决方案
将gunicorn的preload_app设置为False。

preload_app的作用主要是在启动app时能节省一点时间,进程之间共享内存。但是有很大的副作用,具体可以参考这篇文章:https://zhuanlan.zhihu.com/p/371115835
————————————————
原文链接:https://blog.csdn.net/Ang_Quantum/article/details/122496024

原网站

版权声明
本文为[[email protected]]所创,转载请带上原文链接,感谢
https://blog.csdn.net/zzddada/article/details/126040885