集群计算的作业资源扩展(环境)的最佳实践?

时间:2018-01-04 01:31:44

标签: bash openmp cluster-computing openmpi sungridengine

我对群集编程很陌生,并且很难找到解决方法。我在使用bash集群和使用OpenMPI的SGE上。

我有一个任务,我想运行我的过程的几个变体,唯一的区别是不同的配置,我将为我的程序分配更多的资源。举个例子:

#$ -pe openmpi $process_num

我在这里将process_num进程分配到我的工作环境中。我希望我的环境能够改变,例如:我想为process_num尝试1,2和3,换句话说,我有3种变化。我想提交一个包含如下简单循环的sh作业:

# ... other environment variable definitions
for process_num in 1 2 3
do
   # ... some other environment variable definitions
   #$ -pe openmpi $process_num
   mpirun ./my_prog -npernode 1
done

换句话说,一个包装好的' job将执行我的所有变体并考虑资源分配/扩展。我想这样我就可以为每次迭代的所有3种工作变量分配不同的资源。我想问一下这是否可行,即工作环境是否能够按照描述的方式扩展,还是我必须提交3个单独的工作?

当然,如果答案是肯定的 - 提交单独的工作,那么当我想要尝试50种这样的配置时会发生什么?然后,提交50个(或大量)单独工作的最佳实践方法是什么?

不幸的是,由于群集是共享资源,我无法按照自己的意愿进行实验。

1 个答案:

答案 0 :(得分:0)

作业由其使用的资源“定义”。如果要测试三种资源配置,则需要提交三个作业。

另一个选项是分配最大配置并按顺序运行三个作业。这就是问题中的脚本所暗示的内容。但是你会通过分配而不是使用CPU来浪费集群资源。

最佳做法是尽可能充分利用您分配的所有资源。

通过前端节点上的脚本轻松提交多个作业。我相信SGE使用qsub,所以它会像parallel "qsub -pe openmpi {} -v CPUS={} -l n_cpus={} test-job.sh" ::: 1 2 3。 qsub的确切语法在很大程度上取决于您的环境。在test-job.sh中,您将使用$CPUS正确启动您的mpi作业(不确定是否需要这样,可能正确初始化的SGE并行环境-pe就足够了)。我正在使用parallel而不是bash循环只是因为更好更紧凑的语法,它没有什么区别。