我似乎无法弄清楚这一点。我有一个使用scikit-learn培训过的模型,保存到.pkl文件中,并且我想制作一个基于它的预测的API。Gunicorn/flask API暴露sklearn模型不起作用
我已经有了能够做出预测的代码,它可以在控制台/单元测试中正常运行。为了加速预测,我将分割数据(数千个图像补丁)并使用joblib
/multiprocessing
扩展负载。
我在设置JOBLIB_START_METHOD=forkserver
,因为如果从multiprocessing
进程中使用scikit-learn挂起。
我已经用flask
来完成一个API,它使用这段代码,并且在使用flask的开发服务器运行时,它工作得很好。现在我试图在gunicorn
之内托管flask
应用程序,它根本不工作。
如果我使用默认工作人员,那么当试图预测时,它会挂起而没有错误,就像我没有设置'forkserver'多处理一样。我跑gunicorn
这样的:
JOBLIB_START_METHOD=forkserver gunicorn -w 2 -b 0.0.0.0:$PORT --timeout 3600 web.app:app
我也使用gevent
后端尝试。这实际上做的工作,但它的速度很慢,而且它打印此:
Multiprocessing backed parallel loops cannot be nested below threads, setting n_jobs=1
因此,在得到这个任何想法的方式工作,有是运行多个网络工作者(我不认为是这样的话用烧瓶的开发服务器)并且请求能够利用joblib
/multiprocessing
?谢谢