У меня проблема при поиске оптимальных гиперпараметров xgboost с использованием пакета mlr
в R с использованием метода случайного поиска в Ubuntu 18.04. Это код настройки для поиска:
eta_value <- 0.05
set.seed(12345)
# 2. Create tasks
train.both$y <- as.factor(train.both$y) # altering y in train.both!
traintask <- makeClassifTask(data = train.both,target = "y")
# 3. Create learner
lrn <- makeLearner("classif.xgboost",predict.type = "prob")
lrn$par.vals <- list(
objective="binary:logistic",
booster = "gbtree",
eval_metric="auc",
early_stopping_rounds=10,
nrounds=xgbcv$best_iteration,
eta=eta_value,
weight = train_data$weights
)
# 4. Set parameter space
params <- makeParamSet(
makeDiscreteParam("max_depth", values = c(4,6,8,10)),
makeNumericParam("min_child_weight",lower = 1L,upper = 10L),
makeDiscreteParam("subsample", values = c(0.5, 0.75, 1)),
makeDiscreteParam("colsample_bytree", values = c(0.4, 0.6, 0.8, 1)),
makeNumericParam("gamma",lower = 0L,upper = 7L)
)
# 5. Set resampling strategy
rdesc <- makeResampleDesc("CV",stratify = T,iters=10L)
# 6. Search strategy
ctrl <- makeTuneControlRandom(maxit = 60L, tune.threshold = F)
# Set parallel backend and tune parameters
parallelStartMulticore(cpus = detectCores())
# 7. Parameter tuning
timer <- proc.time()
mytune <- tuneParams(learner = lrn,
task = traintask,
resampling = rdesc,
measures = auc,
par.set = params,
control = ctrl,
show.info = T)
proc.time() - timer
parallelStop
Как вы видите, я распределяю задачу поиска по всем ядрам моего процессора. Проблема в том, что прошло более 5 дней, и задание все еще выполняется - это вывод mlr
для задания (отображается при запуске задания):
[Tune] Started tuning learner classif.xgboost for parameter set:
Type len Def Constr Req Tunable Trafo
max_depth discrete - - 4,6,8,10 - TRUE -
min_child_weight numeric - - 1 to 10 - TRUE -
subsample discrete - - 0.5,0.75,1 - TRUE -
colsample_bytree discrete - - 0.4,0.6,0.8,1 - TRUE -
gamma numeric - - 0 to 7 - TRUE -
With control class: TuneControlRandom
Imputation value: -0
Mapping in parallel: mode = multicore; level = mlr.tuneParams; cpus = 16; elements = 60.
Я использовал для запуска этогона моем ноутбуке MacBook Pro, и он закончился в течение примерно 8 часов. Ноутбук представлял собой 15-дюймовый процессор Intel Core i7 201 с тактовой частотой 2,6 ГГц (6 ядер) с 32 ГБ памяти DDR4. Теперь я запускаю его на намного более сильном компьютере - единственное, что изменилось, это то, что это ОС Ubuntu. Компьютер, на котором у меня возникла эта проблема, - это стационарный компьютер с процессором Intel i9-9900K @ 3,60 ГГц x 16 ядер. Рабочий стол - GNOME 3.28.2, тип ОС - 64-разрядный, и он имеет 64 ГБ ОЗУ.
Я приложил снимок экрана, который я сделал во время выполнения задачи поиска mlr
- он показывает, что невсе ядра процессора задействованы, что было наоборот, когда я запустил это на ноутбуке MacBook Pro.
В чем здесь проблема? Это как-то связано с системой Ubuntu и ее возможностями распараллеливания? Я нашел несколько похожий вопрос здесь, но там также не было очевидного решения.
Когда я пытаюсь запустить это из терминала, а не из RStudio, все равно кажется, что ядра не задействованы: