首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在snakemake中设置绑定内存限制

问如何在snakemake中设置绑定内存限制
EN

Stack Overflow用户
提问于 2020-02-26 06:16:26
回答 2查看 254关注 0票数 4

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

下面是一个使用几GB内存的简单规则。我希望规则一旦达到内存限制就停止,但它完成时没有问题。

代码语言:javascript
复制
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,而不是使用批处理调度器或容器设置。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-26 16:54:39

我对此完全没有经验,所以我真的不能说这是不是推荐的,或者是跨平台的,但这似乎可以在我的电脑(Ubuntu)上工作:

代码语言:javascript
复制
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
        """

有关详细信息,请参阅here。

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

票数 6
EN

Stack Overflow用户

发布于 2020-02-29 19:55:13

我自己对此没有太多经验,但请注意,命令行选项--resources应该伴随着resources指令的使用。在您的例子中,您可以执行:

代码语言:javascript
复制
snakemake -j 10 --resources mem_mb=500

这将确保同时运行的作业不会超过mem_mb = 500 (最多同时运行10个作业)。但是,具有多个mem_mb=500的规则仍将作为单个作业运行。为了防止这种情况,我认为Maarten-vd-Sande的解决方案是我能想到的最好的解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60403990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档