Запуск случайного поиска в пакете mlr R в Ubuntu 18.04 занимает слишком много времени - PullRequest
1 голос
/ 22 октября 2019

У меня проблема при поиске оптимальных гиперпараметров 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 и ее возможностями распараллеливания? Я нашел несколько похожий вопрос здесь, но там также не было очевидного решения.

enter image description here

Когда я пытаюсь запустить это из терминала, а не из RStudio, все равно кажется, что ядра не задействованы: run script from terminal

terminal output

1 Ответ

2 голосов
/ 22 октября 2019

По вашему скриншоту ничего не работает. Исходя из вашей настройки, все ядра должны быть на 100%.

Ваша проблема не имеет отношения к вашей операционной системе как таковой. Фактически, Linux чаще всего является лучшим выбором, когда речь идет о распараллеливании.

Иногда возникают проблемы при объединении «многоядерного» режима с xgboost , см., Например, https://github.com/berndbischl/parallelMap/issues/72.

Вы можете просто попробовать еще раз. Если это не сработает, попробуйте переключить режим распараллеливания на «сокет».

Трудно определить истинный корень вашей проблемы, поскольку в игре участвует несколько игроков (порты, конфликты с openMP и т. Д.). .).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...