multitraitement.dummy en Python n'utilise pas 100% cpu
Je fais un projet d'apprentissage automatique en Python, donc je dois paralléliser la fonction de prédiction, que j'utilise dans mon programme.
from multiprocessing.dummy import Pool
from multiprocessing import cpu_count
def multi_predict(X, predict, *args, **kwargs):
pool = Pool(cpu_count())
results = pool.map(predict, X)
pool.close()
pool.join()
return results
Le problème est que tous mes processeurs ne sont chargés que sur 20-40% (en somme c'est 100%). J'utilise le multitraitement.dummy parce que j'ai quelques problèmes avec le module multiprocessing dans la fonction de décapage.
1 réponses
Lorsque vous utilisez multiprocessing.dummy
, vous êtes à l'aide de fils, pas de processus:
multiprocessing.dummy
réplique L'API demultiprocessing
mais n'est pas plus qu'un wrapper autour du modulethreading
.
Cela signifie que vous êtes limité par leGlobal Interpreter Lock (Gil) , et un seul thread peut réellement exécuter des opérations liées au processeur à la fois. Cela va vous empêcher d'utiliser pleinement vos processeurs. Si vous voulez obtenir un parallélisme complet sur tous les cœurs disponibles, vous devrez adressez-vous au problème de décapage que vous rencontrez avec multiprocessing.Pool
.
Notez que multiprocessing.dummy
peut toujours être utile si le travail que vous devez paralléliser est lié à IO, ou utilise une extension C qui libère le GIL. Pour le code Python pur, cependant, vous aurez besoin de multiprocessing
.