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

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

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

model = load_model()

@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 &

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


import multiprocessing

preload_app = True
debug = True
bind = '0.0.0.0:9091'
workers = 3
threads = 6
backlog = 32
一个error。
worker_class = 'gevent'
worker_connections = 10

pidfile = 'logs/gunicorn.pid'
accesslog = 'logs/access.log'
access_log_format = '%(h)s %(t)s %(U)s %(q)s'

部署并没有发现什么异常。但是每次请求这个模型生成文本接口时,一直得不到结果,最后超时。
经过一天的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

Original: https://blog.csdn.net/Ang_Quantum/article/details/122496024
Author: Ang_Quantum
Title: 解决Pytorch模型在Gunicorn部署无法运行或者超时问题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/745740/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球