Joblib, Parallel и batch_size

Допустим, у меня есть генератор / список размером 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ЦП. В логике поддержания занятости CPU, вероятно, должно быть 2batch_size, поэтому pre_dispatch=40000. Также заманчиво установить pre_dispatch='all', однако это работает, если задачи примерно эквивалентны по времени. 2*batch_size, чтобы избежать простоя одного процессора, если есть большое расхождение во времени / задаче.

По моему собственному опыту, лучше иметь более высокий batch_size, если каждая операция выполняется быстро, чтобы уменьшить количество операций ввода-вывода.

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