【发布时间】:2021-05-27 03:47:30
【问题描述】:
我有一个简单的 Fortran 程序,可以在屏幕上打印 MPI 程序中每个处理器的排名数和排名
program hello
include 'mpif.h'
integer rank, size, ierror, tag, status(MPI_STATUS_SIZE)
call MPI_INIT(ierror)
call MPI_COMM_SIZE(MPI_COMM_WORLD, size, ierror)
call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierror)
print*, 'Hello from rank', rank, 'of ',size
call MPI_FINALIZE(ierror)
end
当我使用 srun (slurm 20.11.3) 运行这个程序时,它可以正常工作
> srun -n 2 -N 2 ./h.x
Hello from rank 0 of 2
Hello from rank 1 of 2
我在 docker 容器中编译了程序,并在我的 HPC 系统上使用了奇异性(版本 3.6.1-1)来尝试在我的容器中运行相同的程序
> singularity pull docker://thomasrobinson/hello:latest
> srun -n 2 -N 2 singularity exec hello_latest.sif /opt/hello/hello.x
Hello from rank 0 of 1
Hello from rank 0 of 1
主机系统和容器都有 mpich-falvor MPI。如果我将容器制作成奇点而不是 docker,我也会遇到同样的问题。如果我在没有-N 2 的情况下执行srun -n 2,我也会遇到同样的问题。我注意到,如果我使用mpirun --bootstrap ssh 而不是srun,那么我会得到预期的行为(与在我的主机系统上运行程序相同),但是会影响性能。我在使用其他版本的奇异性和 slurm 时遇到过这个问题。
我需要做什么才能使用 srun 来运行我的容器?
【问题讨论】:
-
您使用的是哪个
mpi插件? IIRCsrun --mpi=list确实列出了所有插件。理想情况下,PMIx已安装并且您使用它(或使用srun --mpi=pmix_v3 ...强制它)。如果没有,至少确保 SLURM 提供的 PMI 库存在于您的容器中。
标签: docker mpi slurm mpich singularity-container