Snakemake SGE集群提交问题

时间:2017-05-16 20:56:56

标签: python linux sungridengine snakemake

我是snakemake的新手并且使用群集,所以我将不胜感激!

我有一个在服务器上工作正常的snakefile,但是当我尝试在集群上运行它时,我没有找到正确的命令来提交作业并让它执行。它像其他用户发现的那样“停滞”。 https://atlas.torproject.org/#search/country:it%20flag:Exit

我在SGE集群上运行它,我们只通过一个节点(头节点)提交作业。我们无法以交互方式运行作业或在头节点上运行密集命令。通常我会像这样运行一个bwa命令:

qsub -V -b y 'bwa mem -t 20 /reference/hg38.fa in/R_1.fastq in/R_2.fastq |samtools view -S -bh -@ 7 > aln_R.bam' 

所以我按照常见问题解答,通过头节点提交集群上的作业,建议使用以下代码:

qsub -N PIPE -cwd -j yes python snakemake --cluster "ssh user@headnode_address 'qsub -N pipe_task -j yes -cwd -S /bin/sh ' " -j

这对我不起作用,因为我的终端期望python是一个文件。要实际调用程序的命令,我必须使用它:

qsub -V -N test -cwd -j y -b y snakemake --cluster "qsub " -j 1

-b y允许二进制或脚本。如果我运行它,qstat将显示程序正在运行,但是有一个内部错误,它永远不会完成。

此外,“qsub”中的内容被视为snakemake命令。当我尝试使用诸如-j y之类的sge标志时,我遇到了来自snakemake的错误:

qsub -V -N test -cwd -j y -b y snakemake --cluster "qsub -j y" -j 1
snakemake: error: argument --cores/--jobs/-j: invalid int value: 'y' 

我可以完美地提交tmp文件中的snakemake shell脚本,但我不能使用-b y标志并添加了-S / bin / bash标志。因此脚本本身可以工作,但我认为它们从头节点推送到集群的方式不能以某种方式工作。我也可能完全脱离目标!我会喜欢任何关于如何向我的系统管理员谈论SGE的方向,因为我真的不知道如何向他们询问我的问题。

总结:是否还有其他人需要调用-b y for snakemake --cluster在SGE上运行?它还将“qsub”视为蛇形命令吗?或者是否有人有另一种解决方法在SGE的头节点上提交作业?我应该问什么问题我的SGE系统管理员?

2 个答案:

答案 0 :(得分:1)

简化事情:

  1. 您不需要为自己的工作命名(-N PIPE)
  2. 您不需要设置工作目录(-cwd)
  3. Snakemake处理好作业的STDERR和STDIN(-j yes)
  4. 我对这面旗帜知之甚少,保留它。 ('-b y')
  5. 您可能还需要-S参数,请参阅下文。
  6. Qsub论据:

    [-b y[es]|n[o]]      handle command as binary
    [-S path_list]       command interpreter to be used
    [-V]                 export all environment variables
    

    从包含Snakefile的目录中尝试以下调用。我的SGE集群需要这个'-S / bin / bash'参数。我有关于'-S'的理论,但我不能肯定地说为什么需要它。这篇文章的答案反映了我对为什么需要它的怀疑... SGE Cluster - script fails after submission - works in terminal

    TRY

    $snakemake --jobs 10 --cluster "qsub -V -b y"
    

    OR

    $snakemake --jobs 10 --cluster "qsub -V -b y -S /bin/bash"
    

    这样你就可以得到你的Snakemake参数(--jobs& --cluster),它们与你的qsub参数(-V,-b& -S)明显分开。

    你的Snakefile看起来应该是这样的。它可以更好地编码,但这是基本的想法。

    run bwaRULE:
        input:
            "in/R_1.fastq", "in/R_2.fastq"
        output:
            "aln_R.bam"
        shell:
            "bwa mem -t 20 /reference/hg38.fa {input} | samtools view -S -bh -@ 7 > {output}"
    

    编辑回应OP的评论。

    TL; DR祝你万事如意。我不认为这是如何使用Snakemake的。 Inti Pedroso重新发明了轮子,你可能也必须这样做。既然你也引用了他的帖子,我会指出他指定Sys-Admins“更喜欢”不让Snakemake在头节点上运行,因为担心它会占用太多资源。

    PID   USER      PR   NI VIRT  RES  SHR S %CPU  %MEM  TIME+  COMMAND
    26389 tboyarsk  19   0  318m  62m  11m R 99.8  0.1   0:10.96 snakemake
    

    这是一个1000作业DAG,使用了我编码的20多个Snakemake模块中的14个。它最终试图使用100%的CPU,但是<15秒。内存使用量不超过500MB。我强烈建议您在开始工作之前再次使用您的Sys-Admins测试水域。获得许可将为您节省大量时间。

    http://snakemake.readthedocs.io/en/stable/project_info/faq.html#how-can-i-run-snakemake-on-a-cluster-where-its-main-process-is-not-allowed-to-run-on-the-head-node

    https://bitbucket.org/snakemake/snakemake/issues/25/running-snakemake-via-cluster-engine

    我正按照我的雇主的要求重新命名。它们不是超级描述性的。 4重组后的样本在重建,注释和数据求和之前通过染色体进行拆分和处理。

    Job counts:
    count   jobs
    4   alignBAM
    1   all
    8   canonical
    8   catVCF
    4   cosmic
    4   dpsnp
    4   filteredBAM
    4   indel
    4   indexBAM
    336 mPileSPLIT
    4   markdupBAM
    672 mpileup2SPLIT
    4   sortBAM
    8   tableGET
    4   undoBAM
    1069
    

    编辑 2017年5月26日

    添加以通过Snakemake提交大型管道来澄清头节点上的资源消耗。

    根据经验,这里有一个关于应变//运行此管道导致头节点资源消耗的想法。资源消耗在提交管道的前30秒内达到峰值。之后,头节点资源消耗是微不足道的。头节点只是使用最少的资源来监视作业状态并提交下一个调用,就像调度程序通常那样。没有更多的资源密集型决定。

    范围

    • 17GB BAM文件(4个样本)
    • 持续时间(并行运行6小时)
    • 首次15-20秒DAG组装后的头节点使用非常简单。

    时间轴

    1. 开始
    2. 15-20秒在确定和组装DAG时,主节点竞争资源(<500MB)。
    3. 几乎立即通过Snakemake命令从头节点到子节点的作业是qsub'b。开销非常小,主要是字符串连接和变量链接。这一直持续到所有工作都已提交。

答案 1 :(得分:0)

当您说无法以交互方式使用节点时,您确定您的群集管理员已禁止使用qrsh和qlogin以及ssh吗?这两个命令将作业提交给群集,该群集可以为您提供交互式shell,但是受SGE控制。

我怀疑你遇到了双重解析命令行的问题。一旦提交作业,一旦SGE尝试启动您的命令。而不是尝试将整个事物作为命令行提交,而是将您的snakekmake命令写入shell文件并提交(不使用-b y)

#!/bin/sh
#$ -S /bin/sh
exec python snakemake -j 1 --cluster "qsub -j y"

或者创建一个包装脚本,在脚本作业调用qsub时,嵌入你想让snakemake使用的选项。

#!/bin/sh
exec qsub -j y "$@"

然后告诉snakemake使用:

qsub -V -N test -cwd -j y -b y snakemake  -j 1 --cluster "wrapper"

或者使用命令行,你可以添加额外的转义和引用层,直到它工作。