큰 데이터 세트에서 k- 평균을 실행 중입니다. 나는 이것을 다음과 같이 설정했다.KMeans 병렬 처리가 실패 함
from sklearn.cluster import KMeans
km = KMeans(n_clusters=500, max_iter = 1, n_init=1,
init = 'random', precompute_distances = 0, n_jobs = -2)
# The following line computes the fit on a matrix "mat"
km.fit(mat)
내 컴퓨터에는 8 개의 코어가있다. 설명서에 "n_jobs = -2이면 모든 CPU가 사용되지만 하나는 사용됩니다." km.fit
이 실행되는 동안 몇 가지 추가 파이썬 프로세스가 실행되는 것을 볼 수 있지만 하나의 CPU 만 사용됩니다.
GIL issue처럼 들리니? 그렇다면 모든 CPU가 작동하도록하는 방법이 있습니까? (그것이 있어야하는 것처럼 보입니다 ... 그렇지 않으면 n_jobs
인수의 요점은 무엇입니까).
나는 기본적인 것을 놓치고있는 중이며 누군가 내 두려움을 확인하거나 다시 궤도에 올릴 수 있다고 생각합니다. 그것이 실제로 더 복잡하다면, 나는 실례를 설정하는 것으로 바뀔 것이다.
사실난에 사용자 만이 아니에요 :
업데이트 단순 1., 나는 여기 2. 실행 중에 내 시스템에 무슨 일이야되어 긍정적으로 n_jobs
전환 (램 사용량이 위의 스크린 샷에서 적어도 27 %처럼 보이는 때문에, 나에게 혼란) 기계,하지만
free | grep Mem | awk '{print $3/$2 * 100.0}'
는 RAM의 88 %가 무료임을 나타냅니다.
업데이트 2.sklearn
버전을 0.15.2로 업데이트했으며 위에보고 된 top
출력에서 변경된 사항은 없습니다. 비슷한 값의 n_jobs
을 실험 해 보면 비슷한 효과가 없습니다.
'KMeans'는 스레드가 아닌 프로세스를 생성하기 때문에 GIL 문제가 아닙니다. 얼마나 많은 데이터를 먹고 있습니까? 충분한 기억이 있습니까? 어떤 Scikit-Learn 버전입니까? 'n_jobs = -1' 또는'n_jobs = 2' (검증하기 위해)을 시도 했습니까? –
업데이트를 참조하십시오. 데이터는 pandas -> numpy를 통해 읽는 약 3 기가의 csv이고, 머신 RAM은 24 기가입니다. 나는 기억이 어떻게 문제인지를 볼 수 없다. 현재 업데이트는'n_jobs = 2'를 사용합니다. – zkurtz
버전 : scikit-learn == 0.14.1 – zkurtz