Может ли Snakemake работать, если команда оболочки правила является задачей кластера? - PullRequest
0 голосов
/ 26 апреля 2018

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

Для простоты предположим, что snakemake запускается локально, что означает, что единственное кластерное задание происходит из shell_script.sh, а не snakemake.

localrules: that_job

rule all:
    input:
        "output_from_shell_script.txt",
        "file_after_cluster_job.txt"

rule that_job:
    output:
        a = "output_from_shell_script.txt",
        b = "file_after_cluster_job.txt"
    shell:
        """
        shell_script.sh {output.a}
        touch {output.b}
        """

PS - В данный момент яиспользуя команду sleep, чтобы дать ему время ожидания, прежде чем задание будет «завершено».Но это ужасный обходной путь, поскольку это может привести к нескольким проблемам.

1 Ответ

0 голосов
/ 26 апреля 2018

Snakemake может справиться с этим с помощью аргумента --cluster в командной строке.
Вы можете предоставить шаблон для заданий, которые будут выполняться в кластере.
В качестве примера, вот как я используюsnakemake в управляемом кластере SGE:

шаблон, который будет инкапсулировать задания, которые я назвал sge.sh:

#$ -S /bin/bash
#$ -cwd
#$ -V

{exec_job}

, затем я использую непосредственно на узле входа в систему:

snakemake -rp --cluster "qsub -e ./logs/ -o ./logs/" -j 20 --jobscript sge.sh --latency-wait 30

--cluster скажет, какую систему очередей использовать
--jobscript - это шаблон, в который будут инкапсулированы задания
--latency-wait важно, если файловой системе требуется немного времени для записи файлов.Ваша работа может завершиться и завершиться до того, как выходные данные правил будут фактически видны файловой системе, что приведет к ошибке

Обратите внимание, что вы можете указать правила, которые не должны выполняться на узлах в Snakefile, с ключевым словом localrules:

В противном случае, в зависимости от системы очередей, существуют некоторые варианты ожидания завершения отправки задания в кластер:
SGE: Ожидание завершения набора заданий qsub
SLURM: Как удерживать сценарий до тех пор, пока работа с slurm (начиная с srun) не будет полностью завершена?
LSF: https://superuser.com/questions/46312/wait-for-one-or-all-lsf-jobs-to-complete

...