并行化 snakemake 规则

Parallelizing snakemake rule

抱歉,如果这是一个幼稚的问题,但我仍在努力思考 Snakemake 的复杂性。

我有一个包含多个文件的目录,我想对这些文件并行应用规则(即我想向集群提交相同的脚本,为每次提交指定不同的输入文件)。

我首先尝试对输入文件使用扩展,但这只导致提交了一个作业:

CHROMS = [str(c) for c in range(1, 23)] + ["X"]
rule vep:
    input:
        expand("data/split/chr{chrom}.vcf", 
               chrom=CHROMS)
    output:
        expand("data/vep/split/chr{chrom}.ann.vcf",
               chrom=CHROMS)
    shell:
        "vep "
        "{input} "
        "{output}"

这里有替代方法吗?

谢谢!

目前,您的工作流程确实包括只应用一次 "vep" 规则,它会执行 vep 并将您的所有输入和输出作为参数。我不知道 vep 是如何工作的,但它可能会失败或没有达到您的预期。

您可能应该在不扩展的情况下编写规则的输入和输出,并使用 "all" 规则驱动它,这会扩展:

CHROMS = [str(c) for c in range(1, 23)] + ["X"]


rule all:
    input:
        expand("data/vep/split/chr{chrom}.ann.vcf",
               chrom=CHROMS)

rule vep:
    input:
        "data/split/chr{chrom}.vcf"
    output:
        "data/vep/split/chr{chrom}.ann.vcf"
    shell:
        "vep "
        "{input} "
        "{output}"

要生成 "all" 规则的所需输入,snakemake 将确定需要应用 "vep"规则。

务必将 "all" 规则放在所有其他规则之前。