У меня проблемы с использованием всех ядер на компьютере для обучения и перекрестной проверки модели XGBoost.
Данные:
data_dmatrix = xgb.DMatrix(data=X,label=y, nthread=-1)
dtrain = xgb.DMatrix(X_train, label=y_train, nthread=-1)
dtest = xgb.DMatrix(X_test, label=y_test, nthread=-1)
Модель:
xg_model = XGBRegressor(objective='reg:linear', colsample_bytree= 0.3, learning_rate = 0.2,
max_depth = 5, alpha = 10, n_estimators = 100, subsample=0.4, booster = 'gbtree', n_jobs=-1)
а затем, если я буду заниматься модельным обучением с:
xgb.train(
xg_model.get_xgb_params(),
dtrain,
num_boost_round=500,
evals=[(dtest, "Test")],
early_stopping_rounds=200)
Это работает нормально, но для запуска xgboost используется только 1 поток. Процессор на 25%. Он игнорирует n_jobs=-1
Но если я сделаю перекрестную проверку с реализацией scikit-learn:
scores = cross_val_score(xg_model, X, y, cv=kfold, n_jobs=-1)
, тогда он использует все ядра. Как заставить xgb.train
и xgb.cv
использовать все ядра?