Snakemake SGE集群提交问题
Snakemake SGE Cluster Submission Issue
我是 snakemake 和使用集群的新手,所以我将不胜感激任何帮助!
我有一个在服务器上运行良好的 snakefile,但是当我尝试在集群上 运行 它时,我没有找到正确的命令来提交作业并让它执行。它 "stalls" 就像其他用户发现的那样。 https://groups.google.com/forum/#!searchin/snakemake/cluster|sort:relevance/snakemake/dFxRIgKDxUU/od9az3MuBAAJ
我运行将它安装在一个 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 将显示程序 运行ning,但是有一个内部错误并且它永远不会完成。
此外,"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 的指导,因为我真的不知道该问他们什么关于我的问题。
总而言之:有没有其他人遇到需要在 SGE 上为 snakemake --cluster 调用 -b y 到 运行?它是否也将 "qsub" 视为 snakemake 命令?或者有人有其他解决方法可以在 SGE 的头节点上提交作业吗?我应该问我的 SGE 系统管理员什么问题?
为了简化事情:
- 您不需要为您的工作命名 (-N PIPE)
- 您应该不需要设置工作目录 (-cwd)
- Snakemake 很好地处理了作业的 STDERR 和 STDIN(-j 是)
- 我对这个flag了解不够,留着吧。 ('-b y')
- 您可能还需要 -S 参数,见下文。
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”的理论,但我不能确定为什么需要它。这个 post 中的答案反映了我对为什么需要它的很多怀疑...... SGE Cluster - script fails after submission - works in terminal
尝试
$snakemake --jobs 10 --cluster "qsub -V -b y"
或
$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 重新发明了轮子,您可能也必须这样做。由于您也引用了他的 post,我会指出他指定系统管理员 "prefer" 不要在头节点上安装 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。我强烈建议您在开始解决问题之前与您的系统管理员再试一次水。获得许可将为您节省大量时间。
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 提交在头节点上的资源消耗。
根据经验,这里有一个由 运行ning 这条管道引起的头节点上的压力//资源消耗的想法。提交管道后的前 30 秒内资源消耗达到峰值。之后,头节点的资源消耗就微不足道了。头节点仅使用最少的资源来监视作业状态并提交下一个调用,就像调度程序通常所做的那样。没有更多的资源密集型决定。
范围
- 17GB BAM 文件(4 个样本)
- 持续时间(运行 并行时 6 小时)
- 头节点在第一个 15-20 秒 DAG 组装之后的使用是微不足道的。
时间轴
- 开始
- 15-20 秒头节点竞争资源 (<500MB),同时确定和组装 DAG。
- 作业是通过 Snakemake 命令从头节点到子节点的 qsub'b,几乎是即时的。很少的开销,主要是字符串连接和变量链接。这一直持续到所有作业都已提交。
当您说您不能以交互方式使用节点时,您确定您的集群管理员已禁止使用 qrsh 和 qlogin 以及 ssh 吗?这两个命令将作业提交到集群,可以为您提供交互式 shell 但在 SGE 的控制下。
我怀疑您 运行 遇到命令行双重解析问题。一次是提交作业,一次是 SGE 尝试启动您的命令。与其尝试将整个内容作为命令行提交,不如将您的 snakekmake 命令写入 shell 文件并提交(不带 -b y)
#!/bin/sh
#$ -S /bin/sh
exec python snakemake -j 1 --cluster "qsub -j 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 和使用集群的新手,所以我将不胜感激任何帮助!
我有一个在服务器上运行良好的 snakefile,但是当我尝试在集群上 运行 它时,我没有找到正确的命令来提交作业并让它执行。它 "stalls" 就像其他用户发现的那样。 https://groups.google.com/forum/#!searchin/snakemake/cluster|sort:relevance/snakemake/dFxRIgKDxUU/od9az3MuBAAJ
我运行将它安装在一个 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 将显示程序 运行ning,但是有一个内部错误并且它永远不会完成。
此外,"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 的指导,因为我真的不知道该问他们什么关于我的问题。
总而言之:有没有其他人遇到需要在 SGE 上为 snakemake --cluster 调用 -b y 到 运行?它是否也将 "qsub" 视为 snakemake 命令?或者有人有其他解决方法可以在 SGE 的头节点上提交作业吗?我应该问我的 SGE 系统管理员什么问题?
为了简化事情:
- 您不需要为您的工作命名 (-N PIPE)
- 您应该不需要设置工作目录 (-cwd)
- Snakemake 很好地处理了作业的 STDERR 和 STDIN(-j 是)
- 我对这个flag了解不够,留着吧。 ('-b y')
- 您可能还需要 -S 参数,见下文。
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”的理论,但我不能确定为什么需要它。这个 post 中的答案反映了我对为什么需要它的很多怀疑...... SGE Cluster - script fails after submission - works in terminal
尝试
$snakemake --jobs 10 --cluster "qsub -V -b y"
或
$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 重新发明了轮子,您可能也必须这样做。由于您也引用了他的 post,我会指出他指定系统管理员 "prefer" 不要在头节点上安装 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。我强烈建议您在开始解决问题之前与您的系统管理员再试一次水。获得许可将为您节省大量时间。
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 提交在头节点上的资源消耗。
根据经验,这里有一个由 运行ning 这条管道引起的头节点上的压力//资源消耗的想法。提交管道后的前 30 秒内资源消耗达到峰值。之后,头节点的资源消耗就微不足道了。头节点仅使用最少的资源来监视作业状态并提交下一个调用,就像调度程序通常所做的那样。没有更多的资源密集型决定。
范围
- 17GB BAM 文件(4 个样本)
- 持续时间(运行 并行时 6 小时)
- 头节点在第一个 15-20 秒 DAG 组装之后的使用是微不足道的。
时间轴
- 开始
- 15-20 秒头节点竞争资源 (<500MB),同时确定和组装 DAG。
- 作业是通过 Snakemake 命令从头节点到子节点的 qsub'b,几乎是即时的。很少的开销,主要是字符串连接和变量链接。这一直持续到所有作业都已提交。
当您说您不能以交互方式使用节点时,您确定您的集群管理员已禁止使用 qrsh 和 qlogin 以及 ssh 吗?这两个命令将作业提交到集群,可以为您提供交互式 shell 但在 SGE 的控制下。
我怀疑您 运行 遇到命令行双重解析问题。一次是提交作业,一次是 SGE 尝试启动您的命令。与其尝试将整个内容作为命令行提交,不如将您的 snakekmake 命令写入 shell 文件并提交(不带 -b y)
#!/bin/sh
#$ -S /bin/sh
exec python snakemake -j 1 --cluster "qsub -j y"
或者创建一个包装脚本,其中嵌入了您希望 snakemake 在为下级作业调用 qsub 时使用的选项。
#!/bin/sh
exec qsub -j y "$@"
然后告诉 snakemake 使用那个:
qsub -V -N test -cwd -j y -b y snakemake -j 1 --cluster "wrapper"
或者尝试使用命令行添加额外的转义和引用层,直到它起作用。