O treinamento de modelos sklearn em paralelo com o joblib bloqueia o processo
Como sugerido emesta resposta, Tentei usar o joblib para treinar vários modelos de aprendizado de scikit em paralelo.
import joblib
import numpy
from sklearn import tree, linear_model
classifierParams = {
"Decision Tree": (tree.DecisionTreeClassifier, {}),''
"Logistic Regression" : (linear_model.LogisticRegression, {})
}
XTrain = numpy.array([[1,2,3],[4,5,6]])
yTrain = numpy.array([0, 1])
def trainModel(name, clazz, params, XTrain, yTrain):
print("training ", name)
model = clazz(**params)
model.fit(XTrain, yTrain)
return model
joblib.Parallel(n_jobs=4)(joblib.delayed(trainModel)(name, clazz, params, XTrain, yTrain) for (name, (clazz, params)) in classifierParams.items())
No entanto, a chamada para a última linha leva anos sem utilizar a CPU, na verdade, parece bloquear e nunca retornar nada. Qual é o meu erro?
Um teste com uma quantidade muito pequena de dados emXTrain
sugere que a cópia da matriz numpy em vários processos não é a razão do atraso.