Workflow Snakemake中线程、资源和优先级定义的不同级别(规则、参数、集群配置)之间有什么区别?

Workflow Snakemake中线程、资源和优先级定义的不同级别(规则、参数、集群配置)之间有什么区别?,workflow,snakemake,Workflow,Snakemake,在蛇文件中,可以在规则中指定关键字线程、优先级和资源。这些也可以指定为params关键字中的子关键字。在某些应用程序中,它们也可以作为参数或选项放在外壳中。此外,如果作业提交到集群,还可以在集群配置中指定这些参数。 所以我对这些感到困惑。最佳做法是什么?这些规格放在哪里?如果你把这些放在每个地方,那么在系统中哪一个是有效的。换句话说,哪个优先级更高?优先顺序是什么? 我知道一定有一些原因,我正在努力理解它们。谢谢。我不确定集群配置,但是关于snakemake的一般用法,在规则级别定义的东西与在p

在蛇文件中,可以在规则中指定关键字线程、优先级和资源。这些也可以指定为params关键字中的子关键字。在某些应用程序中,它们也可以作为参数或选项放在外壳中。此外,如果作业提交到集群,还可以在集群配置中指定这些参数。 所以我对这些感到困惑。最佳做法是什么?这些规格放在哪里?如果你把这些放在每个地方,那么在系统中哪一个是有效的。换句话说,哪个优先级更高?优先顺序是什么?
我知道一定有一些原因,我正在努力理解它们。谢谢。

我不确定集群配置,但是关于snakemake的一般用法,在规则级别定义的东西与在
params
节中定义的东西没有相同的用法

我想说,最重要的区别在于snakemake在决定应该运行哪些规则实例时“忽略”了
params
部分中定义的内容,而它使用在规则级别定义的内容来决定在给定时刻应该或可以运行哪些规则

您可以在
params
部分中定义所需的任何内容,这仅用于确定规则操作(由您在
run
shell
部分中进行管理)

相比之下,您可以在规则级别定义一个固定的列表,如
线程
资源
优先级
,snakemake“知道”如何使用它们来确定应该运行哪些规则。这些事情可能会也可能不会对规则操作产生影响,这取决于您是否以及如何使用它们

使用规则级别的东西和
params
定义的东西的不同之处在于
params
中定义的东西需要用作
params
对象的属性(使用Python的点语法)<可以直接使用在规则级别定义的代码>线程。这避免了歧义。例如:

rule foo:
    # [...]
    params:
        threads=8
    threads:
        4
    shell:
        """my_command -j {params.threads} -p {threads} -i {input} -o {output}"""
使用“规则级别”
threads
可避免运行超出其应运行的规则(给定使用
-j
选项分配的“线程”总数)。 请注意,这实际上并不阻止规则操作使用更多线程。这完全取决于您使用(或不使用)
threads
变量的方式,以及您使用的程序如何处理此参数

规则级
resources
也有类似的用途。snakemake在决定运行哪些规则时会考虑这些规则,因为使用
--resources
命令行选项提供了总数量。我不知道是否可以在规则操作中使用它们,但如果是这样,则可能与
线程的情况相同:实际效果将取决于调用的程序以及调用方式

类似地,snakemake do将使用规则级别
priority
来决定应该运行哪些规则,但在规则操作中没有任何效果(除非
run
shell
部分中有相应的对象可用,并且您明确使用它来控制您调用的程序中的某些内容)

总结如下:

  • 规则级别的东西属于snakemake预定义的限制集,并自动用于控制规则执行流
  • params
    -定义的事物可以有任何名称,它们的作用仅限于规则操作。效果取决于在操作定义中如何使用它们(
    run
    shell
  • 规则级别
    线程
    也可用于在规则操作中产生效果。关于
    优先级
    资源
    的可能操作级别使用,需要进一步调查

谢谢你,布莱。我希望snamkemake文档中有更多关于这方面和日程安排的详细信息