Я использую 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 для каждой работы, когда они инициализируются?