Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Snakemake SGE群集提交问题_Python_Linux_Sungridengine_Snakemake - Fatal编程技术网

Python Snakemake SGE群集提交问题

Python Snakemake SGE群集提交问题,python,linux,sungridengine,snakemake,Python,Linux,Sungridengine,Snakemake,我对snakemake和使用集群还不熟悉,所以我非常感谢您的帮助 我有一个snakefile,它在服务器上可以正常工作,但是当我尝试在集群上运行它时,我没有找到合适的命令来提交作业并让它执行。它像其他用户发现的那样“暂停” 我在SGE集群上运行它,其中只有一个节点(head节点)可以提交作业。我们无法在头部节点上以交互方式运行作业或运行密集型命令。通常我会像这样运行bwa命令: qsub -V -b y 'bwa mem -t 20 /reference/hg38.fa in/R_1.fastq

我对snakemake和使用集群还不熟悉,所以我非常感谢您的帮助

我有一个snakefile,它在服务器上可以正常工作,但是当我尝试在集群上运行它时,我没有找到合适的命令来提交作业并让它执行。它像其他用户发现的那样“暂停”

我在SGE集群上运行它,其中只有一个节点(head节点)可以提交作业。我们无法在头部节点上以交互方式运行作业或运行密集型命令。通常我会像这样运行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' 
因此,我遵循了关于通过head节点提交集群上的作业的常见问题,该节点建议以下代码:

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
-BY允许二进制或作为脚本。如果我运行这个,qstat将显示程序正在运行,但是有一个内部错误,它永远不会结束

此外,“qsub”中的内容被视为snakemake命令。当我尝试使用sge标志(如-j y)时,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文件中提交snakemakeshell脚本,但是我不能使用-byflag,而是添加了-S/bin/bash标志。所以脚本本身是可以工作的,但我认为它们从head节点推送到集群的方式不起作用。我也可能完全偏离目标!我想知道如何与我的系统管理员谈论SGE,因为我真的不知道该向他们询问我的问题

总之:有没有其他人遇到过在SGE上运行snakemake-cluster时调用-b y的需要?它是否也将“qsub”视为一个蛇头司令部?或者是否有人在SGE的head节点上提交作业时有其他解决方法?我应该问我的SGE系统管理员什么问题

要简化事情:

  • 你不需要为你的工作命名(-N PIPE)
  • 您不需要设置工作目录(-cwd)
  • Snakemake能够很好地处理作业的标准和标准(-j是)
  • 我对这面旗子了解不够,留着吧。('-byy')
  • 您可能还需要-S参数,请参见下文
  • Qsub参数:

    [-b y[es]|n[o]]      handle command as binary
    [-S path_list]       command interpreter to be used
    [-V]                 export all environment variables
    
    从包含Snake文件的目录中尝试以下调用。我的SGE集群需要这个'-S/bin/bash'参数。我有关于'-S'的理论,但我不能确定为什么需要它。这篇文章中的答案反映了我对为什么需要它的怀疑

    试一试

    通过这种方式,您可以将Snakemake参数(-jobs&-cluster)与qsub参数(-V,-b&-S)明确分开

    你的蛇锉应该是这样的。它可以更好地编码,但这是基本思想

    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;博士,我祝你一切顺利。我不认为这就是蛇毒的用意。因蒂·佩德罗索(Inti Pedroso)重新发明了车轮,你很可能也要这么做。由于您也参考了他的文章,我将指出,他指定系统管理员“更喜欢”不要在head节点上运行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多个蛇形模块中的14个。它最终尝试使用100%的CPU,但是对于来说,当你说你不能交互使用节点时,你确定你的集群管理员已经禁止使用qrsh和qlogin以及ssh了吗?这两个命令将作业提交到集群,集群可以为您提供一个交互式shell,但由SGE控制

    我怀疑您遇到了命令行双重解析的问题。一次在作业提交时,一次在SGE尝试启动您的命令时。不要试图以命令行的形式提交整个内容,而是在shell文件中编写snakekmake命令并提交(不带-b y)

    或者,创建一个包装器脚本,嵌入您希望snakemake在为下级作业调用qsub时使用的选项

    #!/bin/sh
    exec qsub -j y "$@"
    
    然后告诉snakemake使用:

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

    或者,在命令行中添加额外的转义和引用层,直到成功为止。

    谢谢您的回复!但是,我不能在集群头节点上运行snakemake(遗憾的是,它是唯一可用的)。我们只能提交作业,这就是为什么我必须首先qsub snakemake命令,然后在snakemake编写的脚本上调用qsub。我还尝试在snake文件中使用shell.executable(“/bin/bash”),因为我不能将-S/bin/bash与“qsub”一起使用,因为我的服务器认为这是一个snakemake命令。这并没有使它工作得更好。我已经联系了我的系统管理员,但这是一个小团队,他们似乎没有优先考虑这些问题。集群是由我刚才离开的人配置的,所以我想看看社区是否有类似的问题。但我认为设置只是一个混乱的黑盒子。关于只使用head节点的注意事项:我有巨大的WGS fasta文件要处理,所以我想为某些作业分配更多内存,并且qsub它,因为head节点不能处理太多。谢谢你的努力!使用Snakemake+DRMAA很容易为某些作业分配更多内存。我对每个规则都有特定的内存需求,可以在集群配置文件中开始运行之前对其进行调整。我也可以根据样本名称或文件大小来做,但我还需要这种粒度。我想说的是Snakemake需要访问head节点,这样它才能与调度器交互。在head节点上执行的实际处理仅仅是与调度器交互的Snakemake或类似的东西。WGS的处理被安排到子节点。非常感谢!我没有想过使用qlogin(以前我使用qsub-I访问另一个地方的交互式服务器)。最后我用-b y从命令行运行它<代码>蛇行-c“qsub-cwd-j y-V-S
    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
    
    #!/bin/sh
    #$ -S /bin/sh
    exec python snakemake -j 1 --cluster "qsub -j y"
    
    #!/bin/sh
    exec qsub -j y "$@"
    
    qsub -V -N test -cwd -j y -b y snakemake  -j 1 --cluster "wrapper"