Змейка с Сингулярностью - PullRequest
       21

Змейка с Сингулярностью

0 голосов
/ 03 февраля 2020

Я пытаюсь использовать Сингулярность в рамках одного из моих правил Змейка. Это работает, как и ожидалось, при локальном запуске моего конвейера 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}"

1 Ответ

0 голосов
/ 04 февраля 2020

Как видно из разрешенной команды сообщения об ошибке, где точка с запятой разделяет две строки 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}' 
    '''
...