DASK рабочие с разным временем работы - PullRequest
0 голосов
/ 14 марта 2019

Я использую dask-jobqueue для запуска многих 2-5-минутных заданий (с использованием подпроцесса) на небольшом кластере SLURM. У меня в общей сложности несколько тысяч рабочих мест, и я бы хотел, чтобы мои работники иногда умирали и возвращались через SLURM, чтобы быть добрыми к другим пользователям. На сайте документации dask-jobqueue есть отрывок:

Итак, чтобы быстро получить большой кластер, мы рекомендуем разместить процесс планировщика dask на одном узле с небольшим временем простоя (предполагаемое время вашего сеанса), а затем распределить много небольших одноузловых рабочих мест dask-worker с более коротким время стены (возможно, 30 минут), которое может легко втиснуться в дополнительное пространство в планировщике заданий. Если вам нужно больше вычислений, вы можете добавить больше этих одноузловых заданий или дать им истечь.

Это очень похоже на то, что я хочу сделать, но мой вопрос: как вы это настраиваете?

Если я настрою свой кластер с общим временем работы на стене, требуемым для моего полного прогона (~ 24 часа), я не могу понять, как запустить рабочих с более коротким временем работы:

# setup cluster, launch one worker with 24hr walltime
In [1]:from dask_jobqueue import SLURMCluster
   ...:cluster = SLURMCluster(memory='8g',cores=4,walltime='24:00:00')
   ...:cluster.start_workers(1)
Out[1]:SLURMCluster(cores=0, memory=0 B, workers=0/1, jobs=0/1)

# try to launch a worker with shorter walltime???
In [2]:cluster.start_workers(100,walltime='00:30:00')
TypeError                                 Traceback (most recent call last)
<ipython-input-16-77ae6b0ed75d> in <module>
----> 1 cluster.start_workers(100,walltime='00:30:00')

TypeError: start_workers() got an unexpected keyword argument 'walltime'

Если я попытаюсь сначала использовать время ожидания в 30 минут, все рабочие умирают одновременно (обычно), что приводит к сбою DASK.

Я нашел один пример , где дополнительные аргументы были переданы отдельным работникам, но это были ресурсы, и они были переданы после запуска рабочих (в этот момент я предполагаю ограничение по времени на стене уже установлено).

Есть ли способ назначить свойства, такие как walltime для каждой работы, когда они инициализируются?

1 Ответ

1 голос
/ 16 марта 2019

Время, которое вы указываете здесь, предназначено для рабочих, а не для планировщика.

SLURMCluster(memory='8g',cores=4,walltime='24:00:00')

Планировщик запускается везде, где вы запускаете объект SLURMCluster (который, если вы не упомянули его, возможно, находится на интерактивном узле?)

You 'Правильно, что все ваши работники умрут одновременно, если вы начнете их всех одновременно.Если вы хотите, чтобы на их место приходило больше работников, вы можете использовать метод adapt, чтобы убедиться, что на их место приходят новые работники.

cluster.adapt(minimum=100, maximum=100)
...