- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我是 snakemake 和使用集群的新手,所以我将不胜感激任何帮助!
我有一个在服务器上运行良好的 snakefile,但是当我尝试在集群上运行它时,我没有找到正确的命令来提交作业并让它执行。它像其他用户发现的那样“停滞”。 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 将显示程序正在运行,但存在内部错误并且它永远不会完成。
此外,“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 的指导,因为我真的不知道该问他们什么关于我的问题。
结论:有没有其他人遇到需要为 snakemake --cluster 调用 -b y 以在 SGE 上运行?它是否也将“qsub”视为 snakemake 命令?或者有人有其他解决方法可以在 SGE 的头节点上提交作业吗?我应该问我的 SGE 系统管理员什么问题?
最佳答案
为了简化事情:
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”的理论,但我不能确定为什么需要它。这篇文章中的答案反射(reflect)了我对为什么需要它的很多怀疑... 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 重新发明了轮子,您可能也必须这样做。由于您也引用了他的帖子,我会指出他指定系统管理员“更喜欢”不要让 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
我正在按照员工的要求对其进行重命名。它们还不是 super 描述性的。 4 重新排列后的样本在重建、注释和数据求和之前通过染色体进行 split 和处理。
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 秒内资源消耗达到峰值。之后,头节点的资源消耗就微不足道了。头节点仅使用最少的资源来监视作业状态并提交下一个调用,就像调度程序通常所做的那样。没有更多的资源密集型决定。
关于python - Snakemake SGE集群提交问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44011444/
我尝试将我的程序与集群一起使用。现在,我创建一些小作业,并使用 bash 脚本将其提交到特定节点。这些作业将一个大文件复制到节点,对该文件执行 5 个其他程序,最后作业将文件复制回来并在节点上删除它。
我正在编写要在 sge 集群中通过 qsub 运行的脚本。 我有几个需要在脚本中调用的可执行文件,它们都位于同一位置(与脚本本身相同)。所以我想知道如何获取正在执行的脚本的位置。我有一个自动构建系统,
我正在我们的 beowulf 集群上运行 SGE (6.2u5p2)。我有几个用户提交了数十个或数千个低优先级的短期(<15 分钟)作业(即,他们将作业设置为低优先级,以便任何人都可以跳到它们之前)。
首先,“环境”这个词有不同的含义,所以让我澄清一下我的意思。 我正在 Linux 上开发 Python 流程,并且有某些库、软件元素和文件等(例如 yaml)是运行此流程和识别自定义命令所必需的。当我
我在简化一系列 SGE 网格作业时遇到了难题,这些作业之间有一定的依赖性,但还没有找到指定 -hold_jid 的正确方法。 假设我们有这样的工作: job1: qsub -N job1 ... jo
我想更改正在运行的 SGE 实例上的槽数。该实例由 StarCluster 启动。 我试着按照这个 page并运行: ubuntu@master: $ qconf -mattr exechost co
我目前编写了一个 R 脚本来执行种群遗传模拟,然后将包含我的结果的表格写入文本文件。我想以某种方式使用数组作业并行运行此脚本的多个实例(我大学的集群使用 SGE),当它全部完成后,我将生成对应于每个作
我知道,可以通过 qmod -sj [jobid] 命令暂停正在运行的作业,原则上是可行的。这意味着作业进入暂停状态——到目前为止还不错,但是: 我希望如果我将所有正在运行的作业置于暂停状态并将新的作
最近,我可以在集群上运行我的代码。我的代码是完全可并行化的,但我不知道如何最好地利用它的并行特性。我必须计算一个大矩阵的元素,它们中的每一个都独立于其他矩阵。我想提交作业以在多台机器(如 100 台)
在 SGE 中提交作业时如何请求节点数(不是 procs)? 例如在 TORQUE 中,我们可以指定 qsub -l nodes=3 如何在 SGE 中按名称请求节点? 例如在 TORQUE 中,我们
如何从 SGE 获取(最近)失败的作业列表(failed=100 或 exit_status=137)?来自 qacct 帮助: [-j [job_id|job_name|pattern]] l
如何从 SGE 获取(最近)失败的作业列表(failed=100 或 exit_status=137)?来自 qacct 帮助: [-j [job_id|job_name|pattern]] l
我有一个用 python 编写的管道调用 Java 中的一些进程。管道以两种可能的模式运行,在本地模式(在单个节点上)或在 SGE 集群上。 当我将选项设置为集群模式时,日志中的错误消息是这样的 In
我想通过 sge 文件提交 sge 作业。 例如,我有如下run.sge文件: ## SGE options #$ -cwd #$ -l mem_free=2G ##$ -q all.q@comput
我使用的是sun grid engine 6.2u5版本。要求是当我在完成作业时使用 qsub 命令提交作业时我想运行一些脚本(bash 脚本)。 我如何使用 -notify 选项或任何其他方式来跟踪
我想向我正在使用的集群网络提交一个多线程作业 -但是关于 qsub 的手册页并不清楚这是如何完成的——默认情况下,我猜它只是将它作为一个正常的作业发送,而不管多线程——但这可能会导致问题,即将许多多线
这可能是个很简单的问题,但是如果我有job ID,我如何获取通过SGE提交的job的状态呢?我基本上想检查作业 ID,看看它是处于错误状态、仍在运行还是已完成。 我在想这样的事情 qstat -u '
我正在尝试运行在群集(SGE)中使用sqlite3的脚本。 该脚本使用lockfile创建一个锁,填充数据库并释放该锁。 $cat test.sh #!/bin/sh lockfile /
我正在处理 SGE 集群,但在使用 qsub 电子邮件通知系统时遇到了一些问题。我的所有工作都运行良好,但我似乎无法修改默认行为以仅在中止工作时通知。 -M 标志工作正常,当作业中止时我会收到一封电子
我有一个问题希望你帮我解决。 我正在使用 Python 工作,我想要执行以下操作: 在服务器上调用 SGE 批处理脚本 看看它是否正常工作 做某事 我现在所做的大约如下: import sub
我是一名优秀的程序员,十分优秀!