我试图在使用SLURM的集群上运行粒子群优化问题,并使用由单核心matlab进程管理的优化算法。每个粒子评估都需要在两个Python程序之间交替进行多个MPI调用,直到结果收敛。每个MPI呼叫最多需要20分钟。与SLURM和有限资源并行地运行MPI调用队列
我最初很天真地将每个MPI调用作为一个单独的SLURM作业提交,但由此产生的排队时间使得它比本地串行运行每个作业要慢。我现在试图找出提交N节点作业的方法,该作业将持续运行MPI任务以利用可用资源。 matlab进程将使用文本文件标志来管理这项工作。
下面是一个伪代码bash的文件,该文件可能有助于解释什么,我想在一个较小的规模做到:
#!/bin/bash
#SBATCH -t 4:00:00 # walltime
#SBATCH -N 2 # number of nodes in this job
#SBATCH -n 32 # total number of processor cores in this job
# Set required modules
module purge
module load intel/16.0
module load gcc/6.3.0
# Job working directory
echo Working directory is $SLURM_SUBMIT_DIR
cd $SLURM_SUBMIT_DIR
echo Running on host `hostname`
echo Time is `date`
echo Directory is `pwd`
# Run Command
while <"KeepRunning.txt” == 1>
do
for i in {0..40}
do
if <“RunJob_i.txt” == 1>
then
mpirun -np 8 -rr -f ${PBS_NODEFILE} <job_i> &
fi
done
done
wait
这种方法是行不通的(只是崩溃),但我不”不知道为什么(可能会过度使用资源?)。我的一些同行建议使用parallel
和srun
,但据我所知,这需要我分批调用MPI功能。这将是一个巨大的资源浪费,因为很大一部分运行很快完成或失败(这是预期的行为)。这个问题的一个具体例子是开始一批5个8核心工作,其中4个立即崩溃;现在32核心将无所事事,而第五项工作等待20分钟才能完成。
由于优化可能需要5000个以上的mpi调用,任何提高效率都会使绝对壁挂时间产生巨大差异。有人对我如何在大型SLURM作业上运行持续的MPI调用流有任何建议吗?我真的很感激任何帮助。
除非给定的MPI运行不到几秒钟,一个选择是创建一个SLURM预订,然后只需提交预订里面你们的工作(一旦预留处于活动,你的工作不会花费任何时间在排队) –
@GillesGouaillardet这是一个我没有意识到的选项,谢谢!看起来我可能没有权限在我们的群集上执行此操作,但我会尽力在明天将其整理出来。作为替代,我认为gnu sem也可能工作。对于hpc还是新的。 – user8176985