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

时间:2019-05-13 15:02:43

标签: workflow snakemake

在Snakefile中,可以在规则中指定关键字线程,优先级,资源。也可以将它们指定为params关键字中的子关键字。也可以将它们作为某些应用程序中的参数或选项放入外壳程序中。此外,如果将作业提交到集群,也可以在cluster-config中指定这些参数。 所以我对这些感到困惑。最佳做法是什么?这些规格放在哪里?如果将它们放在各处,那么哪个将在系统中有效。换句话说,哪个优先级更高?优先顺序是什么? 我知道一定有某些原因,我正在尝试理解它们。谢谢。

1 个答案:

答案 0 :(得分:0)

我不确定集群配置,但对于一般的蛇形用法,在规则级别定义的用法与在params部分中定义的用法不同。

我要说的是,最重要的区别是当决定运行哪些规则实例时,snakemake会忽略“ params”部分中定义的内容,而它会使用在规则级别定义的内容来决定什么规则应该或可以在给定的时间执行。

您可以在params节中定义所需的内容,这仅用于确定规则操作(取决于您自己在run或{{1}中进行管理) }部分。

通过对比,您可以在规则级别定义固定的事物列表,例如shellthreadsressources,然后snakemake“知道”如何使用它们来确定应该执行什么规则。这些内容可能会对规则操作产生影响,也可能不会产生影响,具体取决于您是否以及如何使用它们。

使用规则级事物和priority定义事物的方式不同,因为params中定义的事物需要用作params对象的属性(使用Python的点语法) )。可以直接使用在规则级别定义的params。这避免了歧义。例如:

threads

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

规则级别threads的作用类似。给定使用ressources命令行选项提供的总金额时,snakemake在决定运行什么规则时会考虑它们。我不知道您是否可以在规则操作中使用它们,但是如果是这种情况,则可能与--resources相同:实际效果将取决于所调用的程序以及它的方式被称为。

类似地,snakemake将使用规则级threads来决定应运行哪些规则,但对规则操作没有影响(除非priorityrun部分,您可以显式地使用它来控制所调用程序中的某些内容。

总结:

  • 规则级事物属于snakemake预先定义的受限集,并且会自动用于控制规则执行流
  • shell定义的事物可以具有任何名称,其作用仅限于规则操作。效果取决于您在操作定义(paramsrun)中如何使用它们。
  • 规则级别的shell也可以在规则操作中起作用。需要进一步调查threadspriority的操作级别用法。