slurm: DependencyNeverSatisfied ошибка даже после того, как сбойное задание повторно поставлено в очередь

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

На основании следующего ответа и guide В 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)

person alper    schedule 13.05.2018    source источник


Ответы (1)


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

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

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

Я сделал это в качестве примера с 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 
person mgarey    schedule 30.05.2018