In den meisten Schätzern für Scikit-Learn gibt es n_jobs
in fit
/ predict
Methoden einen Parameter zum Erstellen paralleler Jobs mit joblib
. Ich habe festgestellt, dass durch das Festlegen von -1
nur 1 Python-Prozess die Kerne maximal genutzt werden und die CPU-Auslastung 2500% übersteigt. Dies unterscheidet sich erheblich von der Einstellung auf eine positive Ganzzahl> 1, wodurch mehrere Python-Prozesse bei einer Auslastung von ~ 100% erstellt werden.
Wie wirkt sich die Einstellung auf die CPU- und Kernauslastung auf einem Linux-Server mit mehreren CPUs aus? (zB wenn n_jobs=8
dann 8 CPUs vollständig gesperrt sind oder reservieren die CPUs noch einige Kerne für andere Aufgaben / Prozesse?)
Außerdem bekomme ich MemoryError
gelegentlich bei der Einstellung n_jobs=-1
für große Datenmengen. Die Speichernutzung liegt jedoch normalerweise bei etwa 30-40% für den einzelnen Python-Prozess. Wie werden die Daten und der Speicher abhängig vom Wert von verwaltet / kopiert n_jobs
?
quelle
Antworten:
Ich kann mir vorstellen, dass ein Wert von
-1
alle verfügbaren Ressourcen verbraucht, sobald sie verfügbar sind. Abhängig von der Funktion, über die Sie sprechen, werden anscheinend Daten für jeden Job kopiert, was zu Speicherproblemen führen kann, wenn der Datensatz groß genug ist. Hier ist ein Ausschnitt aus der Dokumentzeichenfolge von GridSearchCV :Daher ist es möglicherweise eine gute Idee,
pre_dispatch
den Speicherverbrauch zu begrenzen.Warum stellen Sie es sonst ein
-1
? Sie sollten es einfach auf die Anzahl der physischen Kerne auf Ihrem Computer oder auf das Zweifache dieser Anzahl einstellen, wenn die Aufgabe Multithread-fähig sein kann.BEARBEITEN:
Es scheint, dass die Einstellung
n_jobs=-1
tatsächlich nur alle physischen Kerne auswählt und deren Verwendung maximiert. Schauen Sie sich die Kommentare in dieser Antwort auf StackOverflow an .Wenn Sie nicht eingestellt haben
pre_dispatch
, wird es natürlich versuchen, viel zu kopieren. Aus diesem Grund geht Ihnen der Speicher aus. Wenn Sie 4 Kerne haben, werden standardmäßig 8 Kopien des Datensatzes erstellt (wie oben im Zitat beschrieben).Hier ist ein weiterer Thread , der sich mehr mit der Leistung befasst
quelle
n_jobs = -1
wird nicht der Speicher berücksichtigt, sondern nur die Anzahl der Kerne auf Ihrer CPU, was natürlich zu Speicherproblemen führen kann.