Я хочу распараллелить процесс подгонки модели для xgboost при использовании каретки. Из того, что я видел в xgboost's documentation, параметр nthread
управляет количеством потоков, используемых при установке моделей, в смысле создания параллельных деревьев. Функция Caret's train
будет выполнять распараллеливание в смысле, например, выполнения процесса для каждой итерации в k-кратном CV. Является ли это понимание правильно, если да, то лучше:Параллельная обработка с помощью xgboost и каретки
- Зарегистрируйте число ядер (например, с
doMC
пакета и функцииregisterDoMC
), установитеnthread=1
с помощью функции поезда CARET так, чтобы он передает этот параметр xgboost, установитеallowParallel=TRUE
вtrainControl
, и пустьcaret
обрабатывает распараллеливание для перекрестной проверки; или - Отключить каретную распараллеливание (
allowParallel=FALSE
и отсутствие параллельной регистрации на заднем плане) и установитьnthread
на количество физических ядер, поэтому распараллеливание содержится исключительно в xgboost.
Или нет «лучшего» способа выполнения распараллеливания?
Edit: Я побежал код, предложенный @topepo, с tuneLength = 10
и search="random"
, и указав nthread=1
на последней строке (в противном случае я понимаю, что xgboost будет использовать многопоточность). Есть результаты, которые я получил:
xgb_par[3]
elapsed
283.691
just_seq[3]
elapsed
276.704
mc_par[3]
elapsed
89.074
just_seq[3]/mc_par[3]
elapsed
3.106451
just_seq[3]/xgb_par[3]
elapsed
0.9753711
xgb_par[3]/mc_par[3]
elapsed
3.184891
В конце концов, оказалось, что и для моих данных и для этого теста, выпускающего кареткой обрабатывать распараллеливание был лучшим выбором с точки зрения выполнения.
Избежание тот факт, что перекрестная проверка не является «подгонки модели», нет никаких причин, эти параметры должны быть взаимоисключающими. Независимо от того, вопрос основан на мнениях, и я голосую, чтобы закрыть. Вы не определили «лучше»; но, я полагаю, вы имеете в виду меньше времени выполнения ... Вы всегда можете профилировать свой код. Для этого я предлагаю 'library (microbenchmark). –
Возможно, есть недоразумение в терминологии. Конечно, конечной целью кросс-валидации является проверка модели, но то, что я подразумевал под «подгонкой модели», заключается в том, что на каждой итерации вам нужно подгонять модель по сложениям (k-1). Причина этого вопроса заключается в том, что я не знаю, по строительству, есть теоретически лучший способ сделать распараллеливание (например, может быть больше накладных расходов при росте большего количества потоков на итерацию, чем распараллеливание цикла повторной выборки), и было интересно, если кто-то более опытный мог бы посоветовать в этом. Но это правда, что это может быть зависимым от случая. – drgxfs