在Slurm runscript中运行OpenMPI作业时出现SEGFULTS

在Slurm runscript中运行OpenMPI作业时出现SEGFULTS,mpi,openmpi,slurm,infiniband,Mpi,Openmpi,Slurm,Infiniband,我们正在运行一个小型群集环境,通过Infiniband连接Intel Xeon节点。登录节点未连接到infiniband互连。所有节点都运行Debian Jessie 我们在登录节点上运行Slurm 14.03.9。由于系统OpenMPI已经过时,并且不支持MPI3接口(我需要),因此我编译了一个自定义OpenMPI 2.0.1 当我通过手动启动MPI作业时 mpirun --hostfile hosts -np xx program_name, 它在多个节点上运行良好,并充分利用了Infin

我们正在运行一个小型群集环境,通过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运行脚本中显式指定要运行的“-np”和“-hostfile”也没有帮助。手动启动时运行正常的命令在Slurm环境中启动时会导致SEGFULT

在SEGFULTS发生之前,我从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
--------------------------------------------------------------------------
我在谷歌上搜索了一下,但没有找到多少有用的信息。我假设这可能是对锁定内存的限制,但在计算节点上执行“ulimit-l”会返回“unlimited”


非常感谢您为我的作业在Slurm环境中使用OpenMPI运行提供的帮助。

最后,我解决了这个问题

segfaults确实与上面发布的错误消息有关,这是Slurm调度作业的计算节点上的“最大锁定内存”限制的结果

我花了很长时间才解除这个锁定的内存限制。通过谷歌找到的所有标准程序都不起作用(编辑
/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,谢谢你的宝贵意见

你有没有在一个肮脏的工作中运行ulimit?可能是slurm启动时没有正确的锁定内存限制。@Carles Fenoy:很好!当我在slurm runscript中运行“ulimit-l”时,它显示64,这非常小。但是,如果我通过ssh登录到同一个计算节点并运行“ulimit-l”,它将显示“unlimited”。如果我试图更改runscript内部的限制,我会得到“最大锁定内存:无法修改限制:不允许操作”。有没有办法允许用户更改此限制?我在所有节点上都有根访问权限。它需要在slurm init脚本中更改,在开始时添加一个ulimit-l unlimited。我在作业运行的节点上的/etc/init.d/slurmd启动脚本中添加了“ulimit-l unlimited”,但在作业运行脚本中仍然返回“64”。我在那个节点上重新启动了slurm守护进程,甚至重新启动了机器,但仍然是一样的。我觉得这很令人费解。我还根据/etc/security/limits.conf添加了一个条目(但据我所知,守护进程在启动时不会读取此文件)。重新启动服务后,请使用
cat/proc/PID/limits检查限制
I使用
mpirun
运行Node.js应用程序时遇到相同的问题。设置
pm2-
LimitMEMLOCK
服务也适用于我。非常感谢您分享此解决方案。IIUC,您在
slurmd.service
中说设置
LimitMEMLOCK=unlimited
,但这不应该是
LimitMEMLOCK=infinity