Dans la plupart des estimateurs sur scikit-learn, il existe un n_jobs
paramètre dans fit
/ predict
methods pour créer des emplois parallèles à l'aide de joblib
. J'ai remarqué que le définir sur -1
crée un seul processus Python et maximise les cœurs, ce qui fait que l'utilisation du processeur atteint 2500% en plus. Ceci est très différent de le définir sur un entier positif> 1, ce qui crée plusieurs processus Python à une utilisation de ~ 100%.
Comment le paramétrer affecte-t-il l'utilisation du CPU et du cœur sur un serveur Linux multi-CPU? (par exemple, si n_jobs=8
alors 8 CPU sont complètement verrouillés ou les CPU réservent-ils encore des cœurs pour d'autres tâches / processus?)
De plus, je reçois MemoryError
occasionnellement lors de la définition n_jobs=-1
de grands ensembles de données. Cependant, l'utilisation de la mémoire oscille généralement autour de 30 à 40% pour le processus Python unique. Comment les données et la mémoire sont-elles gérées / copiées en fonction de la valeur de n_jobs
?
la source
Réponses:
Je peux imaginer qu'une valeur de
-1
consomme toutes les ressources disponibles au fur et à mesure qu'elles deviennent disponibles. Selon la fonction dont vous parlez, il semble que les données soient copiées pour chacun des travaux, ce qui peut entraîner des problèmes de mémoire si l'ensemble de données est suffisamment volumineux. Voici un extrait d'informations de la docstring de GridSearchCV :Il peut donc être judicieux d'utiliser
pre_dispatch
pour limiter la consommation de mémoire.Sinon, pourquoi le définissez-vous
-1
? Vous devez simplement le définir sur le nombre de cœurs physiques sur votre machine, ou peut-être 2 fois ce nombre, si la tâche peut être multithread.ÉDITER:
Il semble que la configuration
n_jobs=-1
ne sélectionne en fait que tous les cœurs physiques et maximise leur utilisation. Jetez un œil aux commentaires de cette réponse sur StackOverflow .Si vous ne l'avez pas réglé
pre_dispatch
, il essaiera bien sûr de copier beaucoup. C'est pourquoi vous manquez de mémoire. Si vous avez 4 cœurs, il y aura, par défaut, 8 copies du jeu de données (comme décrit ci-dessus dans le devis).Voici un autre fil , qui regarde plus du côté des performances
la source
n_jobs = -1
ne prendra pas en compte la mémoire, seul le nombre de cœurs sur votre CPU, ce qui peut bien sûr entraîner des problèmes de mémoire.