1

我曾经使用 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 系统上实现相同的目标?

非常感谢!

4

2 回答 2

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

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

qsub sge_job.sh
于 2015-01-29T08:06:34.653 回答
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
于 2015-01-29T14:29:42.407 回答