You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snakemake集群执行:能否同时在节点内及跨节点并行同一规则?

问题:Snakemake同一规则如何同时实现节点内与跨节点并行执行?

我有100个bwa mem作业要运行,集群每个节点配备40核。希望实现每个节点运行4个bwa mem作业(每个作业使用10线程),同时让Snakemake提交25个独立集群作业,本质是针对同一规则同时实现节点内和跨节点的并行化。

当前配置

Snakefile代码

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个作业会分配到不同节点,但每个节点仅运行1个使用10线程的bwa进程,无法充分利用节点的40核资源。


解决方案(2022年7月28日更新)

通过Snakemake的**作业分组(job grouping)**功能可简便实现需求,修改后的运行命令如下:

snakemake --cluster "sbatch --partition={resources.partition}" -s bwa_slurm_snakefile --jobs 25 --groups bwa=group0 --group-components group0=4 --rerun-incomplete --cores 40

参数说明

  • --groups bwa=group0:将bwa规则对应的所有作业归入名为group0的分组
  • --group-components group0=4:指定每个分组包含4个作业,Snakemake会自动将4个bwa作业打包为一个集群任务提交,刚好填满节点的40核(4×10线程)
  • --cores 40:限制每个集群任务可使用的核数,匹配节点的总核数配置

配置后即可实现:每个节点运行4个bwa作业,同时跨25个节点(总作业数100=25×4)并行执行,充分利用集群资源。


内容的提问来源于stack exchange,提问作者DaveCarlson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:06:57