Traitement parallèle avec Parallel de scikit-learn

Addendum 2019/1016: J'ai écrit sur la fonction de cache de Joblib. [[Python] Utilisez le cache de Joblib pour omettre le même calcul](https://tma15.github.io/blog/2019/10/06/python-Utilisez le cache de Joblib pour omettre le même calcul /)

En parlant de tutoriels scikit-learn, l'introduction de @Scaled_Wurm Man est très facile à comprendre. Cette fois, il m'est arrivé de lire le code source et de noter une niche qui n'a pas été introduite dans entrée de blog. La conclusion est que s'il n'y a pas de raison particulière, la partie écrite en multitraitement peut être remplacée par Parallel.

Parallel

Le multitraitement est-il inutile?

Parallèle est (Original est Notes dans le code source)

argument

Exemple

Exemple simple

>>> from math import sqrt
>>> from sklearn.externals.joblib import Parallel, delayed
>>> Parallel(n_jobs=1)(delayed(sqrt)(i**2) for i in range(10))
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0]

Exemple de progrès

>>> from time import sleep
>>> from sklearn.externals.joblib import Parallel, delayed
>>> r = Parallel(n_jobs=2, verbose=5)(delayed(sleep)(.1) for _ in range(10)) #doctest: +SKIP
[Parallel(n_jobs=2)]: Done   1 out of  10 | elapsed:    0.1s remaining:    0.9s
[Parallel(n_jobs=2)]: Done   3 out of  10 | elapsed:    0.2s remaining:    0.5s
[Parallel(n_jobs=2)]: Done   6 out of  10 | elapsed:    0.3s remaining:    0.2s
[Parallel(n_jobs=2)]: Done   9 out of  10 | elapsed:    0.5s remaining:    0.1s
[Parallel(n_jobs=2)]: Done  10 out of  10 | elapsed:    0.5s finished

Spécifiez pre_dispatch

>>> from math import sqrt
>>> from sklearn.externals.joblib import Parallel, delayed

>>> def producer():
...     for i in range(6):
...         print('Produced %s' % i)
...         yield i

>>> out = Parallel(n_jobs=2, verbose=100, pre_dispatch='1.5*n_jobs')(
...                         delayed(sqrt)(i) for i in producer()) #doctest: +SKIP
Produced 0 ###Le premier
Produced 1 ###Seconde
Produced 2 ###Troisième
[Parallel(n_jobs=2)]: Done   1 jobs       | elapsed:    0.0s
Produced 3
[Parallel(n_jobs=2)]: Done   2 jobs       | elapsed:    0.0s
Produced 4
[Parallel(n_jobs=2)]: Done   3 jobs       | elapsed:    0.0s
Produced 5
[Parallel(n_jobs=2)]: Done   4 jobs       | elapsed:    0.0s
[Parallel(n_jobs=2)]: Done   5 out of   6 | elapsed:    0.0s remaining:    0.0s
[Parallel(n_jobs=2)]: Done   6 out of   6 | elapsed:    0.0s finished

Recommended Posts

Traitement parallèle avec Parallel de scikit-learn
Traitement parallèle avec multitraitement
Traitement parallèle avec des fonctions locales
[Chapitre 6] Introduction à scicit-learn avec 100 coups de traitement du langage
Recherche en grille d'hyper paramètres avec Scikit-learn
[Python] Traitement parallèle facile avec Joblib
Bases du traitement d'images binarisées par Python
Isomap avec Scikit-learn
SLICECAP: traitement parallèle fractionné des fichiers PCAP
DBSCAN avec scikit-learn
Clustering avec scikit-learn (1)
Clustering avec scikit-learn (2)
PCA avec Scikit-learn
Dessin avec Matrix-Reinventor of Python Image Processing-
kmeans ++ avec scikit-learn
Exemple de traitement efficace des données avec PANDAS
Recevez une liste des résultats du traitement parallèle en Python avec starmap
Comment faire un traitement parallèle multicœur avec python
À propos de la vitesse de traitement de SVM (SVC) de scikit-learn
Prédisez le deuxième tour de l'été 2016 avec scikit-learn
Traitement asynchrone avec Arduino (traitement des demandes de traitement de Linux de manière asynchrone)
100 traitement du langage knock-75 (en utilisant scicit-learn): poids de l'identité
Traitement parallèle sans signification profonde en Python
À propos du comportement de la file d'attente pendant le traitement parallèle
Validation croisée avec scikit-learn
Traitement d'image avec MyHDL
Traitement des ensembles de données avec des pandas (1)
Traitement des ensembles de données avec des pandas (2)
SVM multi-classes avec scikit-learn
Clustering avec scikit-learn + DBSCAN
Apprentissage Scikit-Learn avec la chimioinfomatique
Traitement d'image avec Python
DBSCAN (clustering) avec scikit-learn
Parallèle SMP avec OpenMP
Installez scikit.learn avec pip
Divers traitements de Python
Calculer tf-idf avec scikit-learn
Traitement d'image avec PIL
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
Introduction au traitement parallèle distribué Python par Ray
Définissez votre propre fonction de distance avec k-means de scikit-learn
[Chapitre 3] Introduction à Python avec 100 coups de traitement du langage
[Chapitre 2] Introduction à Python avec 100 coups de traitement du langage
Apprenez facilement 100 traitements linguistiques Knock 2020 avec "Google Colaboratory"
[Chapitre 4] Introduction à Python avec 100 coups de traitement du langage
Traitement d'image avec Python (partie 2)
À propos de max_iter de LogisticRegression () de scikit-learn
100 coups de traitement du langage avec Python 2015
Calcul parallèle avec le notebook iPython
Traitement d'image avec PIL (Pillow)
"Traitement Apple" avec OpenCV3 + Python3
Visualisez les résultats des arbres de décision réalisés avec Python scikit-learn
Recherche dans la base de données (vérification de la vitesse de traitement avec ou sans index)
Réseau de neurones avec Python (scikit-learn)
Cohérence de la conception de l'API scikit-learn
Equation de mouvement avec sympy
Traitement du signal acoustique avec Python (2)
100 traitements linguistiques knock-77 (en utilisant scicit-learn): mesure du taux de réponse
Traitement du signal acoustique avec Python