Snakemake: вытеснение задания может прерывать запущенные задания на кластерах, как сделать так, чтобы задание не считалось неудачным?

Я использую Snakemake в кластере и не знаю, как лучше справиться с тем фактом, что некоторые задания могут быть вытеснены.

Для большей мощности кластера, который я использую, можно получить доступ к ресурсам других команд, но с риском быть вытесненным, который заключается в остановке выполняемой работы и ее изменении. Он будет запущен снова, как только будет доступен ресурс. Это особенно полезно, когда у вас есть много быстрых заданий для выполнения. К сожалению, у меня нет впечатления, что Snakemake поддерживает это должным образом.

В примере, приведенном в справке по функции cluster-status для Slurm, в списке running_status (running_status=["PENDING", "CONFIGURING", "COMPLETING", "RUNNING", "SUSPENDED"]) нет PREEMPTED, что может привести к сбою вытесненного задания. Ничего страшного, я добавил PREEMPTED в этот список, но меня заставили поверить, что Snakemake не рассматривал этот сценарий.

Что еще более раздражает, даже при запуске Snakemake с параметром --rerun-incomplete, когда задание прерывается вытеснением, а затем перезапускается, я получаю следующую ошибку:

IncompleteFilesException:
The files below seem to be incomplete. If you are sure that certain files are not incomplete, mark them as complete with

    snakemake --cleanup-metadata <filenames>

To re-generate the files rerun your command with the --rerun-incomplete flag.

Я ожидаю, что прерванная работа будет перезапущена с нуля.

На данный момент единственное решение, которое я нашел, — это прекратить использовать ресурсы других команд, чтобы избежать вытеснения моих рабочих мест, но я теряю вычислительную мощность.

Как вы используете Snakemake в контексте, когда ваши задания могут быть вытеснены? Кто-нибудь видел решение, поэтому я больше не получаю IncompleteFilesException?

заранее спасибо


person Thomas Bigot    schedule 29.04.2021    source источник


Ответы (2)


Snakemake имеет функцию перезапуска, которую можно использовать для автоматической повторной отправки заданий. Тем не менее, в настоящее время нет специальной обработки для упреждающего действия. Вы тоже правы, я даже не знал, что что-то подобное существует на слёрме. Пиар в этом направлении, конечно, приветствуется. По сути, нужно было бы расширить обработку сценария состояния, чтобы распознать это, и в этом случае перезапустить задание.

person Johannes Köster    schedule 04.05.2021

Спасибо, что сообщили об этом, я вижу здесь две отдельные проблемы:

  1. Обработка статуса PREEMPTED, возвращенного slurm.
  2. IncompleteFilesException предлагает вам использовать --rerun-incomplete, когда это именно то, что вы делаете.

<сильный>1. PREEMPTED обработка статуса

У меня нет опыта использования slurm, поэтому я не могу прокомментировать, будет ли пример сценария в документах, на которые вы ссылаетесь, работать для slurm. В частности, выражение в output = str(subprocess.check_output(expression)), возможно, придется каким-то образом скорректировать, чтобы оно было невнятным. Может быть, здесь есть кто-то, кто также использует slurm и нашел работающее решение в прошлом?

Но в противном случае добавление PREEMPTED в список running_status должно быть именно тем, что вы хотите сделать (при условии, что это именно тот тег, который возвращает expression).

Если это нужно адаптировать для slurm и вам удалось сгенерировать работающий скрипт status.py, возможно, стоит добавить его в документы через запрос на включение на этот файл, чтобы другим пользователям slurm не пришлось заново изобретать решение.

<сильный>2. IncompleteFilesException с флагом --rerun-incomplete

Судя по общему описанию, это немного похоже на баг. Но без каких-либо подробностей я не могу быть уверен. Но, возможно, стоит описать это более подробно, пока регистрирует проблему в репозитории змеи. Либо просто предоставив более подробную информацию, либо даже предоставив минимальный пример для воспроизведения этого поведения.

person dlaehnemann    schedule 04.05.2021