Параллельная обработка с xgboost и кареткой
Я хочу распараллелить процесс подбора модели для xgboost при использовании каретки. Из того, что я видел в xgboost'sдокументация,nthread
Параметр контролирует количество потоков, используемых при подборе моделей, в смысле параллельного построения деревьев. Каре-хtrain
Функция будет выполнять распараллеливание в смысле, например, запуска процесса для каждой итерации в k-кратном CV. Является ли это понимание правильным, если да, то лучше:
doMC
пакет иregisterDoMC
функция), установитьnthread=1
через функцию поезда кареты, так что он передает этот параметр в xgboost, установитеallowParallel=TRUE
вtrainControl
, и разрешиcaret
обрабатывать распараллеливание для перекрестной проверки; или жеОтключить распараллеливание карет (allowParallel=FALSE
и нет параллельной внутренней регистрации) и установитьnthread
на количество физических ядер, поэтому распараллеливание содержится исключительно в xgboost.Или нет «лучшего» способа выполнить распараллеливание?
Редактировать: Я запустил код, предложенный @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
В итоге оказалось, что как для моих данных, так и для этого тестового примера, возможность каретного выполнения распараллеливания была лучшим выбором с точки зрения времени выполнения.