【发布时间】:2021-08-17 13:47:18
【问题描述】:
我可以访问每个节点上具有 40 个内核的 HPC。我有一个批处理文件来运行总共 35 个位于不同文件夹中的代码。我的每个代码都是一个开放的 mp 代码,每个代码需要 4 个内核。那么如何分配 4 个节点,以便每个代码获得 4 个核心。请告诉我如何使用$SLURM_JOB_NODELIST 这个环境,因为我知道它给出了队列中分配的节点列表。基本上我的想法是在每个文件夹中创建节点文件,然后在 mpirun 中使用它。
slurm 是否有任何其他方式自动分配所述资源。因为没有节点文件,我的所有代码都进入单个节点,而所有其他节点保持为空。
#!/bin/bash
#SBATCH --error=job.err
#SBATCH --output=job.out
#SBATCH --time=24:00:00
#SBATCH --job-name=a20
#SBATCH --partition=cpu
#SBATCH --nodes=4
#SBATCH --ntasks-per-node=10
```
#SBATCH --cpus-per-task=4
let tasks_per_job=1
let threads_per_task=4
export OMP_NUM_THREADS=$threads_per_task
module load intel/2018.0.1.163
cd $SLURM_SUBMIT_DIR
cd a20
k=1
for j in */*
do
cd $j
sed -n $k,$k'p' < $SLURM_JOB_NODELIST >nodefile$k
mpirun -np $tasks_per_job --hostfile nodefile$k ./chk >& job$k.out &
sleep 2
let k=$k+1
cd ../..
done
wait
【问题讨论】:
-
您似乎正在尝试运行一堆单节点 4 OpenMP 线程作业。在这种情况下,您最好的选择是 SLURM 作业数组。如果您受限于单个大分配,请考虑使用通量github.com/flux-framework/flux-core(基本上,在 SLURM 分配中的用户空间中运行您自己的资源调度程序)