我想让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,而不是使用批处理调度器或容器设置。
发布于 2020-02-26 16:54:39
我对此完全没有经验,所以我真的不能说这是不是推荐的,或者是跨平台的,但这似乎可以在我的电脑(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
"""有关详细信息,请参阅here。
我不相信SnakeMake对此提供了“开箱即用”的解决方案。
发布于 2020-02-29 19:55:13
我自己对此没有太多经验,但请注意,命令行选项--resources应该伴随着resources指令的使用。在您的例子中,您可以执行:
snakemake -j 10 --resources mem_mb=500这将确保同时运行的作业不会超过mem_mb = 500 (最多同时运行10个作业)。但是,具有多个mem_mb=500的规则仍将作为单个作业运行。为了防止这种情况,我认为Maarten-vd-Sande的解决方案是我能想到的最好的解决方案。
https://stackoverflow.com/questions/60403990
复制相似问题