Отправляйте новые задания с помощью snakemake, когда предыдущие не завершены в кластере SLURM - PullRequest
0 голосов
/ 09 марта 2019

Я запускаю Snakemake в SLURM кластере, и у меня такая проблема: кластер позволяет мне отправлять только несколько (около 20) заданий одновременно. После запуска snakemake.sh, что:

#!/bin/bash

INPUT_DIR=...

snakemake -j 190 --latency-wait 1000 --cluster-config cluster.json --
cluster "sbatch -A {cluster.A} -p {cluster.p} -t {cluster.time} --
output {cluster.output} --error {cluster.error} --nodes {cluster.nodes}
--ntasks {cluster.ntasks} --cpus-per-task {cluster.cpus} --mem {cluster.mem}"

Выполнено 20 заданий (не 190), и поэтому я в конечном итоге жду, пока все 20 завершат работу, а затем повторно выполню сценарий. Это не оптимально, очевидно. Допустим, что 15 заданий завершено, но 5 все еще выполняется, есть ли способ как-то отправить дополнительные 15?

1 Ответ

1 голос
/ 10 марта 2019

Пара мыслей ...:

  • Вы уверены, что дополнительные работы могут быть отправлены до того, как предыдущие будут завершены?Например, может случиться так, что нижестоящие задания требуют в качестве входных данных файл (ы), созданные предыдущими 20 заданиями.Это может иметь место для правила, объединяющего файлы.

  • Вы говорите , что кластер позволяет мне отправлять только несколько (около 20) заданий одновременно .Может быть, проверить, что проблема с кластером, а не со змеиным созданием.Попробуйте отправить несколько фиктивных заданий и посмотрите, принимает ли slurm их в очередь,

Как (не тестировалось, просто получите представление):

for i in {1..30}
do
    sbatch --wrap "sleep 30 && touch test${i}.tmp" 
done
...