2017-12-28 23 views
2

Es gibt keine n_jobs Parameter für GaussianMixture. Inzwischen , wann immer fit ich das ModellSo steuern Sie die Anzahl der Prozesse in GaussianMix

from sklearn.mixture import GaussianMixture as GMM 
gmm = GMM(n_components=4, 
      init_params='random', 
      covariance_type='full', 
      tol=1e-2, 
      max_iter=100, 
      n_init=1) 
gmm.fit(X, y) 

es erstreckt sich über 16 verarbeitet und nutzt die volle CPU-Leistung meiner 16 CPUs Maschine. Ich will nicht, dass es das macht.

Im Vergleich dazu hat Kmeansn_jobs Parameter, die mutliprocessing steuert, wenn mehrere Initialisierungen (n_init> 1) mit. Hier kommt das Multiprocessing aus heiterem Himmel.

Meine Frage ist, woher es kommt und wie man es kontrolliert?

Antwort

3

Sie beobachten Parallelverarbeitung in Bezug auf grundlegende algebraische Operationen, beschleunigen um BLAS/LAPACK.

Das Ändern ist nicht so einfach wie das Einstellen eines n_jobs Parameters und hängt von Ihrer Implementierung ab!

Häufige Kandidaten sind ATLAS, OpenBLAS und Intels MKL.

Ich empfehle Prüfung, die man zuerst verwendet wird, dann entsprechend handeln:

import numpy as np 
np.__config__.show() 

Leider diese Dinge tricky bekommen kann. Eine gültige Umgebung für MKL kann zum Beispiel wie diese (source) aussehen:

export MKL_NUM_THREADS="2" 
export MKL_DOMAIN_NUM_THREADS="MKL_BLAS=2" 
export OMP_NUM_THREADS="1" 
export MKL_DYNAMIC="FALSE" 
export OMP_DYNAMIC="FALSE" 

Für ATLAS, wie es scheint, können Sie dies bei compile-time definieren.

Und nach this answer gilt das gleiche für OpenBLAS.

Wie OP getestet, es scheint, Sie können für OpenMP mit Setzen von Umgebungsvariablen weg, in der Modifikation des Verhaltens bewirken auch für die Open-Source-Kandidaten Atlas und OpenBLAS (wo eine Kompilierung-Grenze ist die Alternative):

export OMP_NUM_THREADS="4"; 
+1

Wow. Ich überprüfte die aktive BLAS-Bibliothek, die von numpy verwendet wurde, und setzte dann die Variable mit 'export OMP_NUM_THREADS = "4"; 'bevor das Skript ausgeführt wurde, war es der Trick. Ich danke dir sehr! – tarashypka

+0

@tarashypka Und welches ist in Verwendung? MKL? Oder hat das sogar für einige der anderen Kandidaten funktioniert? – sascha

+1

Die Ausgabe ist so etwas wie 'libraries = ['openblas', 'openblas']' – tarashypka

Verwandte Themen