首页 > 解决方案 > Snakemake 集群模式,每个规则的 CPU 计数不同

问题描述

我正在使用 SLURM 调度程序在共享计算空间上使用snakemake。我的大多数规则只需要很少的资源/CPU,而一些则需要很多。除了需要大量资源的规则之外,我想设置 snakemake 以对每个规则使用最少的资源。根据我的测试,当在集群模式下将每个规则作为子作业提交时,snakemake 将始终使用 config.yaml 中的核心计数和内存请求。当我在每个规则中定义线程和 mem_mb 时,在将规则作为作业提交时它不会考虑这些值。有没有办法在集群模式下让snakemake在提交作业时查看规则的线程/mem_mb,或者有什么方法可以根据每个规则自定义 SLURM 资源请求?下面是我的 config.yaml(我在代码中将其称为 cluster.yml)和运行 snakemake 的行。谢谢!

__default__:
  partition: 'standard'
  group: 'mygroup'
  M: 'myemail@gmail.com'
  time: '24:00:00'
  n: "2"
  m: '8gb'
  o: 'out/{rule}.{wildcards}.out'
  e: 'err/{rule}.{wildcards}.err'
  N: "1"

snakemake --cluster "sbatch -A {cluster.group} -p {cluster.partition} -n {cluster.n} -t {cluster.time} -N {cluster.N} --mem={cluster.m} -e {cluster.e} -o {cluster.o}"  --cluster-config config/cluster.yml -j 30 --latency-wait 30

标签: snakemake

解决方案


实际上,我想我想多亏了这里。正在做

n: "{threads}"
m: "{resources[mem_mb]}mb"

将使用每个规则中定义的核心/内存。


推荐阅读