misc/ibvwrap.cc:278 NCCL WARN Call to ibv_reg_mr_iova2 failed with error Cannot allocate memory


一、 问题描述:

使用nccl后端及mellanox网卡使用RoCE进行分布式训练时,出现错误 NCCL WARN Call to ibv_reg_mr_iova2 failed with error Cannot allocate memory,添加环境变量export NCCL_DEBUG=INFO以查看nccl日志信息,出现以下错误:

nccl4:1026504:1026828 [1] misc/ibvwrap.cc:278 NCCL WARN Call to ibv_reg_mr_iova2 failed with error Cannot allocate memory
nccl4:1026504:1026828 [1] NCCL INFO transport/net_ib.cc:870 -> 2
nccl4:1026504:1026828 [1] NCCL INFO include/net.h:28 -> 2
nccl4:1026504:1026828 [1] NCCL INFO transport/net.cc:614 -> 2
nccl4:1026504:1026828 [1] NCCL INFO proxy.cc:991 -> 2
nccl4:1026504:1026828 [1] NCCL INFO proxy.cc:1019 -> 2

参考nccl用户手册中的解决方法

https://docs.nvidia.com/deeplearning/nccl/archives/nccl_2143/user-guide/docs/troubleshooting.html#infiniband

在这里插入图片描述

编辑 /etc/security/limits.conf文件并添加以下行:

 * soft memlock unlimited
 * hard memlock unlimited

重启后还是相同的错误,通过在github提问得知,可以先检查ulimit -l的输出,
(https://github.com/NVIDIA/nccl-tests/issues/206

在这里插入图片描述

这里只有8192 ,单位KB,即8MB,显然是不够的,但是在当前用户无法运行 ulimit -l unlimited 命令,加sudo的话会提示找不到命令。这是因为ulimit 是一个 shell 内置命令,这意味着它不是作为一个单独的可执行文件存在于文件系统中,而是集成在 shell 本身中。因此,不能直接使用 sudo 来执行 ulimit,因为 sudo 会尝试寻找一个可执行文件来运行,而不会识别 shell 内置的命令。

jxh@nccl4:~/nccl/nccl-tests$ type ulimit
ulimit is a shell builtin

二、 解决方案:

  • 目前尝试的sudo -s 进入root是可以的,但是也要在root用户中输入命令才可以使用IB运行。

在这里插入图片描述

  • 或者在当前用户输入sudo -u root + 原本的命令,以root用户运行该命令。

在这里插入图片描述

三、 追根溯源:

偶然发现是因为 /etc/ssh/sshd_config文件被更改,UsePAM 被设置成了no,

UsePAM no

正常情况下参照nccl用户手册,编辑/etc/security/limits.conf文件再重启应该是可以的。
这是因为/etc/security/limits.conf文件是在 PAM 配置中被引用的,usepam 被设置成了no,所以导致非root用户都无法使用ib

–> 编辑 /etc/ssh/sshd_config文件,将UsePAM 设置成yes,再重启即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pretend ^^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值