【问题标题】:Can Snakemake work if a rule's shell command is a cluster job?如果规则的 shell 命令是集群作业,Snakemake 可以工作吗?
【发布时间】:2018-04-26 04:22:04
【问题描述】:

在下面的示例中,如果 shell 脚本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 命令在作业“完成”之前给它一个等待时间。但这是一个糟糕的解决方法,因为这可能会导致几个问题。

【问题讨论】:

    标签: pipeline snakemake


    【解决方案1】:

    Snakemake 可以使用命令行中的 --cluster 参数为您管理此问题。
    您可以为要在集群上执行的作业提供模板。
    例如,以下是我在 SGE 托管集群上使用 snakemake 的方式:

    将封装我称之为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:指定不在节点上执行的规则

    否则,根据您的排队系统,存在一些选项来等待发送到集群的作业完成:
    上交所: Wait for set of qsub jobs to complete
    咕噜咕噜: How to hold up a script until a slurm job (start with srun) is completely finished?
    LSF: https://superuser.com/questions/46312/wait-for-one-or-all-lsf-jobs-to-complete

    【讨论】:

    • 这里的集群作业由shell_script.sh 指定,我希望snakemake 在继续检查创建的输出文件之前知道该作业何时完成。我重写了我的问题以更好地解释问题。
    • 我理解你的意思,但是如果snakemake 不管理在命令行上使用--cluster 参数发送到集群的作业,则无法在规则外壳中正确处理它。你没有显示你的脚本shell_script.sh,所以很难回答。您使用的是哪种排队系统?
    • 是的,我什至认为snakemake 不是为此而设计的,但想试试运气。 shell_script.sh 是一个复杂的脚本,它最终将作业发送到 LSF 集群。理想情况下,shell_script.sh 应该被重写为蛇文件,但没有时间这样做。
    • 用一些可能感兴趣的链接编辑了我的答案
    • 您的新建议看起来很有趣并且能够解决这个问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多