使用gridsearchcv的内存泄漏

wil*_*man 9 memory-leaks scikit-learn grid-search gridsearchcv

问题:运行gridsearchcv时,我的情况似乎是内存泄漏。当我使用1个或32个并发工作程序(n_jobs = -1)运行时,会发生这种情况。以前,我在ubuntu 16.04上运行了很多次,没有任何问题,但最近升级到了18.04,并进行了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)
Run Code Online (Sandbox Code Playgroud)

返回值: UserWarning:当一些作业交给执行者时,一个工人停止了。这可能是由于工作者超时时间太短或内存泄漏引起的。“超时或由于内存泄漏。”,UserWarning

要么

TerminatedWorkerError:由执行者管理的工作进程意外终止。这可能是由于调用函数时出现分段错误,也可能是由于过多的内存使用导致操作系统杀死了工作程序。工人的退出代码为{SIGKILL(-9)}

wil*_*man 11

我的问题的原因是,当将n_jobs = -1放置在分类器中时,我将其放置在gridsearchcv中。这样就解决了问题。

  • 我在AWS SageMaker中对xgboost进行GridSearch时遇到了同样的问题。在 GridSearchCV 中删除 n_jobs=-1 也解决了这个问题。 (2认同)