繁体   English   中英

Gunicorn / flask API暴露sklearn模型不起作用

[英]Gunicorn/flask API to expose an sklearn model not working

我似乎无法弄清楚这一点。 我有一个使用scikit-learn训练的模型,保存到.pkl文件,我想制作一个基于它的预测API。

我已经有了进行预测的代码,它可以从控制台/单元测试中运行良好。 为了加快预测,我正在分割数据(数千个图像补丁)并使用joblib / multiprocessing扩展负载。

我正在设置JOBLIB_START_METHOD=forkserver因为如果在multiprocessing处理过程中使用scikit-learn挂起。

我已经使用这个代码完成了使用flask的API,并且当使用flask的dev服务器运行时,它工作得很好。 现在我正试图在gunicorn flask托管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的请求的joblib 谢谢

Gevent将无法与joblib一起使用,因为它会生成线程以同时处理请求(请参阅此讨论 ),这就是您的警告实际所说的内容。 其次,它非常慢,因为joblib将并行调用转换为顺序调用并执行它们(请参阅此讨论 )。

使用joblib执行并行操作时,我遇到了同样的问题。 虽然我没有使用sklearn,但我认为以下命令也适用于你:

gunicorn -b 0.0.0.0:$SERVICE_PORT --workers=2 -t $SERVICE_TIMEOUT rest_api:app

如果您想查看完整的源代码,可以在此处进行操作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM