如何使用SLURM为mpirun制作hostefile

问题描述 投票:0回答:2

我可以访问每个节点上有 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
bash mpi openmp hpc slurm
2个回答
1
投票

所以我找到了解决方案 您可以使用以下

scontrol show hostname $SLURM_NODELIST 
(两个反勾号很重要) 获取展开的节点列表,然后将其转换为数组,然后使用以下逻辑将代码分配给特定节点。

#!/bin/bash  

#SBATCH --time=48:00:00 
#SBATCH --job-name=a80
#SBATCH --partition=cpu                               
#SBATCH --nodes=5                   
#SBATCH --ntasks-per-node=7
#SBATCH --cpus-per-task=5

let tasks_per_job=1
let threads_per_task=5
let tasks_per_node=7

export OMP_NUM_THREADS=$threads_per_task

module load intel/2018.0.1.163 

cd $SLURM_SUBMIT_DIR

list=`scontrol show hostname $SLURM_NODELIST ` 

n_arr=($list)

cd a80

k=1
v=0

for j in */*/
do
cd $j
ifort HI_final_mkl_openmp.f90 -mkl -qopenmp -xHOST -align array64byte -o chk
rm nodefile*
rm job*.out
echo "${n_arr[$v]}" >nodefile$k 
mpirun  -np $tasks_per_job  -hostfile nodefile$k ./chk  >& job$k.out &
if [[ $k -eq $tasks_per_node ]] 
then
let v=$v+1
k=0
fi
sleep 2
let k=$k+1
cd ../..
done

wait

0
投票

Libin 的另一个答案启发了这个答案。这应该是一个更简洁和通用的解决方案:

nodelist=$(scontrol show hostname $SLURM_NODELIST)
printf "%s\n" "${nodelist[@]}" > nodefile

然后您可以将

nodefile
传递给您的命令。我建议在末尾添加
rm nodefile
来清理空间,因为它是一个临时文件。

© www.soinside.com 2019 - 2024. All rights reserved.