我在使用slurm作为调度程序的群集上运行作业。
通常,我想要做的是首先向队列提交一些作业,然后等待所有作业完成,收集数据,分析并再次向队列提交相同数量的作业。这个过程重复了很多次。
在single_job.sh
中,我有:
sbatch -p partition_name -n 1 -c 1 --job-name=job_name --wrap="some_excutable"
在multiple_jobs.sh
中,我有:
for (( i=0 ; i < ${n_rounds} ; i ++ ))
do
#### submit jobs
for (( j=0 ; j < ${n_jobs} ; j ++ ))
do
bash single_job.sh
done
#### Check whether the jobs have finished, if not, wait
njobs=`qstat -u user_name | grep ${job_name} | grep -v ' C ' | wc -l`
count=1
while [ $njobs -gt 0 ]
do
sleep 10
njobs=`qstat -u user_name | grep ${job_name} | grep -v ' C ' | wc -l`
count=`expr $count + 1 `
done
#### collect data and analyze
python collect_data_analyze.py
done
但是,当调度程序系统遇到高负载的IO负担时,我的程序会在作业提交或等待期间终止。以下是返回的消息。
sbatch: error: slurm_receive_msg: Socket timed out on send/recv operation
sbatch: error: Batch job submission failed: Socket timed out on send/recv operation
在那些时刻,用qstat
检查作业运行状态需要很长时间。
我想知道有没有办法检测系统何时忙碌并等待几秒钟才能解决这个问题?