XGBoost и перекрестная проверка параллельно - PullRequest
0 голосов
/ 05 июля 2019

Я вижу, что и XGBClassifier(), и sklearn.model_selection.RandomizedSearchCV() имеют параметр n_jobs. Я выполнил CV и увидел, что, установив n_jobs = -1 (в обоих), я использовал 16 рабочих, которые у меня были:

Fitting 5 folds for each of 30 candidates, totalling 150 fits
[Parallel(n_jobs=-1)]: Using backend LokyBackend with 16 concurrent workers.
[Parallel(n_jobs=-1)]: Done   9 tasks      | elapsed: 13.7min
[Parallel(n_jobs=-1)]: Done  18 tasks      | elapsed: 20.4min
[Parallel(n_jobs=-1)]: Done  29 tasks      | elapsed: 23.7min
[Parallel(n_jobs=-1)]: Done  40 tasks      | elapsed: 28.7min
[Parallel(n_jobs=-1)]: Done  53 tasks      | elapsed: 36.1min
[Parallel(n_jobs=-1)]: Done  66 tasks      | elapsed: 43.4min
[Parallel(n_jobs=-1)]: Done  81 tasks      | elapsed: 47.6min
[Parallel(n_jobs=-1)]: Done  96 tasks      | elapsed: 50.8min
[Parallel(n_jobs=-1)]: Done 113 tasks      | elapsed: 60.0min
[Parallel(n_jobs=-1)]: Done 135 out of 150 | elapsed: 73.1min remaining: 8.1min
[Parallel(n_jobs=-1)]: Done 150 out of 150 | elapsed: 85.7min finished

Я не могу повторить анализ сейчас, но я предполагаю, что распараллеливание произошло из-за n_jobs=1 в RandomizedSearchCV().

Я очень мало знаю о параллельных вычислениях. Я понимаю, что RandomizedSearchCV() выполняет каждую настройку параметров независимо, но как она работает в бетоне при распараллеливании? А что насчет n_jobs=-1 en XGBClassifier()? Имеет ли смысл устанавливать этот параметр в обеих функциях?

1 Ответ

1 голос
/ 06 июля 2019

В: Имеет ли смысл устанавливать этот параметр в обеих функциях?

Короткая версия: Нет, это не так.

Требуется более длинная версиячтобы немного понять, как на самом деле обрабатываются n_jobs.

Наличие нескольких дорогостоящих ресурсов (верно, процессорных ядер как таковых, самых быстрых исамые дорогие элементы локальной иерархии кэша ЦП (не столь глубокие, чтобы изучать строки кэша и их соответствующую ассоциативность на этом уровне) и менее дорогие, а также более медленные ОЗУ), n_jobs = -1 Директива в первой выполненной сигнатуре вызова просто захватит все эти ресурсы сразу.

Это означает, что не будет разумно "свободных" ресурсов для любых "более глубоких" уровней попытки использовать -again- «столько ресурсов», сколько физически доступно (что n_jobs = -1 делает и подчиняется этому снова, но не имея «свободного», оставшегося неиспользованным от первого, в ext будет просто разрушительный хаоспомните «переподписанные» (перегруженная очередь задач для очень немногих реальных (и, следовательно, ни в коем случае не свободных в ближайшем будущем) ресурсов для использования) планирование O / S по планированию задач параллелизма пытается сопоставить / evict / map / evict / map/ evict, таким образом, больше заданий обработки на тех же реальных (и уже довольно занятых) аппаратных элементах).

Часто даже первая попытка может создать проблемы на стороне выделения ОЗУ, поскольку для больших моделей потребуется много репликацийвсе структуры данных ОЗУ во время создания экземпляров процесса (целая копия фактически создается со всеми объектами, использованными или не использованными, реплицированными в каждый новый процесс), так как количество ядер ЦП "диктует".Результирующие перестановки памяти - это то, что вы никогда не захотите повторять.

Наслаждайтесь настройкой модели HyperParameters - это практика Creame a la Creame машинного обучения.Стоит быть хорошим в.

...