我曾经使用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系统上实现同样的目标?
非常感谢!
答案 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