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
相关产品推荐
相关产品推荐

