首页 > 解决方案 > 如何在snakemake中设置绑定内存限制

问题描述

我想让 Snakemake 为各个规则设置绑定内存限制。根据snakemake 文档,mem_mb参数似乎可行,但该作业使用的内存比我分配的要多。

这是一个使用几 GB 内存的简单规则。我希望规则在达到内存限制后停止,但它可以毫无问题地完成。

rule:
    output:
        "a"
    threads: 1
    resources:
        mem_mb = 100
    shell:
        """
        python3 -c 'import numpy; x=numpy.ones(1_000_000_000)'
        touch a
        """

是否可以使此限制绑定?我想要一个可移植的、适用于 Windows 和 Linux 的解决方案。我在本地使用snakemake,而不是使用批处理调度程序或容器设置。

标签: snakemake

解决方案


我对此完全没有经验,所以我不能说这是否被推荐或跨平台运行良好,但这似乎适用于我的计算机(Ubuntu):

rule all:
    input:
        "a"

rule:
    output:
        "a"
    threads: 1
    resources:
        mem_mb = 100
    params:
        max_mem=lambda wildcards, resources: resources.mem_mb * 1024
    shell:
        """
        ulimit -v {params.max_mem}
        python3 -c 'import numpy; x=numpy.ones(1_000_000_000)'
        touch a
        """

请参阅此处了解更多信息。

我不相信 SnakeMake 为此提供了“开箱即用”的解决方案。


推荐阅读