我有一个用snakemake编写的工作流,该工作流在某一时刻气球到大量输出文件。发生这种情况的原因是,通配符的许多组合产生的输出文件数量约为60,000。
使用如此数量的输入文件,对于后续规则到无法使用,DAG的生成非常缓慢。过去,我通过遍历子配置文件中的bash循环来解决此问题,在该配置文件中,除一个通配符之外的所有通配符都被注释掉了。例如,在我的情况下,我有一个通配符(引物),具有12个可能的值。通过针对“ primer”的每个值迭代运行snakemake,它将工作流划分为可消化的块(约5000个输入文件)。通过这种策略,DAG的生成速度很快,工作流程进展顺利。
现在,我对使用snakemake 5.7.4中可用的新--batch
标志感兴趣,因为Johannes在Twitter上向我建议它基本上应该执行与bash循环和子集配置文件相同的操作。 / p>
但是,我遇到了使我感到困惑的错误。我不知道这是否是我应该在github问题跟踪器上发布的问题,或者我只是缺少一些基本信息。
我的工作流程失败的规则如下:
rule get_fastq_for_subset:
input:
fasta="compute-workflow-intermediate/06-subsetted/{sample}.SSU.{direction}.{group}_pyNAST_{primer}.fasta",
fastq="compute-workflow-intermediate/04-sorted/{sample}.{direction}.SSU.{group}.fastq"
output:
fastq=temp("compute-workflow-intermediate/07-subsetted-fastq/{sample}.SSU.{direction}.{group}_pyNAST_{primer}.full.fastq"),
fastq_revcomp="compute-workflow-intermediate/07-subsetted-fastq/{sample}.SSU.{direction}.{group}_pyNAST_{primer}.full.revcomped.fastq"
conda:
"envs/bbmap.yaml"
shell:
"filterbyname.sh names={input.fasta} include=t in={input.fastq} out={output.fastq} ; "
"revcompfastq_according_to_pyNAST.py --inpynast {input.fasta} --infastq {output.fastq} --outfastq {output.fastq_revcomp}"
我在all
规则中设置了一个目标,以生成规则中指定的输出,然后尝试使用批处理标志运行snakemake,如下所示:
snakemake --configfile config/config.yaml --batch get_fastq_for_subset=1/20 --snakefile Snakefile-compute.smk --cores 40 --use-conda
然后它失败并显示以下消息:
WorkflowError:
Batching rule get_fastq_for_subset has less input files than batches. Please choose a smaller number of batches.
现在让我感到困惑的是,我对此规则的输入实际上应该是大约60,000个文件。然而,snakemake似乎获得不到20个输入文件。也许只计算2,如规则指定的输入文件数一样?但这对我来说真的没有意义...
snakemake的源代码在这里,显示了snakemake如何计数事物,但是这超出了我一点:
https://snakemake.readthedocs.io/en/stable/_modules/snakemake/dag.html
如果有人知道发生了什么,我将非常感谢您的帮助!
最好, 杰西