Multiprocessing-Kernaffinitätsproblem
In bestimmten Szenarien, wenn die NumPy-Bibliothek importiert und versucht wird, eine CPU-intensive Schleife mithilfe des Joblib-Moduls zu parallelisieren kann beobachtet werden, dass die der Schleife zugewiesenen Arbeitsprozesse alle auf einen einzigen Kern beschränkt sind, was Leistungssteigerungen behindert.
Dieses Problem entsteht durch die Interaktion zwischen NumPy und den zugrunde liegenden OpenBLAS-Bibliotheken, die häufig verwendet werden für Multithread-Operationen. Standardmäßig können diese Bibliotheken die Kernaffinitätseinstellungen beeinträchtigen, was dazu führt, dass alle Arbeitsprozesse demselben Kern zugewiesen werden.
Lösung: Task-Affinität zurücksetzen
Eine einfache Sache Die Lösung besteht darin, die Task-Affinität mithilfe der Funktion os.system() zurückzusetzen, nachdem die betroffenen Module importiert wurden. Durch Ausführen des Befehls os.system("taskset -p 0xff %d" % os.getpid()) wird die Kernaffinität zurückgesetzt, sodass sich die Arbeitsprozesse auf alle verfügbaren Kerne verteilen können.
OpenBLAS-CPU-Affinitäts-Reset deaktivieren
Alternativ kann das CPU-Affinitäts-Reset-Verhalten von OpenBLAS entweder zur Laufzeit oder zur Build-Zeit deaktiviert werden. Zur Laufzeit verhindert das Setzen der Umgebungsvariablen OPENBLAS_MAIN_FREE auf 1, dass die Bibliothek die Kernaffinität anpasst. Alternativ kann dieses Verhalten während des OpenBLAS-Kompilierungsprozesses durch Hinzufügen von NO_AFFINITY=1 zur Makefile.rule dauerhaft deaktiviert werden.
Das obige ist der detaillierte Inhalt vonWarum bleiben meine Joblib-Worker nach dem Import von NumPy auf einem Kern hängen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!