我想提交(系列)作业SGE(FWIW,它的Gromacs分子动力学模拟的序列),其中所有的作业,除了后缀相同,比如input01,input02等我写的命令以一种方式运行,后缀由命令序列正确处理.
但是,我找不到让exec环境接收该变量的方法.根据qsub手册页,-v var应该这样做.
$ export i=19
$ export | grep ' i='
declare -x i="19"
$ env | grep '^i='
i=19
Run Code Online (Sandbox Code Playgroud)
然后,我提交以下脚本(run.sh)以查看是否收到:
if [ "x" == "x$i" ]; then
echo "ERROR: \$i not set"
else
echo "SUCCESS: \$i is set"
fi
Run Code Online (Sandbox Code Playgroud)
我按如下方式提交作业(与export上面的命令在同一会话中):
$ qsub -N "test_env" -cwd -v i run.sh
Your job 4606 ("test_env") has been submitted
Run Code Online (Sandbox Code Playgroud)
错误流为空,输出流具有:
$ cat test_env.o4606
ERROR: $i not set
Run Code Online (Sandbox Code Playgroud)
我也尝试了以下命令,但未成功:
$ qsub …Run Code Online (Sandbox Code Playgroud) 从qstat(Sun Grid Engine)手册页:
mem:作业的当前累计内存使用量,以GB为单位.
那是什么意思?
我想在网格上使用需要使用pipe(|)或redirect(>)的qsub(SGE 8.1.3,CentOS 5.9)运行一些命令.例如,假设我必须并行化命令
echo 'hello world' > hello.txt
Run Code Online (Sandbox Code Playgroud)
(显然,一个简单的例子:在现实中我可能需要一个程序的输出重定向像领结直接samtools).如果我做了:
qsub echo 'hello world' > hello.txt
Run Code Online (Sandbox Code Playgroud)
结果的内容hello.txt看起来像
Your job 123454321 ("echo") has been submitted
Run Code Online (Sandbox Code Playgroud)
类似地,如果我使用了pipe(echo "hello world" | myprogram),那么该消息将被传递给所有,而myprogram不是实际的stdout.
我知道我可以编写一个小的bash脚本,每个脚本包含带有管道/重定向的命令,然后执行qsub ./myscript.sh.但是,我正在尝试使用脚本同时运行许多并行化作业,因此我必须编写许多这样的bash脚本,每个脚本的命令略有不同.编写脚本时,此解决方案可能会开始变得非常hackish.Python中这样一个脚本的一个例子:
for i, (infile1, infile2, outfile) in enumerate(files):
command = ("bowtie -S %s %s | " +
"samtools view -bS - > %s\n") % (infile1, infile2, outfile)
script = "job" + str(counter) + ".sh"
open(script, …Run Code Online (Sandbox Code Playgroud) 当qsub一个工作我想要一个工作等待执行,直到第一个工作成功.我一直在看这些选项-hold_jid_ad并-hold_jid做到这一点,但看不出它们的区别.
我正在寻找一种方法将OpenMP作业提交给Grid Engine调度程序,同时指定它应运行的核心数.等同于LSF的-n选项,或PBS的-l nodes = [count]选项.
当我搜索这个时,我会看到一堆答案,指定语法如"-pe threaded [核心数]".在这些答案中,没有提到必须创建一个称为"线程"的并行环境.但是,当我尝试这种语法时,它失败了,说请求的并行环境线程不存在.当我输入"qconf -spl"时,我得到的唯一结果就是"make".那么 - 默认情况下这个"线程"并行环境是否存在,或者这是否必须在集群上手动创建?
如果必须手动创建,是否还有其他语法可以将作业提交到不依赖于群集上可配置命名的多个核心?这是为了提交到集群的第三方程序,所以我不想不仅依赖于创建此pe的客户端,而是将其命名为相同等等...我希望-l选项可能有一些东西,但我无法找到任何这样的排列来实现这一目标.
我目前编写了一个 R 脚本来执行群体遗传模拟,然后将包含结果的表格写入文本文件。我想使用数组作业(我大学的集群使用 SGE)以某种方式并行运行此脚本的多个实例,当全部完成后,我将生成与每个作业相对应的结果文件(Results_1.txt、Results_2.txt 等) .)。
花了下午的大部分时间阅读并试图找出如何做到这一点,但还没有真正找到任何符合我想做的事情。我想知道是否有人可以提供示例,或者为我指明一些我可以阅读的内容以帮助解决此问题。
我想向我大学的 Sungrid 计算集群提交一个 bash 脚本,以循环运行可执行文件。当我登录服务器时,我处于 bash 中:
$ echo $SHELL
/bin/bash
Run Code Online (Sandbox Code Playgroud)
我在传递给 qsub 的脚本顶部添加了一个 bash shebang:
$ cat shell_sub
#!/bin/bash
#$ -N bSS_s13
#$ -o logs/bSS_s13.log
#$ -j y
#$ -cwd
echo $SHELL > shell.txt
Run Code Online (Sandbox Code Playgroud)
但是当我提交上面的脚本时:
qsub shell_sub
Run Code Online (Sandbox Code Playgroud)
它而是在 csh 中执行:
$ cat shell.txt
/bin/csh
Run Code Online (Sandbox Code Playgroud)
如何强制 qsub 使用 bash 而不是 csh 执行我的脚本?
我对SungridEngine和MPI(使用OpenMPI)有一点经验.这些框架/ API和JPPF之间有什么不同?
如何从 SGE 获取(最近)失败的作业列表(failed=100 或 exit_status=137)?从qacct帮助:
[-j [job_id|job_name|pattern]] list all [matching] jobs
Run Code Online (Sandbox Code Playgroud)
如何使用模式?我尝试了以下方法,不起作用。
qacct -j failed=100
Run Code Online (Sandbox Code Playgroud) 我正在使用 numpy 在使用 sun Grid Engine 分发作业(starcluster)的集群上运行相同作业的多次重复。我的每个节点都有 2 个内核(AWS 上的 c3.large)。所以说我有 5 个节点,每个节点有 2 个内核。
numpy 中的矩阵运算一次可以使用多个核心。我发现 SGE 将发送 10 个作业同时运行,每个作业使用一个核心。这导致作业的运行时间更长。看看 htop,看起来每个核心上的两个作业都在争夺资源。
我如何告诉 qsub 为每个节点分配 1 个作业。这样当我提交作业时,一次只能运行 5 个,而不是 10 个?
Perl无法打开同时运行和运行的命令管道,这会在通过qsub提交到SGE时导致问题,因为我丢失了提交的作业ID.如何将生成的脚本提交给SGE 并捕获SGE分配的作业ID?
我在生成大型日志文件的 Sun Grid Engine 批处理系统中运行代码。我可以使用 -o 和 -e 选项选择输出位置,但想知道我是否可以告诉它根本不记录输出。