slurm: ошибка DependencyNeverSatisfied даже после того, как аварийное задание было помещено в очередь - PullRequest
0 голосов
/ 13 мая 2018

Моя цель - построить конвейер, используя зависимости от slurm, и обработать случай, когда задание slurm завершается сбоем.

Исходя из следующих ответов и руководства 29-го раздела, рекомендуется использовать scontrol requeue $jobID, который поставит в очередь уже отмененное задание.

если сбой задания можно обнаружить из сценария отправки, и аварии случаются случайно, вы можете просто запросить задание с помощью scontrol requeue $SLURM_JOB_ID, чтобы оно снова запустилось.


После того, как я поставил в очередь отмененную работу, ее зависимая работа остается как DependencyNeverSatisfied, и даже зависимая работа завершена, ничего не происходит. Есть ли способ обновить состояние зависимого задания, если отмененное задание снова ставится в очередь?

Пример:

$ sbatch run.sh
Submitted batch job 1
$ sbatch  --dependency=aftercorr:1 run.sh
$ squeue
         JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
            89     debug   run.sh    alper PD       0:00      1 (Dependency)
            88     debug   run.sh    alper  R       0:23      1 ebloc1

$ scancel 1
$ squeue
         JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
            89     debug   run.sh    alper PD       0:00      1 (DependencyNeverSatisfied)

$ scontrol requeue 1
$ squeue
         JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
            89     debug   run.sh    alper PD       0:00      1 (DependencyNeverSatisfied)
            88     debug   run.sh    alper  R       0:00      1 ebloc1
#After running job completed dependent job still remain as DependencyNeverSatisfied state:
$ squeue
         JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
            89     debug   run.sh    alper PD       0:00      1 (DependencyNeverSatisfied)

1 Ответ

0 голосов
/ 31 мая 2018

После того, как я поставил в очередь отмененную работу, ее зависимая работа остается как DependencyNeverSatisfied, и даже зависимая работа завершена, ничего не происходит.Есть ли способ обновить состояние зависимого задания, если отмененное задание снова ставится в очередь?

Да, это довольно просто.Сбросьте зависимость с помощью scontrol.

scontrol update jobid = [идентификатор зависимого задания] зависимость = после: [идентификатор заданного задания]

Я сделал это в качестве примера с версией Slurm 17.11:

$ sbatch --begin=now+60 --wrap="exit 1"                   
Submitted batch job 540912

$ sbatch --dependency=afterok:540912 --wrap=hostname 
Submitted batch job 540913

$ squeue 
         JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
        540912     debug     wrap marshall PD       0:00      1 (BeginTime)
        540913     debug     wrap marshall PD       0:00      1 (Dependency)
$ scancel 540912
$ scontrol requeue 540912
$ squeue 
         JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
        540912     debug     wrap marshall PD       0:00      1 (BeginTime)
        540913     debug     wrap marshall PD       0:00      1 (DependencyNeverSatisfied)

На данный момент, я повторил вашу ситуацию.Задание 540912 было поставлено в очередь, а задание 540913 имеет причину "DependencyNeverSatisfied".

Теперь вы можете исправить это, введя scontrol update job:

$ scontrol update jobid=540913 dependency=after:540912
$ squeue 
         JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
        540912     debug     wrap marshall PD       0:00      1 (BeginTime)
        540913     debug     wrap marshall PD       0:00      1 (Dependency)

Состояние исправлено!После запуска задания также выполняется зависимое задание: вывод

$ scontrol update jobid=540912 starttime=now
$ squeue 
         JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
        540912     debug     wrap marshall CG       0:00      1 v1
        540913     debug     wrap marshall PD       0:00      1 (Dependency)
$ squeue 
         JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)

squeue пуст, поскольку задание уже выполнено.

Вы можете увидеть задания после их завершенияс sacct:

$ sacct -j 540912,540913
       JobID    JobName  Partition    Account  AllocCPUS      State ExitCode 
------------ ---------- ---------- ---------- ---------- ---------- -------- 
540912             wrap      debug       test          2     FAILED      1:0 
540912.batch      batch                  test          2     FAILED      1:0 
540912.exte+     extern                  test          2  COMPLETED      0:0 
540913             wrap      debug       test          2  COMPLETED      0:0 
540913.batch      batch                  test          2  COMPLETED      0:0 
540913.exte+     extern                  test          2  COMPLETED      0:0 
...