Я запускаю большой конвейер snakemake
(v5.3.0), используя планировщик slurm
(v14.11.4).К сожалению, ~ 1/1000 заданий аварийно завершают работу с NODE_FAILED (ExitCode 0), который snakemake не распознает, что приводит к половине готовых выходных файлов.скрипт, который анализирует jobid
с использованием sacct
, должен сработать.Чтобы выполнить эту работу, я изменил скрипт, который нашел в сети, и теперь он выглядит так:
#!/usr/bin/env python3
import os
import sys
import warnings
import subprocess
jobid = sys.argv[1]
state = subprocess.run(['sacct','-j',jobid,'--format=State'],stdout=subprocess.PIPE).stdout.decode('utf-8')
state = state.split('\n')[2].strip()
map_state={"PENDING":'running',
"RUNNING":'running',
"SUSPENDED":'running',
"CANCELLED":'failed',
"COMPLETING":'running',
"COMPLETED":'success',
"CONFIGURING":'running',
"FAILED":'failed',
"TIMEOUT":'failed',
"PREEMPTED":'failed',
"NODE_FAIL":'failed',
"REVOKED":'failed',
"SPECIAL_EXIT":'failed',
"":'success'}
print(map_state[state])
Скрипт отлично работает в командной строке.Тем не менее, при запуске Snakemake, как указано ниже:
SM_ARGS="--cpus-per-task {cluster.cpus-per-task} --mem-per-cpu {cluster.mem-per-cpu-mb} --job-name {cluster.job-name} --ntasks {cluster.ntasks} --partition {cluster.partition} --time {cluster.time} --mail-user {cluster.mail-user} --mail-type {cluster.mail-type} --error {cluster.error} --output {cluster.output}"
snakemake -p \
$* \
--latency-wait 120 \
-j 600 \
--cluster-config $(dirname $0)/cluster.slurm.json \
--cluster "sbatch $SM_ARGS" \
--cluster-status ~/scripts/snakemake/slurm_status.py
Он начинает отправлять первый пакет из 600 заданий и, как правило, сразу же останавливается без дополнительных заданий.Тем не менее, все первоначально представленные задания завершаются успешно.Журнал snakemake выдает после того, как все задания переданы единой ошибке:
sacct: error: slurmdbd: Getting response to message type 1444
sacct: error: slurmdbd: DBD_GET_JOBS_COND failure: No error
Я предполагаю, что моя команда неправильно анализирует jobid
в slurm_status.py
.Тем не менее, я не знаю, как snakemake анализирует jobid
с slurm_status.py
, и Google не смог ответить на этот вопрос (ни разреженной информации, полученной с помощью snakemake --help
).
Спасибо за вашу поддержку.