РЕДАКТИРОВАТЬ: заголовок вопроса и теги были скорректированы после того, как было обнаружено, что описанное поведение проистекает не из SLURM, а из пакета R {drake}, который используется в качестве прокси для выполнения заданий массива SLURM.
У меня такая ситуация:
- Массив заданий Slurm из
n=70
с X CPU и Y Mem на задание - 120 задач для выполнения
- Для каждой задачи требуется один и тот же процессор + память, но для завершения требуется разное время
Это приводит к следующей ситуации:
Для задач 71-120 (после выполнения 1 - 70) у меня 50 активистов и 20 простаивающих. Простаивающие рабочие больше не будут работать и просто ждут, пока активные рабочие закончат работу.
Сейчас со временем заканчивают все больше и больше рабочих, и в какой-то момент у меня остается 5 активных и 65 незанятых. Предположим, что для выполнения последних 5 задач требуется некоторое время. В течение этого времени бездействующие рабочие блокируют ресурсы в кластере, а также постоянно выводят следующую информацию в свои соответствующие файлы журналов.
2021-04-03 19:41:41.866282 | > WORKER_WAIT (0.000s wait)
2021-04-03 19:41:41.868709 | waiting 1.70s
2021-04-03 19:41:43.571948 | > WORKER_WAIT (0.000s wait)
[...]
Есть ли способ отключить этих простаивающих работников и освободить ресурсы после того, как им больше не нужно будет выделять задачи? В настоящее время они ждут, пока будут выполнены все рабочие процессы, и только после этого освобождают ресурсы.
clustermq
worker)? Для проверки я бы запустил следующее: (1)sbatch --array=1-2 (sleep script with $SLURM_ARRAY_TASK_ID)
(2)clustermq::Q(Sys.sleep, time=c(1,60), n_jobs=2)
. Остается ли в вашей системе 2-е задание / работник в обоих случаях? - person Michael Schubert   schedule 04.04.2021clustermq
, но рабочие ждут из-за отправки через {drake}? - person pat-s   schedule 04.04.2021drake
определить, нужно ли еще проделать работу. Во всяком случае, не похоже, что причина в трепе. - person Michael Schubert   schedule 04.04.2021