Snakemake:如何实现将输入/输出文件复制到tmp文件夹并从中复制规则并在其中应用规则的机制

问题描述 投票:1回答:1

我们使用Slurm工作负载管理器将作业提交到我们的高性能集群。在作业运行期间,我们需要将输入文件从网络文件系统复制到节点的本地文件系统,在此处运行分析,然后将输出文件复制回到网络文件系统上的项目目录。

虽然工作流管理系统Snakemake与Slurm集成(通过定义配置文件)并允许以Slurm作业的形式运行工作流中的每个规则/步骤,但我还没有找到一种简单的方法来为每个规则指定应该使用tmp文件夹(是否具有上述所有含义。

对于实现这些行为的简单解决方案,我感到非常高兴。

hpc slurm snakemake tmp
1个回答
1
投票

我不确定我是否正确理解。我猜您不希望将每个规则的输入复制到某个目录,执行规则,然后将输出复制回另一个文件系统,因为那样会移动很多不必要的文件。因此,对于我认为执行前的答案的前半部分,请将文件移至/scratch/mydir

我相信您可以使用--directory命令(https://snakemake.readthedocs.io/en/stable/executing/cli.html)。但是,我发现此方法效果不佳,因为蛇形蛇很难找到config.yamlsamples.tsv

我解决此问题的方法只是在每个规则的路径前面添加一个工作目录...

rule example:
    input:
        config["cwd"] + "{sample}.txt"
    output:
        config["cwd"] + "processed/{sample}.txt"
    shell:
        """
        touch {output}
        """

所以您要做的就是在config.yaml中更改cwd。

本地:

cwd: ./

slurm:

cwd: /scratch/mydir

然后,您将不得不手动将它们复制回您的长期文件系统,或者制定一条规则来为您执行此操作。

现在,如果您确实要从文件系统A复制文件-> B,执行规则,然后从B-> A移动结果,那么我想您要使用shadow rules。我认为文档正确解释了如何使用它,所以我只给出一个链接:)。

© www.soinside.com 2019 - 2024. All rights reserved.