#dask #dask-distributed #dask-delayed
#dask #dask-распределенный #dask-задержка
Вопрос:
Если я раскручиваю кластер dask с N работниками, а затем отправляю более N заданий с использованием cluster.compute
, пытается ли dask запускать все задания одновременно (планируя более 1 задания для каждого работника) или задания ставятся в очередь и выполняются последовательно?
Мой недавний опыт выполнения этого, похоже, предполагает последнее. Каждое задание требует больших затрат памяти, и отправка большего количества заданий, чем рабочих, приводит к их сбою из-за проблем с памятью.
Есть ли способ заставить dask строго выполнять только 1 задание на 1 работника одновременно и ставить в очередь другие задания?
Ответ №1:
Поведение по умолчанию определяется размером кластера. Если число работников больше 4, dask пытается угадать, какое количество потоков использовать в каждом работнике. Если вы хотите изменить это поведение, вы можете изменить количество потоков на одного работника с threads_per_worker
помощью ключевого слова аргумент при создании кластера:
cluster = LocalCluster(threads_per_worker=1)
client = Client(cluster)
cluster.compute(...)
Если вы используете SSHCluster, вам нужно передать количество потоков на одного работника в качестве аргумента рабочему:
cluster = SSHCluster(worker_options={"nthreads": 1})
client = Client(cluster)
cluster.compute(...)