Slurm 和 mpi4py:用一个进程重复 n 次操作,而不是用 n 个进程重复一次
Slurm and mpi4py : repeat n times the operation with one process instead of doing it one time with n process
我是 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, size, name))
if __name__ == "__main__":
size = MPI.COMM_WORLD.Get_size()
rank = MPI.COMM_WORLD.Get_rank()
name = MPI.Get_processor_name()
print_hello(rank, size, 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
可能会得到你想要的。
我是 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, size, name))
if __name__ == "__main__":
size = MPI.COMM_WORLD.Get_size()
rank = MPI.COMM_WORLD.Get_rank()
name = MPI.Get_processor_name()
print_hello(rank, size, 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
可能会得到你想要的。