W większości estymatorów w scikit-learn istnieje n_jobs
parametr fit
/ predict
metody do tworzenia równoległych zadań za pomocą joblib
. Zauważyłem, że ustawienie go tak, aby -1
tworzyło tylko 1 proces Pythona i maksymalizuje rdzenie, powodując, że użycie procesora osiągnęło 2500%. Różni się to znacznie od ustawienia dodatniej liczby całkowitej> 1, która tworzy wiele procesów Pythona przy ~ 100% użyciu.
Jak ustawienie to wpływa na użycie procesora i rdzenia na wieloprocesorowym serwerze Linux? (np. czy n_jobs=8
wtedy 8 procesorów jest całkowicie zablokowanych lub czy procesory nadal rezerwują niektóre rdzenie na inne zadania / procesy?)
Ponadto dostaję MemoryError
czasem od czasu ustawienia n_jobs=-1
dużych zestawów danych. Jednak użycie pamięci zwykle wynosi około 30–40% dla pojedynczego procesu Pythona. W jaki sposób dane i pamięć są zarządzane / kopiowane w zależności od wartości n_jobs
?
źródło
Odpowiedzi:
Mogę sobie wyobrazić wartość
-1
zużycia wszystkich dostępnych zasobów w miarę ich udostępniania. W zależności od funkcji, o której mówisz, dane są kopiowane dla każdego zadania, co może prowadzić do problemów z pamięcią, jeśli zestaw danych jest wystarczająco duży. Oto fragment informacji z dokumentu GridSearchCV :Dobrym pomysłem może być ustalenie
pre_dispatch
górnego limitu zużycia pamięci.W przeciwnym razie, dlaczego to ustawiasz
-1
? Powinieneś po prostu ustawić liczbę fizycznych rdzeni na komputerze, a może 2-krotność tej liczby, jeśli zadanie może być wielowątkowe.EDYTOWAĆ:
Wygląda na to, że ustawienie
n_jobs=-1
rzeczywiście wybiera wszystkie rdzenie fizyczne i maksymalizuje ich użycie. Spójrz na komentarze w tej odpowiedzi na StackOverflow .Jeśli nie ustawiłeś
pre_dispatch
, to oczywiście spróbuje dużo skopiować. Właśnie dlatego brakuje Ci pamięci. Jeśli masz 4 rdzenie, domyślnie wykonanych będzie 8 kopii zestawu danych (jak opisano powyżej w cytacie).Oto kolejny wątek , który wygląda bardziej na stronę wydajności
źródło
n_jobs = -1
nie uwzględni pamięci, tylko liczbę rdzeni procesora, co oczywiście może prowadzić do problemów z pamięcią.