我試圖在使用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