как выбрать --nthreads и --nprocs для каждого воркера в распределенной dask?

Как мы выбираем --nthreads и --nprocs для каждого воркера в распределенном Dask? У меня есть 3 рабочих, с 4 ядрами и одним потоком на ядро ​​на 2 рабочих и 8 ядер на 1 рабочий (согласно выходным данным команды lscpu Linux для каждого рабочего).


person Harish Rajula    schedule 21.03.2018    source источник


Ответы (1)


Это зависит от вашей нагрузки

По умолчанию Dask создает один процесс с таким количеством потоков, сколько у вас есть логических ядер на вашем компьютере (как определено multiprocessing.cpu_count()).

dask-worker ... --nprocs 1 --nthreads 8  # assuming you have eight cores
dask-worker ...                          # this is actually the default setting

Использование нескольких процессов и большого количества потоков для каждого процесса хорошо, если вы выполняете в основном числовые рабочие нагрузки, такие как обычные в коде Numpy, Pandas и Scikit-Learn, на который не влияет глобальная блокировка интерпретатора Python ( ГИЛ).

Однако, если вы тратите большую часть своего вычислительного времени на манипулирование объектами Pure Python, такими как строки или словари, вы можете избежать проблем с GIL, создавая больше процессов с меньшим количеством потоков каждый.

dask-worker ... --nprocs 8 --nthreads 1

На основе сравнительного анализа вы можете обнаружить, что более сбалансированное разделение лучше.

dask-worker ... --nprocs 4 --nthreads 2

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

person MRocklin    schedule 21.03.2018