2017-02-09 20 views
0

Его нужно делать сПараллелизм в XGBoost технике машинного обучения

реализации параллельности XGBoost

Я пытаюсь оптимизировать выполнение XGBoost, придав ему параметр nthread = 16, где моя система имеет 24 ядра. Но когда я тренирую свою модель, она, кажется, даже не пересекает примерно 20% загрузки процессора в любой момент времени, пока обучение модели. Фрагмент кода выглядит следующим образом: -

param_30 <- list("objective" = "reg:linear", # linear 
       "subsample"= subsample_30, 
       "colsample_bytree" = colsample_bytree_30, 
       "max_depth" = max_depth_30, # maximum depth of tree 
       "min_child_weight" = min_child_weight_30, 
       "max_delta_step" = max_delta_step_30, 
       "eta" = eta_30, # step size shrinkage 
       "gamma" = gamma_30, # minimum loss reduction 
       "nthread" = nthreads_30, # number of threads to be used 
       "scale_pos_weight" = 1.0 
) 
model <- xgboost(data = training.matrix[,-5], 
       label = training.matrix[,5], 
       verbose = 1, nrounds=nrounds_30, params = param_30, 
       maximize = FALSE, early_stopping_rounds = searchGrid$early_stopping_rounds_30[x]) 

Пожалуйста, объясните мне (если возможно) о том, как я могу увеличить загрузку процессора и ускорить модель подготовки для эффективного выполнения. Код в R должен быть полезен для дальнейшего понимания.

Допущение: - Речь идет о выполнении в R пакете XGBoost

+0

Добро пожаловать на SO - Не могли бы вы предоставить [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to -make-а-большой-R-воспроизводимый-пример) – C8H10N4O2

ответ

0

Это предположение ... но у меня было это случилось со мной ...

Вы тратите гораздо время обменивается во время параллелизма и никогда не получает привязки к процессору. https://en.wikipedia.org/wiki/CPU-bound

Нижняя строка - ваши данные недостаточно велики (строки и столбцы) и/или ваши деревья недостаточно глубоки max_depth, чтобы гарантировать, что многие ядра. Слишком много накладных расходов. xgboost распараллеливает раздельные оценки, поэтому глубокие деревья на больших данных могут поддерживать процессор, напевая при макс.

Я обучил много моделей, где однопоточные превосходят 8/16 ядер. Слишком много времени переключения и недостаточно работы.

** БОЛЬШЕ ДАННЫХ, Deeper ДЕРЕВЬЯ ИЛИ МЕНЕЕ CORES :) **