Maison >développement back-end >Tutoriel Python >Pourquoi mes travailleurs Joblib sont-ils bloqués sur un seul noyau après l'importation de NumPy ?

Pourquoi mes travailleurs Joblib sont-ils bloqués sur un seul noyau après l'importation de NumPy ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-29 19:43:29826parcourir

Why Are My Joblib Workers Stuck on One Core After Importing NumPy?

Problème d'affinité de base du multitraitement

Dans certains scénarios, lors de l'importation de la bibliothèque NumPy et de la tentative de parallélisation d'une boucle gourmande en CPU à l'aide du module joblib , on peut observer que les processus de travail affectés à la boucle sont tous confinés à un seul cœur, ce qui entrave les gains de performances.

Ce problème survient en raison de l'interaction entre NumPy et les bibliothèques OpenBLAS sous-jacentes, qui sont souvent utilisées pour les opérations multithread. Par défaut, ces bibliothèques peuvent interférer avec les paramètres d'affinité du noyau, ce qui entraîne l'attribution de tous les processus de travail au même noyau.

Solution : réinitialiser l'affinité des tâches

Une méthode simple La solution consiste à réinitialiser l'affinité des tâches à l'aide de la fonction os.system() après avoir importé les modules concernés. En exécutant la commande os.system("taskset -p 0xff %d" % os.getpid()), l'affinité du cœur est réinitialisée, permettant aux processus de travail de se propager sur tous les cœurs disponibles.

Désactiver la réinitialisation de l'affinité du processeur OpenBLAS

Alternativement, le comportement de réinitialisation de l'affinité du processeur d'OpenBLAS peut être désactivé soit au moment de l'exécution, soit au moment de la construction. Au moment de l'exécution, définir la variable d'environnement OPENBLAS_MAIN_FREE sur 1 empêche la bibliothèque d'ajuster l'affinité du noyau. Alternativement, pendant le processus de compilation OpenBLAS, l'ajout de NO_AFFINITY=1 au Makefile.rule désactive définitivement ce comportement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn