Автоматический / динамический многопроцессорный питон - PullRequest
0 голосов
/ 28 октября 2018

У меня есть Случайный Лес, и я использую проверку K-кратности, я пытаюсь найти оптимальные значения для глубины и некоторых других параметров. Я использую процессор QuadCore, таким образом, я пытаюсь выяснить, как я могу выполнить итерацию, скажем, max_depth = range(50,101), так что, когда одно из ядер завершает подгонку своего леса к max_depth, оно автоматически принимает следующие max_depth в список. Или лучше разделить max_depth на 4 равных размера и просто выполнить 4 процесса вручную?

1 Ответ

0 голосов
/ 29 октября 2018

ИМХО, лучшим решением было бы использование очередей и создание процесса вручную.Таким образом, вы получаете полный контроль над процессами.

  1. Создайте свою функцию, которая выполняет случайный лес после получения его max_depth из входной очереди.Выдвиньте результат в очередь вывода.
  2. Вы поместите все свои значения max_depth в очередь ввода
  3. Вы создаете ряд процессов, которые лучше всего соответствуют вашей архитектуре.Как правило, 8 процессов для 4 ядер (с Hyperthreading) являются отправной точкой goot
  4. Запустите процессы.

После запуска процессов каждый из них получит один аргумент из входной очереди иделает ваш RandomForest.После завершения одного процесса он помещает результат в другую очередь и получает другой аргумент из входной очереди.Используя очередь, вам не нужно заботиться о том, какой процесс завершается первым и т. Д., Поскольку очереди потокобезопасны, так что только один процесс может получить к ним доступ.Любой другой будет ждать доступа.Вам также не придется беспокоиться о том, каково ваше лучшее разделение списка max_depth.Как только один процесс завершается, он автоматически получает новое значение для расчета.Если в очереди ничего нет, он останавливается.

Я обычно предпочитаю этот тип многопроцессорной обработки, чем Pool, так как у меня немного больше контроля. Здесь - небольшой пример.

...