Snakemake 限制作业的内存使用

Snakemake limit the memory usage of jobs

我需要 运行 20 个带有蛇纹的基因组。所以我在 snakemake 中使用基本步骤,如对齐、标记重复、重新对齐、碱基调用重新校准等。我正在使用的机器有多达 40 个虚拟内核和 70G 内存,我 运行 程序是这样的。

snakemake -s Snakefile -j 40

这工作正常,但是一旦它 运行s 标记与其他程序重复,它就会停止,因为我认为它会使 70 个可用的 giga 超载并崩溃。 有没有办法在snakemake中将所有程序的内存限制总共设置为60G 运行ning?我想 snakemake 运行s 少工作才能保持在 60giga 以下,就是有些步骤需要大量的内存。下面的命令行也崩溃了,使用的内存比分配的多。

snakemake -s Snakefile -j 40 --resources mem_mb=60000

在命令行上指定 --resources mem_mb=60000 是不够的,您还需要为要检查的规则指定 mem_mb。例如:

rule markdups:
    input: ...
    ouptut: ...
    resources:
        mem_mb= 20000
    shell: ...

rule sort:
    input: ...
    ouptut: ...
    resources:
        mem_mb= 1000
    shell: ...

这将以这样一种方式提交作业,即您每次都不会超过 60GB。例如。这将保留 运行 至多 3 个 markdups 个工作,或 2 个 markdups 工作和 20 个 sort 个工作,或 60 个 sort 个工作。

没有 mem_mb 的规则将不会被计入内存使用,这可能适用于规则,例如复制文件,不需要太多内存。

分配给每条规则的数量主要取决于您的猜测。 tophtop 命令有助于监控作业并确定它们需要多少内存。可以设计更详细的解决方案,但我不确定它是否值得......如果您使用像 slurm 这样的作业调度程序,日志文件应该为您提供每个作业的峰值内存使用情况,以便您可以将它们用于未来的指导。也许其他人有更好的建议。