前阵子帮朋友验收一批八卡H800训练服务器,采购清单上GPU、CPU、内存写得满满当当。结果货到了机房,我插上光模块一看,卡上印的是ConnectX-5,一百G的旧型号。单机跑小模型完全没问题,一旦上多机数据并行,NCCL的AllReduce带宽立马卡脖子。说句大白话,在大模型训练这个场景里,GPU是发动机,RDMA网卡是变速箱——发动机马力再大,变速箱不给力,轮子就是转不快。
这篇文章想把各个型号GPU机器上的RDMA网卡参数这件事彻底聊透:主流训练服务器出厂带的是什么卡、端口速率和代际该怎么理解、拿到机器怎么验货、部署中都有哪些坑。内容基本来自我这几年代验机器、搭集群和排查故障的实践,某些型号的具体配置会随采购批次变化,下单前务必以官方规格书和合同配置单为准。
1. 多机训练卡在网卡上:RDMA为什么是大模型的硬需求
聊参数之前,先搞清楚网卡在训练里到底扮演什么角色。很多人第一次接触RDMA网卡是在搭建GPU集群的时候,觉得"不就是换张高速网卡吗",但其实它解决的是分布式训练里最要命的一环:跨节点的梯度同步。
1.1 大模型训练每天都在做"全网同步"
拿最常见的数据并行来说。假设你有4台8卡机器,一共32块GPU,每块GPU拿到的是一份完整模型和不同的数据切片。每一步训练里,前向传播完,反向传播算出梯度,接下来所有GPU要把梯度汇总求平均,再把这个平均值广播回每一个人。这个操作在NCCL里叫AllReduce,每迭代一次就做一次。
7B参数模型用AdamW优化器时,参与通信的梯度加上优化器状态,一次AllReduce可能就要传走几十GB的数据。如果再叠加张量并行、流水线并行,节点间的通信频率还会更高。模型越大,通信占比越夸张。很多时候你觉得"4台机器扩展效率怎么才60%",不是GPU不行,是通信把算力拖住了。通信时间降不下来,GPU再多也是围观。
1.2 RDMA省掉的CPU拷贝,省下的就是训练时间
普通TCP/IP走以太网传数据,流程很啰嗦:网卡收包,通知内核,CPU把数据从内核态缓冲区拷贝到用户态,再交给GPU。在大规模集群里,这套流程既占CPU又增加延迟。RDMA的全称是Remote Direct Memory Access,核心思路是绕过操作系统内核,让网卡直接读写对端机器的内存,配合GPUDirect甚至能直接和GPU显存打交道,数据从一块GPU到另一台机器上的GPU,中间不落地。
NVLink解决的是单机8卡之间的问题,跨机器的流量几乎全部压在RDMA网卡上。它慢一寸,NCCL就慢一尺。这也是为什么大模型集群几乎清一色铺InfiniBand而不是普通以太网——不是网卡发烧,是通信模式决定的需求。
1.3 网卡不只是传数据,还能"帮算"
普通网卡像快递员,把包裹放你家门口就走。现在的HDR/NDR网卡,配合InfiniBand交换机上的SHARP技术,更像顺路帮你把垃圾带走的邻居——交换机在转发数据的同时,顺手帮你做掉一部分梯度聚合运算,不需要把所有数据都汇聚到某一台机器上算完再分发回去。
NCCL检测到支持SHARP的硬件后,会主动把部分归约操作卸载到网络里。这就是为什么同样挂着"RDMA"的名头,InfiniBand方案在多机AllReduce场景下的表现,常常比普通RoCE方案更稳。理解了这一层,再去看那些网卡参数就有感觉了。
2. 主流GPU服务器机型的RDMA网卡速查与参数解读
我把目前大模型训练里最常碰到的几类8卡服务器整理成了一张速查表,都是出厂比较典型的配置。注意是"常见配置",不是绝对配置,买整机时还是要对照配置单一项项核。
| 机型 | GPU配置 | RDMA网卡(常见) | 端口速率/协议 | 数量与形态 |
|---|---|---|---|---|
| NVIDIA DGX A100 | 8x A100 40/80GB | ConnectX-6 HDR HCA | 200Gb/s InfiniBand | 8张,板载OSFP |
| NVIDIA DGX H100 | 8x H100 SXM | ConnectX-7 NDR HCA | 400Gb/s InfiniBand | 8张,板载OSFP |
| NVIDIA DGX B200/GB200系列 | 8x B200 SXM | ConnectX-8 SuperNIC | 400Gb/s InfiniBand | 按官方规格书 |
| 浪潮NF5688M6 | 8x A100 | ConnectX-6 HDR HCA(常见) | 200Gb/s IB / 可选RoCE | 8张,PCIe x16 |
| 浪潮NF5688M7 | 8x H100/H800 | ConnectX-7 NDR(常见) | 400Gb/s IB / 可选RoCE | 8张,PCIe x16 |
| 超微/技嘉等白牌8卡机 | 8x A100/H100/H800 | 完全按采购配置,CX6/CX7都有 | 100/200/400G不等 | PCIe或OCP,数量4-8不等 |
| 国产加速卡平台(如Atlas 900 A2系列) | 8x 910B | 200G RoCE网卡比较常见 | 100/200G RoCE | 按整机规格 |
2.1 NVIDIA DGX系列:从A100到B200的网卡演进
DGX A100是我这两三年见到的训练集群里最多的整机型号。它每个GPU对应一张ConnectX-6 HDR卡,200G InfiniBand,一共8张,相当于GPU和网卡是1比1绑定的。这种绑定的好处是NCCL做跨节点通信时,每张卡都能找到自己的专属通道,不太会因为多卡共享网卡而互相抢带宽。机器上另外还有两个25G以太网口,通常用于管理、监控和存储访问,注意别和训练网口搞混。
到了DGX H100,网卡升级到ConnectX-7,端口速率直接翻到400G,也就是NDR代际。同时机器仍然保留了2个ConnectX-7的200G以太网口,用于存储和带外管理。400G口走训练数据,200G口走存储和控制面,这个分工要记住,不然部署时容易把业务流量打到错误的网卡上。
DGX B200之后的架构变化更大,ConnectX-8 SuperNIC配合GB200 NVL的机柜级互联,和以前的8卡一个节点的模式已经不太一样了。如果是新采购,建议直接找官方规格书确认,不要凭老经验猜。
2.2 OEM和白牌服务器:网卡配置决定权在采购单
浪潮的NF5688M6是8卡A100时代很常见的国产OEM平台,标配通常是8张ConnectX-6 HDR 200G,型号和DGX A100接近。到了NF5688M7,配H100/H800时常见ConnectX-7 NDR 400G,但这里有个坑:部分版本给的是RoCE网卡而不是InfiniBand HCA。RoCE也能跑RDMA,但交换机和配置方式完全不同,买机器时如果没写清楚,测试的时候发现链路起不来就很尴尬。
超微、技嘉这些白牌8卡服务器就更灵活了,从双口100G到双口200G再到8张400G,什么配置都有人用。灵活意味着责任在你——下单时网卡型号、接口形态、数量、是否含光模块和线缆,全部要在采购单里写死,不然供应商"同型号不同批次"换配置是常有的事。
我见过最典型的案例:客户买了一台白牌机,说明书写"HDR网卡",发货过来是ConnectX-6单口版本,实际只有一个200G口,和另一台机器的双口卡根本组不了8卡对等的网络拓扑。返工成本非常难看。
2.3 国产加速卡平台与自建集群的网卡选型思路
国产加速卡平台现在是另一个重要选项。以Atlas 900 A2这类节点为例,8卡910B通常配的是200G RoCE网卡,走以太网做RDMA的路子,和DGX系列的InfiniBand路线不是一回事。寒武纪、海光等平台,目前更多见的是100G RoCE起步。
如果自己DIY一台8卡训练机,一个相对成熟的方案是上两张200G RoCE网卡做bonding,成本低于InfiniBand交换机,但需要自己调流控,后面第5章会细说。选型逻辑其实就一句话:预算充足、买整机、不想在网络上花太多精力的,照着DGX的思路铺InfiniBand;自己组装、有网络基础、想控成本的,RoCE完全能打,但别指望插上电就能跑。
3. 网卡参数里最容易看走眼的几个维度
很多采购单上只写"200G网卡"四个字,但到大货验收的时候才发现,光"200G"根本不足以定义一张卡。下面对比几个最容易看走眼的维度。
3.1 速率背后的代际问题
InfiniBand从EDR、HDR到NDR,代际直接决定编码方式和物理层设计,不是简单的"速度翻倍"。EDR是100G,用4条25G的NRZ通道;HDR是200G,用4条50G的PAM4通道;NDR是400G,用4条100G的PAM4通道。线缆和光模块也跟着代际走:HDR通常用QSFP56/QSFP112,NDR基本是OSFP。这些物理形态互相之间不通用。
见过太多人买了NDR网卡,结果手里线缆是HDR的,插上去链路协商被拉回200G,从系统里看又是"正常link up",实际一跑吞吐就露馅。所以验收时不能只看端口速率数字,要连着光模块、线缆的类型一起核对,最好直接看协商出来的活跃速率。
3.2 HCA与NIC:InfiniBand和RoCE是两个物种
同样是Mellanox/NVIDIA的ConnectX系列,HCA和NIC的定位不同。HCA是Host Channel Adapter,主要面向InfiniBand,连接IB交换机;NIC是Network Interface Card,主要面向以太网,跑RoCEv2。整机原装的卡倒还好,因为厂商已经配好了对应的交换机方案。最怕的是自己单独买卡,只记了个"ConnectX-7",结果买来的是以太网版本,想插到IB交换机上,直接不识别。
确认方式其实很简单:拿到卡之后看型号后缀,或者跑一下ibstat。有IB支持的卡ibstat能正常输出链路状态,纯RoCE卡经常会报找不到设备。买之前如果拿不准,就让供应商把型号完整写到合同中,不要简写。
3.3 形态、插槽与功耗
网卡物理形态大致分三种:PCIe标准卡、OCP 3.0夹层卡、板载专有形态。DGX系列通常是板载,浪潮、戴尔的机器常见OCP,白牌机PCIe居多。不同形态之间不能随便互换,而且PCIe插槽本身还有讲究:ConnectX-6 200G的卡建议至少插在PCIe Gen4 x16上,ConnectX-7 400G建议插PCIe Gen5 x16。如果插到Gen4 x8的槽上,理论带宽直接腰斩,网卡显示link正常,实际速率卡在PCIe瓶颈上。
功耗也不容忽视。高速网卡满负载功耗不低,ConnectX-7级别的卡跑满时可以到30瓦以上。机房后部理线太乱把网卡进风口堵住的事我见过不止一次,最直接的后果就是长时间训练后网卡过热,要么降速,要么链路不稳。8卡机器本来散热就紧张,网卡这块不要省。
3.4 固件和端口配置的隐藏影响
同型号网卡,不同固件版本的默认行为可能差很多。NVIDIA在ConnectX-6/7系列上加入了拥塞控制、SHARP卸载等特性,老固件默认关掉某些优化,NCCL跑出来的性能会差一截。所以新机器到手,第一件事我建议是登录Mellanox官网查固件版本,看有没有更新的维护版本。训练集群这种7x24跑大流的场景,固件稳定性和性能同样重要。
另外,很多卡默认是双端口设计。比如ConnectX-6有两个200G口,ConnectX-7有两个400G口。默认情况下两个口是独立使用的,不要想当然"双口合并就是400G"——除非特定型号明确支持端口聚合,否则两个口的带宽各算各的,拓扑设计和NCCL绑卡时都要按照实际端口数来。
4. 拿到机器先做一次网卡体检:从命令到实测
新机器上线前,我习惯把每一张网卡过一遍体检流程。流程不复杂,但非常能识破配置不对、翻新混用这类问题。下面按顺序说。
4.1 系统层面先认设备
开机装好驱动后,先确认系统认出了什么。最直接的是用lspci:
lspci | grep -i mellanox lspci | grep -i nvidia正常能看到类似这样的输出:
03:00.0 Infiniband controller: Mellanox Technologies MT28908 Family [ConnectX-6] 07:00.0 Infiniband controller: Mellanox Technologies MT28908 Family [ConnectX-6]重点核对两部分:一是设备家族名是否和采购单一致(ConnectX-5、ConnectX-6、ConnectX-7一眼就能分清),二是出现次数是否等于你买的网卡数量。8卡机器如果只认出来4张HCA,先查PCIe插槽和供电,不要急着装系统。
接着用ethtool看已激活端口的协商速率:
ethtool ib0 ethtool enp3s0f0np0对InfiniBand接口,ethtool输出的速度字段如果显示400000Mb/s,说明物理层协商到了NDR;如果只有200000Mb/s,那链路可能是HDR,线缆或者模块问题就要开始排查了。
4.2 用网卡自己的工具读取真实参数
系统层面看完,用网卡自带工具确认细节。InfiniBand的卡优先看ibstat:
ibstat理想输出是每个端口显示:
State: Active Physical state: LinkUp Rate: 400 Base lid: 0x0a如果状态是Initializing或者Polling,链路还没真正建立。这时候别急着骂网卡,先看同一个子网里的交换机端口、子网管理器是不是在正常工作。IB网络没有可用的子网管理器时,端口会一直停留在初始化状态,这是新手最容易误判成硬件故障的点。
接着用ibv_devinfo看设备能力:
ibv_devinfo -v关键字段是active_speed和active_width。比如active_speed: 400 Gb/s (NDR)、active_width: 4x,这两个字段要和线缆、交换机端口能力对得上。
如果是RoCE网卡,用mlxlink看也更直观:
mlxlink -d mlx5_0输出里的Rate字段会明确显示200Gb/s (HDR)或400Gb/s (NDR),同时还能看到FEC模式、信号完整性相关参数。
上电后还想确认固件和序列号,可以装MFT工具集:
mstflint -d /dev/mst/mtxxxx query这里能读到FW Version、PSID、Serial Number。如果发现固件版本和序列号对应的出厂批次明显对不上,或者PSID被改过,就要警惕翻新卡了。
4.3 带宽实测才是硬道理
静态参数都对,不代表性能没问题。上机后一定要做一轮实测。先做单机回环测试,确认网卡本身无损:
ib_write_bw -d mlx5_0 --report_gbit -D 10再找另一台同配置的机器,一边跑服务端,一边跑客户端:
# 服务器端 ib_write_bw -d mlx5_0 --report_gbit # 客户端,对端IP按实际填 ib_write_bw -d mlx5_0 192.168.1.2 --report_gbit经验值是:直连、无交换机的情况下,200G网卡单向write跑到190Gbps以上算正常,400G网卡跑到380Gbps上下算正常。如果只有20Gbps,别碰应用,先把链路清一遍。
多机整组测试用NCCL的官方工具更贴近训练场景:
./all_reduce_perf -b 512M -e 8G -f 2 -g 8这个命令会执行8卡AllReduce测试,出来的algbw和busbw指标才是你真实训练中能指望的通信带宽。如果8卡组网测出来的busbw明显低于单卡理论值,优先查第5章要说的MTU、流控和NCCL网卡绑定。
4.4 翻新卡怎么识别
二手市场水深,采购整机也可能被塞翻新卡。除了上面说的序列号核对,还有几个土办法:看金手指有没有明显磨损,正常新卡金手指光洁,翻新卡往往有插拔痕迹;看风扇和散热片上积灰,这个骗不了人;开机后跑一遍高强度读写测试,翻新卡最容易在持续高负载下出现端口错误计数飙升。
网卡计数器里多关注eth_tool -S输出中的fec_corrected_uncorrected、rx_errors、link_down这几个值。新卡跑一小时几乎不应该有连续增长的错误计数。如果一轮测试下来几百上千的错误,当场就该换货,别等上线后再折腾。
5. 部署中躲不开的RDMA配置坑位与排查路径
网卡本身没问题,配置不到位,性能依然会烂得离谱。这一章整理几个我实践里踩得最多的坑,按"从低层到高层"的思路讲,遇到问题可以顺着排查。
5.1 RoCE三件套:MTU、PFC、ECN
InfiniBand方案的好处是"出厂即配好",IB交换机内置无丢包机制,子网管理器管理链路,多数场景插上就能用。RoCE方案便宜,但代价是网络参数得自己调。三个东西缺一不可:MTU、PFC流控、ECN。
MTU务必两端一致,建议开jumbo frame到9000。RoCE头不小,小MTU会严重浪费有效载荷,所以从网卡到交换机到对端网卡,MTU链路要通盘设一致。流控方面,交换机的端口要开启PFC,为RoCE流量单独规划无损优先级队列,否则普通以太网的尾丢弃机制一遇到微突发就是大量丢包。ECN负责拥塞标记,配合网卡端的拥塞控制算法,能让高负载下不至于瞬间崩掉。
我见过一个很典型的RoCE案例:交换机上PFC没开,测试重负载下ib_write_bw只有理论带宽的20%,丢包率看着也不高,但每一次丢包对RDMA来说都是致命的——因为RDMA默认走可靠连接,一旦丢包就要触发重传,重传又引发更多拥塞,恶性循环。开了PFC和ECN之后,带宽直接拉满。
5.2 多网卡、多GID下的路由混乱
8卡机器上有8张HCA,每张卡又可能注册多个GID(Global Identifier)。NCCL在启动时会枚举设备,如果选错设备或GID,流量可能走到一个完全不对的网络路径上。
一个实用的做法是显式绑定网卡。在训练脚本启动前设置环境变量:
export NCCL_IB_HCA=mlx5_0:1,mlx5_1:1,mlx5_2:1,mlx5_3:1,mlx5_4:1,mlx5_5:1,mlx5_6:1,mlx5_7:1 export NCCL_SOCKET_IFNAME=eth0 # 根据自己的管理网口改:1表示使用该设备的第一个端口,具体值要配合机器的真实拓扑来填。RoCE环境里经常还需要:
export NCCL_IB_GID_INDEX=3GID_INDEX不对时,通信能通但性能奇差。这个参数在不同网卡驱动版本下默认值不同,遇到"明明连上了但带宽不对"的诡异情况,先把GID index挨个试一遍,很多时候问题就出在这。
5.3 过热、降速与"设备消失"
高速网卡对环境的敏感程度远超普通千兆卡。训练机房后部理线差、机柜风道不合理,网卡散热片长期被动吸收GPU排出的热风,就会出现链路降级甚至设备从系统里消失的情况。Windows下常见的"GPU被物理移除"提示,有一部分其实就是PCIe链路不稳定导致设备掉线。
Linux下怎么发现这类问题?训练跑着跑着dmesg出现PCIe AER错误,或者ibstat偶发LinkDown,先别怀疑驱动,量温度、看风向、查线缆。高速光模块对弯折半径也有要求,光缆被门夹过、被理线架折成直角,长期运行信号质量劣化,误码率升高,也会表现为链路时断时续。
留意一个细节:网卡的FEC误码计数器。ethtool -S里如果fec_corrected以肉眼可见的速度增长,说明当前的信号余量已经很紧张了。先换一根线缆试试,通常比折腾软件配置管用得多。
5.4 一个真实排查案例:8卡机IB带宽怎么都上不去
去年处理过一台8卡机器,单机回环跑ib_write_bw能到接近满速,但两台机器一配,双机带宽只有80Gbps左右。流程是这么走的:先看主机侧,8张卡都link active、速率400G,网卡绑定和GID设置没问题;再换光模块,无改善;换线缆,无改善;最终把目光放到交换机上,发现这台IB交换机的子网管理器实例没有正常接管端口,多个端口的链路协商被降到了HDR代际。
修复子网管理器后,双机带宽恢复到了接近400G的水平。这个案例说明,主机配置看着没问题时,不要急着重装系统,先检查中间链路和整个子网的协议状态。InfiniBand没有子网管理器就是无法进入稳定Active状态,这种问题只靠网卡自检根本看不出来。
我把排查顺序固定成这样:主机网卡配置 → 光模块与线缆 → 交换机端口状态及错误计数 → 子网管理器/流控配置 → NCCL绑卡与GID。按这个顺序往下走,绝大多数RDMA性能问题都能定位到具体层级。
最后分享一个我个人的习惯:每批新机器到货,我都会做一张"网卡体检单",记录每张卡的PCIe地址、固件版本、序列号、协商速率、实测带宽,再归档到集群的资产文档里。这样之后无论谁报障,第一件事就是翻体检单,对比"到货时是什么样"和"现在是什么样",很多疑难杂症当场就有思路了。这个习惯帮我省掉的排查时间,比当初做体检花掉的时间多得多。