系统环境中安装的是Python3.5,项目中需要的Python为3.6及以上的环境,所以用conda虚拟环境进行隔离。
conda
项目搭建
进入虚拟环境,安装所需要的包。
conda create -n pytorch python=3.6
conda activate pytorch
conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda install -n pytorch pytorch torchvision cudatoolkit=10.0
pip install insightface
pip install pymatting
pip install onnxruntime-gpu==1.0
conda install gunicorn
conda install flask
gunicorn -c config.py flask_matting:app
问题
onnxruntime和cuda版本不匹配问题
gunicorn在conda虚拟环境下不能通过配置文件启动
该问题需要在gunicorn的配置文件config.py中加入如下代码,只有这样才能在log/error.log中显示问题的内容。不能用字典的形式写输出日志,使用字典的形式输出日志不显示问题的内容。
import os
import gevent.monkey
gevent.monkey.patch_all()
import multiprocessing
bind = '0.0.0.0:8000'
pidfile = 'log/gunicorn.pid'
accesslog = 'log/access.log'
errorlog = 'log/error.log'
- 问题
- 解决方法
通过测试不是gunicorn版本的问题。主要是因为配置文件中work_class = gevent 的问题。将work_class = gevent 修改为worker_class = 'gunicorn.workers.ggevent.GeventWorker 就可以启动,但是不使用conda虚拟环境下的服务器上work_class = gevent 可以直接启动,不需要修改。
import os
import gevent.monkey
gevent.monkey.patch_all()
import multiprocessing
bind = '0.0.0.0:7788'
pidfile = 'log/gunicorn.pid'
logconfig_dict = {
'version':1,
'disable_existing_loggers': False,
'loggers':{
"gunicorn.error": {
"level": "WARNING",
"handlers": ["error_file"],
"propagate": 1,
"qualname": "gunicorn.error"
},
"gunicorn.access": {
"level": "DEBUG",
"handlers": ["access_file"],
"propagate": 0,
"qualname": "gunicorn.access"
}
},
'handlers':{
"error_file": {
"class": "logging.handlers.RotatingFileHandler",
"maxBytes": 1024*1024*1024,
"backupCount": 1,
"formatter": "generic",
"filename": "./log/gunicorn.error.log"
},
"access_file": {
"class": "logging.handlers.RotatingFileHandler",
"maxBytes": 1024*1024*1024,
"backupCount": 1,
"formatter": "generic",
"filename": "./log/gunicorn.access.log",
}
},
'formatters':{
"generic": {
"format": "'[%(process)d] [%(asctime)s] %(levelname)s [%(filename)s:%(lineno)s] %(message)s'",
"datefmt": "[%Y-%m-%d %H:%M:%S %z]",
"class": "logging.Formatter"
},
"access": {
"format": "'[%(process)d] [%(asctime)s] %(levelname)s [%(filename)s:%(lineno)s] %(message)s'",
"class": "logging.Formatter"
}
}
}
capture_output = True
loglevel = 'debug'
daemon = True
reload = True
workers = 1
worker_class = 'gunicorn.workers.ggevent.GeventWorker'
x_forwarded_for_header = 'X-FORWARDED-FOR'
参考资料 conda—学习笔记 在Anaconda虚拟环境中pip安装的包无法使用 CUDA Execution Provider gunicorn flask启动没有多个worker_Gunicorn常用配置
|