AI服务器InfiniBand配置:从链路检查到带宽测试的实操流程
在 AI 服务器上配置 InfiniBand,核心目标只有两个:让节点之间的 HCA 网卡链路正常 Up,并让上层应用(NCCL、MPI)能走这条高速通道。
顺序上,先确认硬件和驱动是否就绪,再检查链路状态,接着启动子网管理器,最后用带宽测试工具验证实际吞吐。
跳过前两步直接调 IPoIB 或 NCCL 参数,很容易在错误的方向上浪费时间。
先确认 HCA 卡被系统识别
InfiniBand 网卡在 Linux 下通常显示为 ib0 或 ibp* 接口,但接口存在不代表驱动正常。
先查 PCI 设备:
lspci | grep -i mellanox
如果没有任何输出,说明卡没插好、PCIe 插槽被禁用或服务器 BIOS 里未开启。
继续用 ibstat 看 HCA 列表:
ibstat
正常输出里应能看到类似 CA 'mlx5_0' 的条目,并带有 State: Active 和 Rate: 100(或 200/400,取决于卡型号)。
如果命令不存在,先安装 rdma-core 和 infiniband-diags:
# CentOS/RHEL 系
yum install -y rdma-core infiniband-diags
# Ubuntu/Debian 系
apt install -y rdma-core infiniband-diags
装完后重新执行 ibstat。
若 State 显示 Down 或 Polling,先检查光模块和线缆是否插紧,再确认交换机端口是否启用。
检查链路状态与端口速率
ibstat 输出里重点看三个字段:State 应为 Active,Physical state 应为 LinkUp,Rate 应达到网卡标称速率。
如果 State 是 Init 或 Down,常见原因是子网管理器(SM)没有运行,或者两端速率协商不一致。
用 iblinkinfo 可以查看整条链路的对端信息:
iblinkinfo
输出会列出每个端口的 LID、对端端口和速率。
如果对端显示 0x0,说明交换机侧没有识别到该端口,优先排查线缆和交换机配置。
启动子网管理器 opensm
InfiniBand 网络需要子网管理器来分配 LID 和路由。
小规模集群通常选一个节点运行 opensm 即可。
安装并启动:
# CentOS/RHEL
yum install -y opensm
systemctl enable --now opensm
# Ubuntu/Debian
apt install -y opensm
systemctl enable --now opensm
启动后用以下命令确认:
systemctl status opensm
ibstat | grep -E 'State|LID'
LID 不再是 0x0,且 State 为 Active,说明 SM 已生效。
如果集群有多台交换机,需要确认 SM 只在一个子网内运行,避免多个 SM 冲突。
配置 IPoIB 以便基础连通性测试
IPoIB 是把 InfiniBand 模拟成普通 IP 网络,方便用 ping 和 ssh 做初步验证。
它不用于最终的高性能传输,但适合排错。
以 ib0 为例,在 Netplan 或 nmcli 中配置:
# 使用 nmcli 临时配置示例
nmcli con add type infiniband con-name ib0 ifname ib0
nmcli con mod ib0 ipv4.addresses 192.168.100.1/24
nmcli con mod ib0 ipv4.method manual
nmcli con up ib0
另一台节点配 192.168.100.2/24,然后互相 ping。
能通说明链路和 IP 层正常。
注意 IPoIB 有 datagram 和 connected 两种模式,默认 datagram 模式 MTU 较小,大包传输性能有限,不要用 IPoIB 的 iperf 结果判断 InfiniBand 真实带宽。
用 ib_write_bw 验证实际带宽
真正的 InfiniBand 性能要用 ib_write_bw 测试。
在服务端节点执行:
ib_write_bw -d mlx5_0 -a
在客户端节点执行:
ib_write_bw -d mlx5_0 -a 192.168.100.1
其中 -d 指定 HCA 设备名,-a 表示测试所有消息大小。
输出里关注 BW average 一栏,100Gbps 网卡实际可达 90Gbps 以上属于正常范围。
如果带宽明显偏低,检查两端是否都用了同一张卡、MTU 是否一致。
常见问题与避坑
ibstat 显示 State: Down:先确认线缆和光模块,再检查交换机端口是否被 shutdown。
如果是直连两台服务器,仍需至少一端运行 opensm,否则链路无法进入 Active。
ib_write_bw 报错 “Couldn't connect to 192.168.100.1:18515”:通常是 IPoIB 地址没配通或防火墙拦截。
先用 ping 确认,再检查 ib0 是否处于 UP 状态。
NCCL 仍然走以太网:
在启动训练脚本前设置环境变量 NCCL_IB_DISABLE=0 和 NCCL_SOCKET_IFNAME=ib0,
并用 NCCL_DEBUG=INFO 查看日志确认是否选中了 IB 设备。
多台机器都装了 opensm:同一子网内多个 SM 会互相干扰,表现为 LID 频繁变化。
只保留一个节点运行 opensm,其余节点禁用该服务。
完成上述步骤后,建议把 ibstat、iblinkinfo 和 ib_write_bw 的结果记录下来,作为后续扩容或故障对比的基线。
如果链路状态和带宽都正常,但训练任务仍慢,问题通常不在 InfiniBand 本身,应转向检查 NCCL 配置和 GPU 利用率。