如何跨 Slurm 集群上的多个节点运行 MPI Python 脚本?错误:警告:无法在 2 个节点上运行 1 个进程,将 nnodes 设置为 1
Posted
技术标签:
【中文标题】如何跨 Slurm 集群上的多个节点运行 MPI Python 脚本?错误:警告:无法在 2 个节点上运行 1 个进程,将 nnodes 设置为 1【英文标题】:How To Run MPI Python Script across multiple nodes on Slurm cluster? Error: Warning: can't run 1 processes on 2 nodes, setting nnodes to 1 【发布时间】:2019-11-03 13:23:06 【问题描述】:我正在 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.
【问题讨论】:
你的 python 脚本实际上是 MPI 并行化的吗?很抱歉问,但只是仔细检查。人们对 MPI 有误解。此外,在我的 slurm 中,我使用srun
而不是 mpirun
。最后,为 4 个进程请求 2 个节点效率极低 - 节点间通信比节点内慢得多。如果您可以在一个节点上运行您的作业,请不要将其分散到多个节点上。避免使用它,除非您的节点每个只有 2 个进程,或者您正在用完一个节点的 RAM 并且需要更多来处理作业。
很高兴。你能发布你的脚本,也许是那个教程的链接吗?我从来没有用mpi运行过python。我对带有 slurm 的 C 和 C++ 的命令是 srun -n #processes executable
+ 一些其他系统相关选项。我通过键入#SBATCH -N #nodes
以类似的方式选择节点数。我通过salloc
交互式会话或sbatch runscript
运行整个过程。根据消息,尽管您的代码仅以串行方式运行,即在一个进程/等级上运行。
【参考方案1】:
警告的原因是这一行:
#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
性能说明:
如果可能,在同一节点上运行代码会更快。节点间通信比节点内慢,可能会慢一些,但也可能慢得多,这取决于集群架构等因素。 请查阅您的集群设置建议。例如,在我的这个脚本中,我应该添加某些 slurm 选项 - 特别是-c
和 cpu_bind=
(更多 here)。
【讨论】:
不客气,很高兴熟悉 Python 中的 MPI :)以上是关于如何跨 Slurm 集群上的多个节点运行 MPI Python 脚本?错误:警告:无法在 2 个节点上运行 1 个进程,将 nnodes 设置为 1的主要内容,如果未能解决你的问题,请参考以下文章