具有奇点的 Snakemake

Snakemake with Singularity

我正在尝试在我的 Snakemake 规则之一中使用 Singularity。当 运行 在本地连接我的 Snakemake 管道时,这按预期工作。但是,当我尝试使用 sbatch 提交到我的计算集群时,我 运行 出错了。我想知道您是否对如何将本地管道转换为可以在集群上工作的管道有任何建议。提前致谢!

导致错误的规则使用Singularity调用具有DeepVariant的变体:


# Call variants with DeepVariant.
rule deepvariant_call:
  input:
    ref_path='/labs/jandr/walter/varcal/data/refs/{ref}.fa',
    bam='results/{samp}/bams/{samp}_{mapper}_{ref}.rmdup.bam'
  params:
    nshards='1',
    version='0.7.0'
  threads: 8
  output:
    vcf='results/{samp}/vars/{samp}_{mapper}_{ref}_deep.g.vcf.gz'
  shell:
    'singularity exec --bind /srv/gsfs0 --bind /labs/jandr/walter/ /home/kwalter/.singularity/shub/deepvariant-docker-deepvariant:0.7.0.simg \
    /labs/jandr/walter/tb/test/scripts/call_deepvariant.sh {input.ref_path} {input.bam} {params.nshards} {params.version} {output.vcf} '
#
# Error in rule deepvariant_call:
#     jobid: 17
#     output: results/T1-XX-2017-1068_S51/vars/T1-XX-2017-1068_S51_bowtie2_H37Rv_deep.g.vcf.gz
#     shell:
#         singularity exec --bind /srv/gsfs0 --bind /labs/jandr/walter/ /home/kwalter/.singularity/shub/deepvariant-docker-deepvariant:0.7.0.simg;     /labs/jandr/walter/tb/test/scripts/call_deepvariant.sh /labs/jandr/walter/varcal/data/refs/H37Rv.fa results/T1-XX-2017-1068_S51/bams/T1-XX-2017-1068_S51_bowtie2_H37Rv.rmdup.bam 1 0.7.0 results/T1-XX-2017-1068_S51/vars/T1-XX-2017-1068_S51_bowtie2_H37Rv_deep.g.vcf.gz 
#         (one of the commands exited with non-zero exit code; note that snakemake uses bash strict mode!)

我使用以下内容向集群提交作业:

snakemake -j 128 --cluster-config cluster.json --cluster "sbatch -A {cluster.account} --mem={cluster.mem} -t {cluster.time} -c {threads}"

如已解决的错误消息命令所示,其中分号分隔两行 shell: 而不是空格,此错误是由于 shell:.

中的字符串格式引起的

您可以使用三引号格式:

  shell:
    '''
    singularity exec --bind /srv/gsfs0 --bind /labs/jandr/walter/ /home/kwalter/.singularity/shub/deepvariant-docker-deepvariant:0.7.0.simg \
    /labs/jandr/walter/tb/test/scripts/call_deepvariant.sh {input.ref_path} {input.bam} {params.nshards} {params.version} {output.vcf} 
    '''

或者,单引号内的每一行:

  shell:
    'singularity exec --bind /srv/gsfs0 --bind /labs/jandr/walter/ /home/kwalter/.singularity/shub/deepvariant-docker-deepvariant:0.7.0.simg \'
    '/labs/jandr/walter/tb/test/scripts/call_deepvariant.sh {input.ref_path} {input.bam} {params.nshards} {params.version} {output.vcf}'