AI服务器RDMA配置:从网卡识别到带宽验证的实操步骤
在AI训练集群里,RDMA(远程直接内存访问)能让一台服务器直接读写另一台服务器的内存,绕开CPU和内核协议栈,从而把多机通信延迟压到微秒级。
配置RDMA的核心不是装一个软件,而是让网卡、驱动、交换机无损策略和IP地址四者对齐。
本文以Mellanox(现NVIDIA)网卡和RoCEv2协议为例,给出从识别硬件到验证带宽的完整步骤。
先确认网卡型号和驱动状态
不是所有网卡都支持RDMA。
登录服务器后先查PCI设备,确认是否有Mellanox网卡:
lspci | grep -i mellanox
如果输出类似ConnectX-5、ConnectX-6,说明硬件支持。
接着检查驱动是否加载:
lsmod | grep mlx5_ib
ibv_devinfo
ibv_devinfo属于rdma-core工具包,如果命令不存在,先安装:
apt install rdma-core ibverbs-utils # Debian/Ubuntu
yum install rdma-core libibverbs-utils # RHEL/CentOS
正常输出应能看到hca_id: mlx5_0,且state: PORT_ACTIVE。
如果state是PORT_DOWN,先检查光模块和交换机端口。
启用RoCEv2并配置无损网络
RoCEv2跑在UDP上,需要网络提供无损保障,否则丢包会让RDMA性能骤降。
这部分要同时操作服务器和交换机。
在服务器侧,先确认网卡固件支持RoCEv2:
cableinfo -s # 查看链路速率
mlxconfig -d /dev/mst/mt4119_pciconf0 query | grep -i roce
然后开启PFC(优先级流控)和ECN(显式拥塞通知)。
以ConnectX-5为例,假设使用优先级3:
# 开启PFC
mlnx_qos -i ens1f0 --pfc 0,0,0,1,0,0,0,0
# 设置信任模式为DSCP
mlnx_qos -i ens1f0 --trust dscp
# 开启ECN
mlnx_qos -i ens1f0 --ecn 1
交换机侧需要配置对应的PFC和ECN策略,并保证两端DSCP优先级一致。如果交换机不支持无损配置,RDMA带宽会明显低于预期,甚至出现重传。
绑定IP并检查路由
RoCEv2需要给网卡配置IP地址,且同一RDMA子网内IP要互通。
以ens1f0为例:
ip addr add 192.168.100.1/24 dev ens1f0
ip link set ens1f0 up
用ping测试对端IP,确认二层可达。
然后检查RDMA路由表:
rdma link show
输出中应看到netdev ens1f0和state ACTIVE。
如果显示state DOWN,通常是IP未配或网卡未启用。
用ib_write_bw验证实际带宽
两台服务器都装好perftest工具后,在一台启动服务端:
ib_write_bw -d mlx5_0 -F
另一台运行客户端:
ib_write_bw -d mlx5_0 -F 192.168.100.1
输出中的BW average应接近网卡线速的80%以上(例如100G网卡预期约90Gbps)。
如果带宽只有几Gbps,优先检查PFC是否生效、交换机是否丢包、MTU是否一致(建议设为9000)。
容易踩的坑
- 驱动版本不匹配:OFED驱动和内核版本不兼容会导致
ibv_devinfo找不到设备,安装前用uname -r确认内核版本。 - PFC配置后未生效:用
mlnx_qos -i ens1f0查看当前PFC状态,确认优先级位图正确。 - 防火墙拦截:RDMA使用UDP 4791端口,如果启用了防火墙,需要放行该端口或直接关闭防火墙测试。
- MTU不一致:两端网卡和交换机MTU必须一致,否则大包会被分片,影响性能。
配置完成后,建议把mlnx_qos和IP配置写入开机脚本,避免重启后丢失。
如果训练任务对延迟敏感,还可以进一步调整中断亲和性和CPU绑定,但那是下一步优化的事情了。