【问题标题】:slurm srun with singularity does not number MPI ranks correctly具有奇点的 slurm srun 不能正确计算 MPI 等级
【发布时间】: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 插件? IIRC srun --mpi=list 确实列出了所有插件。理想情况下,PMIx 已安装并且您使用它(或使用 srun --mpi=pmix_v3 ... 强制它)。如果没有,至少确保 SLURM 提供的 PMI 库存在于您的容器中。

标签: docker mpi slurm mpich singularity-container


【解决方案1】:

MPI 奇点的处理方式与正常情况略有不同。 Singularity MPI documentation 使用 sbatch,所以我先用它进行测试,但我相信它也应该适用于 srun。

$ cat my_job.sh
#!/bin/bash
#SBATCH --job-name singularity-mpi
#SBATCH -N 2 # total number of nodes
#SBATCH --time=00:05:00 # Max execution time

mpirun -n 2 singularity exec hello_latest.sif /opt/hello/hello.x
$ sbatch my_job.sh

您可能还需要做一些额外的配置,但上面链接的文档中有很多关于如何最好地做到这一点的详细信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 2014-02-06
    • 1970-01-01
    • 2019-06-09
    • 2017-10-01
    • 2019-10-02
    • 1970-01-01
    相关资源
    最近更新 更多