2. 多卡互联基础:常见互联拓扑、通信协议与数据通路组成

2.1 为什么多卡互联是故障排查的“第一现场”

在数据中心或高性能计算节点中,单张加速卡(GPU/NPU)早已无法满足大模型训练、科学计算或大规模推理的需求。多张卡必须协同工作,而协同的前提是卡与卡之间能够高效、可靠地交换数据。绝大多数“训练变慢”“通信超时”“卡间数据不一致”等问题,根源并不在计算核心,而在互联链路本身。因此,理解多卡互联的拓扑结构、协议栈和数据通路,是定位故障的第一步。

本章将围绕三个核心问题展开:

  • 物理上,卡与卡之间通过什么“路”连接(拓扑);
  • 逻辑上,数据在“路”上按什么规则传输(协议);
  • 组成上,一次完整的数据交换要经过哪些硬件与软件环节(通路)。

2.2 常见互联拓扑:从“直连”到“交换”

拓扑决定了任意两张卡之间通信的跳数、带宽上限和故障隔离域。以下是三种最常见的拓扑形态。

2.2.1 全连接(Fully Connected / 直连拓扑)

每张卡都通过独立的物理链路与其他所有卡直接相连。例如 8 张卡时,每张卡需要 7 条链路。这种拓扑的优点是任意两卡之间一跳直达,延迟最低,且单条链路故障只影响一对通信关系。缺点是链路数量随卡数平方增长,物理实现成本极高,通常只用于 2~4 卡的小规模直连场景(如部分主板上支持的双卡直连)。

2.2.2 树形/胖树拓扑(Fat-Tree)

通过交换机(Switch)分层连接所有卡。常见于 InfiniBand 或以太网组网。卡先接入叶子交换机,叶子交换机再向上汇聚。胖树拓扑的核心思想是越往上带宽越宽,以缓解汇聚层的带宽瓶颈。这种拓扑扩展性强,但通信路径变长,且交换机成为潜在的单点故障与拥塞热点。

2.2.3 混合立方体/环状拓扑(如 NVLink 全互联)

以 NVIDIA NVLink 为例,在 8 卡 HGX 基板上,通常采用混合立方体(Hybrid Cube)拓扑:每张卡与相邻的 3~4 张卡建立高速直连,形成多个环和交叉连接。这种拓扑在物理链路数量和通信自由度之间取得平衡,是当前 AI 服务器内部最主流的拓扑。其特点是:并非任意两卡都直连,部分通信需要经过中间卡转发(hop)。

拓扑与故障排查的关系:如果训练日志显示“卡 2 与卡 3 通信超时”,而卡 2 与卡 4 通信正常,则大概率是卡 2 与卡 3 之间的直连链路或对应端口故障;如果所有跨交换机通信都异常,则问题可能出在汇聚交换机或上行链路。

2.3 通信协议:数据如何“讲规矩”

拓扑是“路”,协议是“交通规则”。不同互联技术使用不同的协议栈,故障现象也因此不同。

互联技术 典型协议/标准 传输单位 流控机制 典型故障特征
PCIe PCIe 4.0/5.0/6.0 TLP(事务层包) 基于信用(Credit)的流控 链路降速(x16→x8)、CRC 错误、设备丢失
NVLink NVLink 3.0/4.0 FLIT(流控制单元) 链路级重传 带宽减半、链路训练失败、CRC 错误
InfiniBand IB TA(传输层) 数据报文(Packet) 基于信用 + 重传 链路误码率升高、端口降级、重传超时

以 PCIe 为例,其协议栈分为物理层、数据链路层和事务层。故障排查中最常关注的是:

  • 物理层:链路训练状态机(LTSSM)是否进入 L0 状态;
  • 数据链路层:是否出现 ACK/NAK 重传;
  • 事务层:TLP 包头中的地址或 Tag 是否异常。

2.4 数据通路组成:从“发起”到“完成”

一次典型的多卡数据交换(例如卡 A 向卡 B 发送张量)需要经过以下完整通路。理解这条通路上的每个环节,是故障分段定位的基础。

卡A显存 → 卡A的DMA引擎 → 卡A的协议发送引擎 → 卡A物理端口
    → 链路(线缆/PCB走线) → 交换机(可选) → 卡B物理端口
    → 卡B的协议接收引擎 → 卡B的DMA引擎 → 卡B显存

这条通路可以划分为三个逻辑段:

  1. 发送端(卡 A 内部):包括显存地址映射、DMA 描述符解析、数据从显存搬运到片上缓存、协议打包(添加包头/校验)、串行化发送。此段故障多表现为 DMA 引擎报错、TLP 构造错误。
  2. 传输介质(链路与交换):包括 PCB 走线、连接器、光模块/线缆、交换机端口。此段故障多表现为信号完整性(误码)、链路训练失败、端口拥塞。
  3. 接收端(卡 B 内部):包括反序列化、协议解包、校验、DMA 写入显存。此段故障多表现为接收缓冲区溢出、CRC 校验失败、地址越界。
排查技巧:当遇到“通信失败”时,不要直接怀疑上层软件。先通过硬件计数器(如 nvidia-smi -q -d PCIE 或 ibstat)查看物理链路状态,再通过 DMA 错误寄存器判断是发送端还是接收端问题,最后才检查驱动或通信库(如 NCCL)的报错。

2.5 案例:一次 NVLink 链路降速的定位过程

现象:某 8 卡 A100 服务器运行分布式训练,日志显示卡 0 与卡 3 之间的通信带宽仅为预期的一半,但训练不中断。

排查过程:

  • 步骤 1:使用 nvidia-smi topo -m 查看拓扑,确认卡 0 与卡 3 在 NVLink 拓扑中为直连关系(非经过转发)。
  • 步骤 2:检查 NVLink 链路状态,发现卡 0 的 NVLink 端口 2 与卡 3 的端口 2 处于 降速模式(从 25GB/s 降为 12.5GB/s)。
  • 步骤 3:查看系统日志,发现该链路曾多次报告 CRC 错误,触发链路重训练并降速。
  • 步骤 4:进一步检查物理连接,发现卡 0 与卡 3 之间的 NVLink 桥接器(NVSwitch 或 PCB 走线)附近有灰尘污染,导致信号质量下降。

结论:物理链路信号完整性问题是根因,降速是硬件保护机制。清理后链路恢复全速。

2.6 常见误区与复盘

误区一:把所有通信问题都归咎于“网络”或“驱动”。
实际上,多卡互联故障中,物理层(链路、端口、连接器)问题占比超过 60%。驱动报错往往是“结果”而非“原因”。

误区二:忽略拓扑对故障范围的影响。
在非全连接拓扑中,卡 A 与卡 C 通信失败,可能是 A-C 直连链路故障,也可能是 A 与中间转发卡 B 之间的链路故障。如果不查拓扑,直接更换 A 卡或 C 卡,往往无法解决问题。

误区三:只看带宽,不看延迟与重传。
有时链路带宽显示正常,但重传率很高,导致实际有效带宽极低。必须同时关注 CRC 错误计数、重传计数和链路训练次数。

2.7 本节小结

多卡互联的故障排查,本质上是对“拓扑路径 + 协议状态 + 数据通路分段”的逐层排查。掌握本节内容后,你应该能做到:

  • 根据卡间通信关系,画出或查清物理拓扑;
  • 区分 PCIe、NVLink、InfiniBand 的协议层差异;
  • 将一次数据交换拆解为发送端、链路、接收端三段,并知道每段的关键故障指标。