#parallel-processing #joblib #batchsize
#параллельная обработка #joblib #размер пакета
Вопрос:
Допустим, у меня есть генератор / список размером 50000. И я хочу использовать его как:
batches = range(0, 50001)
Parallel(n_jobs=multiprocessing.cpu_count(), verbose=100,
backend="threading", batch_size=?, pre_dispatch=?)(delayed(<function>)(it) for it in batches)
Не могли бы вы, пожалуйста, сказать мне, каким было бы правильное значение в batch_size и pre_dispatch, если я хочу обработать 20 000 элементов за один раз / или я хочу, чтобы поток / процессор обрабатывал 20 000 элементов как одну задачу?
Ответ №1:
Для обработки на одном процессоре 20000 элементов, batch_size=20000.
Предварительная отправка по умолчанию отправляется на 2процессора. По логике сохранения загруженности ЦП, вероятно, должно быть 2batch_size, поэтому pre_dispatch = 40000. Также заманчиво установить pre_dispatch=’all’, однако это работает, если задачи примерно эквивалентны по времени. 2 * batch_size, чтобы избежать простоя одного процессора, если есть большое расхождение во времени / задаче.
По моему собственному опыту, лучше иметь больший batch_size, если каждая операция выполняется быстро, чтобы сократить ввод-вывод.