我是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系统管理员?
答案 0 :(得分:1)
简化事情:
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测试水域。获得许可将为您节省大量时间。
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秒内达到峰值。之后,头节点资源消耗是微不足道的。头节点只是使用最少的资源来监视作业状态并提交下一个调用,就像调度程序通常那样。没有更多的资源密集型决定。
答案 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"
或者使用命令行,你可以添加额外的转义和引用层,直到它工作。