【发布时间】: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运行整个过程。根据消息,尽管您的代码仅以串行方式运行,即在一个进程/等级上运行。
标签: python parallel-processing mpi cluster-computing slurm