我正在Slurm群集上运行一个脚本,该脚本可能会受益于并行处理,因此我尝试实现MPI。但是,它似乎不允许我在多个节点上运行进程。我不知道这是否通常会自动完成,但是每当我在批处理文件中设置--nodes = 2进行提交时,我都会收到错误消息,“警告:无法在2个节点上运行1个进程,将nnodes设置为1。”
我一直试图使其与简单的Hello World脚本一起使用,但仍然遇到上述错误。我在运行MPI脚本时向选项添加了--oversubscribe,但仍然收到此错误。
#SBATCH --job-name=a_test
#SBATCH --mail-type=ALL
#SBATCH --ntasks=1
#SBATCH --cpu-freq=high
#SBATCH --nodes=2
#SBATCH --cpus-per-task=2
#SBATCH --mem-per-cpu=1gb
#SBATCH --mem-bind=verbose,local
#SBATCH --time=01:00:00
#SBATCH --output=out_%x.log
module load python/3.6.2
mpirun -np 4 --oversubscribe python par_PyScript2.py
```bash
I still get the expected output, but only after the error message "Warning: can't run 1 processes on 2 nodes, setting nnodes to 1." I'm worried that without being able to run on multiple nodes, my actual script will be a lot slower.
答案 0 :(得分:3)
警告的原因是此行:
#SBATCH --ntasks=1
,其中您指定将仅在请求2个节点之前运行1个mpi进程。
--ntasks
设置要运行的进程数/在您的情况下使用的等级。然后,用等效的-n
覆盖它,这就是为什么看到结果的原因。
作为参考,这是我在系统上运行的脚本,
#!/bin/bash
#SBATCH -C knl
#SBATCH -q regular
#SBATCH -t 00:10:00
#SBATCH --nodes=2
module load python3
START_TIME=$SECONDS
srun -n 4 python mpi_py.py >& py_${SLURM_JOB_ID}.log
ELAPSED_TIME=$(($SECONDS - $START_TIME))
echo $ELAPSED_TIME
性能说明:
-c
和cpu_bind=
(更多here)。