snakemake - 在资源指令中指定内存与单独规则的命令行调用

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

可以在

resources
指令中定义每个规则的内存要求

rule spades:
    input:
        rules.aRule.output
    output:
        "{sample}/spades/contigs.fasta"
    resources:
        mem_mb = 112000
    shell:
        "spades {input} {output}"

当涉及到可以通过命令行参数(例如 spades)直接指定内存要求的程序时,如上所述在

resources
指令中指定内存与使用
spades
本身的命令行参数,即

rule spades_mem:
    input:
        rules.aRule.output
    output:
        "{sample}/spades/contigs.fasta"
    params:
        mem_spades = 112000
    shell:
        "spades -m {params.mem_spades} {input} {output}"

用两种方式指定内存可能不是一个好主意,即

rule spades_both:
    input:
        rules.aRule.output
    output:
        "{sample}/spades/contigs.fasta"
    params:
        mem_spades = 112000
    resources:
        mem_mb = 112000
    shell:
        "spades -m {params.mem_spades} {input} {output}"

但是,如果我这样做,哪一个优先,是来自二进制命令行(规则

spades_mem
)参数的那个,还是
resources
指令中指定的那个(规则
spades
)?

python snakemake hpc
1个回答
0
投票

请求合适的计算节点时,

resources
将使用
snakemake
指令。内存约束的命令行规范并不能保证指定的数量在计算节点上实际可用。

resources
params
中指定内存约束在某些情况下是有意义的。例如,如果应用程序贪婪并消耗所有可用内存,除非显式指定内存约束,则可能需要指定
params
以确保应用程序在本地运行时不会消耗所有内存。

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