web-dev-qa-db-fra.com

Comment utiliser tous les cœurs de processeur en utilisant Dask?

J'ai une série pandas avec plus de 35000 lignes. Je veux utiliser dask pour la rendre plus efficace. Cependant, j'ai à la fois le code dask et le code pandas prennent en même temps. Initialement "ser" est pandas series et fun1 et fun2 sont des fonctions de base effectuant une correspondance de modèle dans des rangées individuelles de séries.
Pandas
ser = ser.apply(fun1).apply(fun2)

Dask
ser = dd.from_pandas(ser, npartitions = 16) ser = ser.apply(fun1).apply(fun2)

En vérifiant l'état des cœurs de CPU, j'ai constaté que tous les cœurs n'étaient pas utilisés. Un seul cœur s'habitue à 100%.

Existe-t-il une méthode pour accélérer le code de la série en utilisant dask ou utiliser tous les cœurs de cpu lors de l'exécution des opérations Dask en série?

8
ANKIT JHA

Voir http://dask.pydata.org/en/latest/scheduler-overview.html

Il est probable que les fonctions que vous appelez soient en pur-python, et donc revendiquez le GIL, le verrou qui garantit qu'une seule instruction python est exécutée à la fois dans un thread. Dans ce cas, vous devrez exécuter vos fonctions dans des processus séparés pour voir tout parallélisme. Vous pouvez le faire en utilisant le planificateur multiprocessus

ser = ser.apply(fun1).apply(fun2).compute(scheduler='processes')

ou en utilisant le planificateur distribué (qui fonctionne très bien sur une seule machine, et qui offre en fait des avantages de nouvelle génération, tels que le tableau de bord d'état); dans le cas le plus simple et par défaut, il suffit de créer un client:

client = dask.distributed.Client()

mais vous devriez lire les documents

15
mdurant