簡體   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