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