【问题标题】:Job fails while using srun or mpirun in slurm在 slurm 中使用 srun 或 mpirun 时作业失败
【发布时间】:2020-10-11 14:24:20
【问题描述】:

我正在尝试使用 slurm 提交工作。但是,如果我使用 srunmpirun,作业会失败。但是,它在mpiexec 下运行良好,尽管分配了多个节点和多个内核,但它只运行一个进程。

实际使用的命令是:

srun /nfs/home/6/sanjeevis/dns/lb3d/src/lbe -f input-default

以下是我使用srun/mpirun 得到的错误:

[mpiexec@n1581] match_arg (utils/args/args.c:163): unrecognized argument pmi_args
[mpiexec@n1581] HYDU_parse_array (utils/args/args.c:178): argument matching returned error
[mpiexec@n1581] parse_args (ui/mpich/utils.c:1642): error parsing input array
[mpiexec@n1581] HYD_uii_mpx_get_parameters (ui/mpich/utils.c:1694): unable to parse user arguments

代码编译得很好,但我遇到了 slurm 的问题。对此的任何帮助表示赞赏。

编辑:这是可执行文件的which mpirun, mpiexec, and ldd 的输出:

/nfs/apps/MPI/openmpi/3.1.3/gnu/6.5.0/cuda/9.0/bin/mpirun
/nfs/apps/ParaView/5.8/binary/bin/mpiexec
        linux-vdso.so.1 =>  (0x00007fff78255000)
        libmpi.so.12 => /nfs/apps/Compilers/Intel/ParallelStudio/2016.3.067/impi/5.1.3.210/intel64/lib/release_mt/libmpi.so.12 (0x00002ae6cb57d000)
        libz.so.1 => /nfs/apps/Libraries/zlib/1.2.11/system/lib/libz.so.1 (0x00002ae6cbd4c000)
        libmpifort.so.12 => /nfs/apps/Compilers/Intel/ParallelStudio/2016.3.067/impi/5.1.3.210/intel64/lib/libmpifort.so.12 (0x00002ae6cbf67000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00002ae6cc315000)
        librt.so.1 => /lib64/librt.so.1 (0x00002ae6cc519000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ae6cc721000)
        libm.so.6 => /lib64/libm.so.6 (0x00002ae6cc93e000)
        libc.so.6 => /lib64/libc.so.6 (0x00002ae6ccc40000)
        libgcc_s.so.1 => /nfs/apps/Compilers/GNU/6.5.0/lib64/libgcc_s.so.1 (0x00002ae6cd003000)
        /lib64/ld-linux-x86-64.so.2 (0x0000558ea723a000)

这是我的job script

【问题讨论】:

  • 并非如此,因为在那里,用户使用--mca 标志并错误地获取unrecognized argument mca。就我而言,我没有将pmi_args 作为参数传递,也不知道它来自哪里。
  • 在您的批处理脚本中,添加 which mpirunwhich mpiexecldd /nfs/home/6/sanjeevis/dns/lb3d/src/lbe 以确定使用哪个 MPI 库以及由谁使用。
  • @francescalus:谢谢。我已经更新了作业脚本和其他用户要求的更多细节。我不知道配置 PMI。我怎样才能得到这些信息?
  • @GillesGouaillardet:更新了所需的信息和作业脚本。

标签: fortran mpi cluster-computing distributed-computing slurm


【解决方案1】:

根本原因是多个 MPI 实现的混合,它们不互操作:

  • mpirun 来自 Open MPI
  • mpiexec 可能是 Paraview 的内置 MPICH
  • 您的应用是使用英特尔 MPI 构建的。

尝试改用/nfs/apps/Compilers/Intel/ParallelStudio/2016.3.067/impi/5.1.3.210/bin/mpirun(或/nfs/apps/Compilers/Intel/ParallelStudio/2016.3.067/impi/5.1.3.210/bin64/mpirun),以便启动器与您的 MPI 库匹配。

如果您想将srun 与英特尔 MPI 一起使用,则需要一个额外的步骤。 你首先需要

export I_MPI_PMI_LIBRARY=/path/to/slurm/pmi/library/libpmi.so

【讨论】:

    【解决方案2】:

    最可能的问题是程序是用一个 MPI 实现编译并用另一个 MPI 实现调用的。确保所有 MPI 环境变量都设置正确:OPAL_PREFIX、MPI_ROOT、PATH 和 LD_LIBRARY_PATH。

    【讨论】:

      猜你喜欢
      • 2015-10-29
      • 2021-07-25
      • 2019-06-09
      • 1970-01-01
      • 2019-10-02
      • 2021-08-17
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多