2017-12-28 22 views
2

GaussianMixture에 대해 n_jobs 매개 변수가 없습니다. 한편, 때마다 나는 모델GaussianMixture에서 프로세스 수를 제어하는 ​​방법

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) 

이 16 과정에 걸쳐 내 16 개의 CPU 머신의 전체 CPU 전원을 사용을 맞습니다. 나는 그렇게하기를 원하지 않는다.

이와 대조적으로, Kmeans은 복수 초기화 (n_init> 1)를 가질 때 mutlipcessing을 제어하는 ​​n_jobs 매개 변수를 갖습니다. 여기 다중 처리가 파란색에서 나옵니다.

제 질문은 어디에서 왔는지, 어떻게 제어합니까?

답변

3

기본 대수 연산과 관련하여 병렬 처리를 관찰하면 BLAS/LAPACK의 속도가 향상됩니다.

수정하는 것은 n_jobs 매개 변수를 설정하는 것만 큼 간단하지 않으며 사용중인 구현에 따라 다릅니다.

일반적인 후보는 ATLAS, OpenBLAS 및 Intel의 MKL입니다.

import numpy as np 
np.__config__.show() 

는 슬프게도 이런 일이 tricky를 얻을 수 있습니다 :

나는 하나가 그에 따라 행동, 먼저 사용 검사를 권장합니다. 예를 들어 MKL에 대한 올바른 환경이 (source)과 같이 할 수 있습니다 : ATLAS를 들어

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" 

, 보인다, 당신은 compile-time에서이 문제를 정의합니다.

그리고 this answer에 따르면, OpenBLAS에도 동일하게 적용됩니다.

영업 이익은 테스트, 당신도 (컴파일 시간 제한이 대안) 오픈 소스 후보 아틀라스와 OpenBLAS을위한 행동 수정에 초래, OpenMP에 대한 환경 변수를 설정 멀리 얻을 수있는 것 같다

export OMP_NUM_THREADS="4"; 
+1

와우. 나는 numpy에서 사용중인 활성 BLAS 라이브러리를 확인한 다음 스크립트를 실행하기 전에 트릭을 수행하기 위해'export OMP_NUM_THREADS = "4";와 함께 변수를 설정했다. 정말 고맙습니다! – tarashypka

+0

@tarashypka 그리고 어느 것이 사용 중입니까? MKL? 아니면 다른 후보자들에게도이 작업을 수행 했습니까? – sascha

+1

출력은 다음과 유사합니다.'libraries = [ 'openblas', 'openblas']' – tarashypka