Ich kann nicht scheinen, dies herauszufinden. Ich habe ein Modell, das mit scikit-learn trainiert wurde, in einer .pkl-Datei gespeichert wurde, und ich möchte eine API erstellen, die darauf basierende Vorhersagen macht.Gunicorn/flask API, um ein sklearn-Modell nicht verfügbar zu machen
Ich habe bereits den Code, der Vorhersagen macht und es läuft gut aus Konsolen/Unit-Tests. Um Vorhersagen zu beschleunigen, teile ich die Daten (Tausende von Bildflecken) und spreize die Last unter Verwendung joblib
/multiprocessing
.
Ich setze JOBLIB_START_METHOD=forkserver
seit scikit-lernen hängt, wenn aus einem multiprocessing
Prozess verwendet.
Ich habe eine API mit flask
, die diesen Code verwendet, und wenn mit dem DevServer von Flasch läuft es funktioniert gut. Jetzt versuche ich die flask
App innerhalb gunicorn
zu hosten und es funktioniert überhaupt nicht.
Wenn ich die Standard-Worker verwende, dann hängt es einfach ohne Fehler bei der Vorhersage, ähnlich wie wenn ich nicht den 'Forkserver' Multiprocessing gesetzt hätte. Ich bin mit gunicorn
wie folgt aus:
JOBLIB_START_METHOD=forkserver gunicorn -w 2 -b 0.0.0.0:$PORT --timeout 3600 web.app:app
Ich habe auch versucht die gevent
Backend verwenden. Dies macht eigentlich Arbeit, aber es ist sehr langsam, und es druckt diese:
Multiprocessing backed parallel loops cannot be nested below threads, setting n_jobs=1
Also, alle Ideen auf, diese immer in einer Art und Weise zu arbeiten, dass es läuft mehrere Web-Arbeiter (ich glaube nicht, dass der Fall ist mit dem dev-Server von flask) und mit einer Anfrage, die in der Lage ist, joblib
/multiprocessing
zu nutzen? Danke