cho*_*raf 2 python parallel-processing scikit-learn
因此,这听起来有些令人费解,但是最近我在joblib中遇到了一个问题,即它将创建一堆进程,然后挂在那儿(也就是,每个进程占用内存,但不占用CPU时间)。
这是我得到的最简单的代码,可以重现该问题:
from sklearn import linear_model
import numpy as np
from sklearn import cross_validation as cval
from joblib import Parallel, delayed
def fit_hanging_model(n=10000, nx=10, ny=32, ndelay=10,
n_cvs=5, n_jobs=None):
# Create data
X = np.random.randn(n, ny*ndelay)
y = np.random.randn(n, nx)
# Create model + CV
model = linear_model.Ridge(alpha=1000.)
cvest = cval.KFold(n, n_folds=n_cvs, shuffle=True)
# Fit model
par = Parallel(n_jobs=n_jobs, verbose=10)
parfunc = delayed(_fit_model_cvs)
par(parfunc(X, y, train, test, model)
for i, (train, test) in enumerate(cvest))
def _fit_model_cvs(X, Y, train, test, model):
model.fit(X, Y)
n = 10
a = np.random.randn(n, 32)
b = np.random.randn(32, 10)
##########
c = np.dot(a, b)
##########
fit_hanging_model(n_jobs=3)
Run Code Online (Sandbox Code Playgroud)
这是发生了什么:
这是joblib = 0.8.0和sklearn 0.15-git的情况。
注意,此错误在Linux上的CentOS上。我无法在另一台机器上重现此错误,因此可能很难重现。
有谁知道为什么会这样吗?似乎该点产品正在做一些奇怪的事情,但我不知道那可能是什么...我已经走到尽头了...
弄清楚了。显然,这是Joblib创建多个python进程的问题,而MKL同时尝试执行线程。请在此处查看问题和解决方案(涉及设置环境变量):
https://github.com/joblib/joblib/issues/138