如何解决Slurm和mpi4py:用一个进程重复n次操作,而不是用n个进程重复一次
我是Slurm和mpi4py的新用户,所以我想测试一下在这里找到的一些代码:https://researchcomputing.princeton.edu/mpi4py
我的python代码test.py
如下:
from mpi4py import MPI
import sys
def print_hello(rank,size,name):
msg = "Hello World! I am process {0} of {1} on {2}.\n"
sys.stdout.write(msg.format(rank,name))
if __name__ == "__main__":
size = MPI.COMM_WORLD.Get_size()
rank = MPI.COMM_WORLD.Get_rank()
name = MPI.Get_processor_name()
print_hello(rank,name)
我的bash脚本是:
#!/bin/bash
#SBATCH --job-name=mpi4py-test
#SBATCH --nodes=1
#SBATCH --ntasks=3
#SBATCH --cpus-per-task=1
srun python test.py
运行sbatch run.sh
时,我希望得到类似的东西:
Hello World! I am process 0 of 3 on node1.
Hello World! I am process 1 of 3 on node1.
Hello World! I am process 2 of 3 on node1.
但是我得到了:
Hello World! I am process 0 of 1 on node1.
Hello World! I am process 0 of 1 on node1.
Hello World! I am process 0 of 1 on node1.
如果我将srun python test.py
更改为srun mpiexec -n 3 python test.py
,我会得到:
Hello World! I am process 0 of 3 on node1.
Hello World! I am process 2 of 3 on node1.
Hello World! I am process 1 of 3 on node1.
Hello World! I am process 1 of 3 on node1.
Hello World! I am process 0 of 3 on node1.
Hello World! I am process 2 of 3 on node1.
Hello World! I am process 0 of 3 on node1.
Hello World! I am process 1 of 3 on node1.
Hello World! I am process 2 of 3 on node1.
该过程执行了3次,但我只希望它执行一次。 预先感谢。
解决方法
可能是因为其中之一
- Mpi4py使用的MPI版本未通过Slurm支持进行编译;或
- 您有一个非常老的OpenMPI;或
- 您有一个很老的Slurm。
运行
mpiexec -n 3 python test.py
可能会为您带来想要的东西。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。