gpt4 book ai didi

python - Gunicorn/flask API 暴露 sklearn 模型不工作

转载 作者:行者123 更新时间:2023-11-28 18:19:01 28 4
gpt4 key购买 nike

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

我已经有了进行预测的代码,它在控制台/单元测试中运行良好。为了加快预测速度,我拆分数据(数千个图像 block )并使用 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 后端。这确实有效,但速度很慢,并且打印如下:

多处理支持的并行循环不能嵌套在线程下,设置 n_jobs=1

因此,关于以多个网络 worker 运行的方式(我认为 Flask 的开发服务器不是这种情况)以及能够利用 joblib 的请求的任何想法>/多处理?谢谢

最佳答案

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

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

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

想看完整源码的可以关注 here .

关于python - Gunicorn/flask API 暴露 sklearn 模型不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46480758/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com