Параллельная обработка с 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

В итоге оказалось, что как для моих данных, так и для этого тестового примера, возможность каретного выполнения распараллеливания была лучшим выбором с точки зрения времени выполнения.

Ответы на вопрос(1)

Ваш ответ на вопрос