Размер задания, параллельный и batch_size

#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, если каждая операция выполняется быстро, чтобы сократить ввод-вывод.