设置SGE以在不同节点上运行具有不同输入文件的可执行文件

时间:2015-01-28 19:02:23

标签: scripting submission sungridengine slurm

我曾经使用SLURM调度程序使用集群,但现在我或多或少地被迫切换到基于SGE的集群,而我正试图了解它。我在SLURM系统上工作的事情涉及使用N个输入文件运行可执行文件,并以这种方式设置SLURM配置文件,

slurmConf.conf SLURM configuration file
    0   /path/to/exec /path/to/input1
    1   /path/to/exec /path/to/input2
    2   /path/to/exec /path/to/input3
    3   /path/to/exec /path/to/input4
    4   /path/to/exec /path/to/input5
    5   /path/to/exec /path/to/input6
    6   /path/to/exec /path/to/input7
    7   /path/to/exec /path/to/input8
    8   /path/to/exec /path/to/input9
    9   /path/to/exec /path/to/input10

我在SLURM中的工作提交脚本包含这一行;

srun -n $SLURM_NNODES --multi-prog $slconf
$slconf refers to a path to that configuration file

此设置按我的意愿工作 - 使用10个节点同时运行10个不同输入的可执行文件。既然我刚刚过渡到SGE系统,我想做同样的事情,但我试着阅读手册,发现没有什么像SLURM。你能否告诉我如何在SGE系统上实现同样的目标?

非常感谢!

2 个答案:

答案 0 :(得分:1)

您可以使用"作业数组" Grid Engine的功能。

创建一个shell脚本sge_job.sh

#!/bin/sh
#
# sge_job.sh -- SGE job description script
#
#$ -t 1-10
/path/to/exec /path/to/input$SGE_TASK_ID

并使用qsub将此脚本提交给SGE。

qsub sge_job.sh

答案 1 :(得分:0)

Dmitri Chubarov的答案非常好,并且是最有效的方式,因为它在提交许多作业(> 1000)时对提交节点的负载较小。或者,您可以将qsub包装在for循环中:

for i in {1..10}
do
    echo "/path/to/exec /path/to/input${i}" | qsub
done

我有时会使用上面的内容,因为输入不容易被捕获为一系列整数。

示例:

for f in `ls /some/path/input*`
do
    echo "/path/to/exec ${f}" | qsub
done