【发布时间】:2022-07-28 21:26:45
【问题描述】:
在使用集群执行时,我有一个关于 Snakemake 并行化的基本问题:来自同一规则的作业是否可以同时在一个节点内和多个节点之间并行化?
例如,假设我有 100 个 bwa mem 作业,并且我的集群有每个节点有 40 个核心。我可以每个节点运行 4 个 bwa mem,每个使用 10 个线程,然后让 Snakemake 提交 25 个单独的作业吗?本质上,我想在同一规则的节点内和节点之间进行并行化。
这是我当前的蛇文件:
SAMPLES, = glob_wildcards(\"fastqs/{id}.1.fq.gz\")
print(SAMPLES)
rule all:
input:
expand(\"results/{sample}.bam\", sample=SAMPLES)
rule bwa:
resources:
time=\"4:00:00\",
partition=\"short-40core\"
input:
ref=\"/path/to/reference/genome.fa\",
fwd=\"fastqs/{sample}.1.fq.gz\",
rev=\"fastqs/{sample}.2.fq.gz\"
output:
bam=\"results/{sample}.bam\"
log:
\"results/logs/bwa/{sample}.log\"
params:
threads=10
shell:
\"bwa mem -t {params.threads} {input.ref} {input.fwd} {input.rev} 2> {log} | samtools view -bS - > {output.bam}\"
我已经使用以下命令运行它:
snakemake --cluster \"sbatch --partition={resources.partition}\" -s bwa_slurm_snakefile --jobs 25
使用此设置,我收到了 25 个作业,每个作业都提交到不同的节点。但是,每个节点只运行一个 bwa mem 进程(使用 10 个线程)。
是否有一些直接的方法来修改它,以便我可以在每个节点上运行 4 个不同的 bwa mem 作业(每个使用 10 个线程)?
谢谢!
戴夫
22 年 7 月 28 日编辑:
除了下面特洛伊的建议之外,我还找到了一种简单的方法来完成我想做的事情,只需遵循grouping documentation 的工作即可。
具体来说,我在执行 Snakemake 管道时做了以下操作:
snakemake --cluster \"sbatch --partition={resources.partition}\" -s bwa_slurm_snakefile --jobs 25 --groups bwa=group0 --group-components group0=4 --rerun-incomplete --cores 40
通过为 bwa 规则指定一个组 (\"group0\") 并设置 \"--group-components group0=4\",我能够对作业进行分组,以便在每个节点上进行 4 次 bwa 运行。
标签: snakemake