Problème: Ma situation semble être une fuite de mémoire lors de l'exécution de gridsearchcv. Cela se produit lorsque je cours avec 1 ou 32 travailleurs simultanés (n_jobs = -1). Auparavant, j'ai exécuté ce tas de fois sans problème sur Ubuntu 16.04, mais récemment mis à niveau vers 18.04 et fait une mise à niveau RAM.
import os
import pickle
from xgboost import XGBClassifier
from sklearn.model_selection import GridSearchCV,StratifiedKFold,train_test_split
from sklearn.calibration import CalibratedClassifierCV
from sklearn.metrics import make_scorer,log_loss
from horsebet import performance
scorer = make_scorer(log_loss,greater_is_better=True)
kfold = StratifiedKFold(n_splits=3)
# import and split data
input_vectors = pickle.load(open(os.path.join('horsebet','data','x_normalized'),'rb'))
output_vector = pickle.load(open(os.path.join('horsebet','data','y'),'rb')).ravel()
x_train,x_test,y_train,y_test = train_test_split(input_vectors,output_vector,test_size=0.2)
# XGB
model = XGBClassifier()
param = {
'booster':['gbtree'],
'tree_method':['hist'],
'objective':['binary:logistic'],
'n_estimators':[100,500],
'min_child_weight': [.8,1],
'gamma': [1,3],
'subsample': [0.1,.4,1.0],
'colsample_bytree': [1.0],
'max_depth': [10,20],
}
jobs = 8
model = GridSearchCV(model,param_grid=param,cv=kfold,scoring=scorer,pre_dispatch=jobs*2,n_jobs=jobs,verbose=5).fit(x_train,y_train)
Renvoie: UserWarning: Un travailleur s'est arrêté alors que certains travaux étaient donnés à l'exécuteur. Cela peut être dû à un délai d'attente trop court ou à une fuite de mémoire. "timeout ou par une fuite de mémoire.", UserWarning
OU
TerminatedWorkerError: Un processus de travail géré par l'exécuteur a été interrompu de manière inattendue. Cela peut être dû à une erreur de segmentation lors de l'appel de la fonction ou à une utilisation excessive de la mémoire provoquant la mort du travailleur par le système d'exploitation. Les codes de sortie des travailleurs sont {SIGKILL (-9)}
Cependant, ce n'est pas tout à fait le même problème, j'ai rencontré la même erreur avec la méthode skopt gp_minimize (). Même si la documentation indique que gp_minimize () prend en charge n_jobs, il a commencé à échouer sur mon mac. Lorsque je l'ai déplacé n_jobs vers le XGBClassifier sous-jacent, cela a bien fonctionné.
gp_minimize(_minimize, param_space, n_calls=20, n_random_starts=3, random_state=2405)
xgb = xgboost.XGBClassifier(
n_estimators=1000, # use large n_estimators deliberately to make use of the early stopping
objective='binary:logistic',
n_jobs=-1
)