运行 Slurm 运行脚本中的 OpenMPI 作业时出现段错误

Segfaults when running OpenMPI job inside Slurm runscript

我们正在 运行建立一个小型集群环境,其中包含通过 Infiniband 连接的 Intel Xeon 节点。登录节点未连接到 infiniband 互连。所有节点 运行 Debian Jessie。

我们 运行 登录节点上的 Slurm 14.03.9。由于系统OpenMPI已经过时并且不支持MPI3接口(我需要),我编译了一个自定义的OpenMPI 2.0.1。

当我通过

手动启动 MPI 作业时
mpirun --hostfile hosts -np xx program_name,

它 运行 很好,也在多个节点上,并且充分利用了 Infiniband。好

但是,当我从 Slurm 运行脚本内部调用我的 MPI 应用程序时,它会因奇怪的段错误而崩溃。我编译了支持 Slurm 的 OpenMPI,而且 PMI 似乎也可以工作,所以我可以简单地写

mpirun program_name

在 Slurm 运行 脚本中,它会自动将作业分派到具有正确数量 CPU 核心的正确节点。但是,我不断收到这些段错误。

在 Slurm 运行 脚本中向 mpi运行 明确指定“-np”和“--hostfile”也无济于事。在 Slurm 环境中启动时,手动启动时 运行 没问题的完全相同的命令会导致段错误。

在出现段错误之前,我从 OpenMPI 收到以下错误消息:

--------------------------------------------------------------------------
Failed to create a completion queue (CQ):

Hostname: xxxx
Requested CQE: 16384
Error:    Cannot allocate memory

Check the CQE attribute.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
Open MPI has detected that there are UD-capable Verbs devices on your
system, but none of them were able to be setup properly.  This may
indicate a problem on this system.

You job will continue, but Open MPI will ignore the "ud" oob component
in this run.

Hostname: xxxx
--------------------------------------------------------------------------

我用谷歌搜索了它,但没有找到太多有用的信息。我认为这可能是锁定内存的限制,但在计算节点 returns "unlimited" 上执行 "ulimit -l" 应该是这样。

感谢任何帮助,让我的工作在 Slurm 环境中使用 OpenMPI 运行。

终于,我解决了这个问题。

段错误确实与上面发布的错误消息有关,这是 "max locked memory" Slurm 调度作业的计算节点限制的结果。

我花了很长时间才解除这个锁定的内存限制。通过 Google 找到的所有标准程序都不起作用(既不编辑 /etc/security/limits.conf 也不编辑 /etc/init.d/slurmd)。原因是我的 Debian Jessie 节点使用 systemd,它不支持这些文件。我必须添加行

[Service]
LimitMEMLOCK=32768000000

进入我所有节点上的文件/etc/systemd/system/multi-user.target.wants/slurmd.service。它不适用于 unlimited,因此我不得不使用以字节为单位的总系统 RAM。修改完这个文件后,我执行了

systemctl daemon-reload
systemctl restart slurmd

在所有节点上,最后问题消失了。谢谢 Carles Fenoy 的宝贵意见!