Какой многопроцессорный метод следует использовать для обучения машинному обучению + тесты на точность?

У меня есть функция, которая принимает массив и возвращает число.

Я хочу запустить эту функцию на 10 различных входных массивах, а затем вернуть сумму всех результатов.
Как лучше всего сказать Python выполнять эти 10 вычислений параллельно на компьютере с 4 ядрами?

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

РЕДАКТИРОВАТЬ:
функция является функцией машинного обучения:
он разбивает входной массив на две части - "train"а"test"часть DataSET. Он обучает определенный классификатор на"train"часть, и возвращает точность прогноза такого обученного классификатора на"test" часть.

1 ответ

Лучше всего использовать тот, который лучше всего "Справедливый делит пирог с обожженными частями... "

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

Учитывая несколько фактов выше,
подход к решению проблемы также сильно зависит от масштаба.

Учитывая машинное обучение было добавлено,
проблема не просто общая и тривиальная [SEQ]-[PAR]-[SEQ] конвейер для обработки 10 различных массивов и суммирования частичных результатов.

Чем больше становится ML-DataSET,
тем больше будет "сгоревших частей торта"

Находясь внутри царства numpy / python и их инструменты для машинного обучения, ваши движущие силы будут не волей "распараллеливать", а скорее затратами на это. Конвейеры машинного обучения для решения реальных задач могут легко занять большие единицы или несколько десятков часов, чтобы пройти обучение, используя все, да ВСЕ локальные доступные процессорные ядра, только для одного train часть DataSET. Эффективность, профессионально встроенная в numpy / numba / scikit Инструменты не так-то просто значительно увеличить, поэтому не ожидайте, что какой-нибудь низко висящий фрукт окажется где-то рядом с этим участком. Для получения более подробной информации об этом, вы можете прочитать этот пост.

Память важнее всего.

Для небольших наборов данных, [PSPACE] -расходы с точки зрения использования памяти останутся более простыми, но это также будет означать, что будет труднее заплатить все [PTIME] - расходы, которые придется оплачивать за каждый параллельный процесс, да, непроизводительные издержки, всегда нужно платить за вход на шоу: { instantiation + setup + control + finalisation + dismantling } что в данном случае (для небольших наборов данных) вряд ли будет оправдано каким-либо повышением производительности обработки, что может быть вызвано попыткой использовать параллельную обработку при решении слишком мелких задач.

Доступные ресурсы обработки имеют значение почти одинаково

В случае, когда процессу предписано одновременное управление 10 экземплярами процесса, определяющим фактором является свободная емкость всех классов ресурсов, которые имеют отношение к плавному выполнению такого процесса, - свободный (и лучший непрерывный) процессор -core ( HT-off), имеющий неблокируемый доступ к достаточному количеству (свободного / частного >> рабочего набора) оперативной памяти (без подкачки памяти, без перестановок виртуальной памяти) плюс минимальный (или точно настроенный) дисковый ввод-вывод,

В тех случаях, когда возможности таких ресурсов не позволяют всем именованным 10 экземплярам процесса машинного обучения действительно беспрепятственно выполняться параллельно, другой, "просто"- [CONCURRENT] планирование происходит, и можно сразу забыть все теоретические обещания Закона Амдала (даже из оригинальной, "классической", наивно-наивной формулировки).

Хотя для всех очевидно, что, если в пятизвездочный отель Marriott приедет автобус с туристами, который будет оборудован всего лишь парой лифтов со стойки регистрации, для всех таких новых гостей просто принципиально невозможно добраться до их номера. в то же время - та же проблема не так кристально чиста, как в почти такой же [PARALLEL] - планирование процессов, и многие пользователи запускаются одинаково - спрашивая " Почему мой параллельный код медленнее, чем последовательный запуск? " или " Почему ускорение моего параллельного кода не масштабируется? ".

При этом вам придется максимизировать пулы аппаратных ресурсов и очень тщательно сбалансировать параллельную обработку (настройка + завершение)- накладные расходы, потому что, по крайней мере, нет возможности заплатить меньше, чем вы потенциально можете получить (оправдать накладные расходы) идти параллельно ЛЮБЫМ ЗАТРАТАМ - это просто разрушительная политика, и любой, кто посоветовал вам попытаться пойти в этом априорном направлении проигранной игры (с точки зрения затрат / выгод).

Другие вопросы по тегам