基于抡锤者论坛(lcz.me)热帖的实测数据整理。多卡张量并行(TP)能不能跑出预期速度,八成卡死在"卡间通信"这一环。这篇把从主板选型到带宽实测的完整链路写清楚,附真实数字。

一、为什么多卡 TP 这么难:卡在"卡间通信"

单卡装得下就单卡跑,这是第一原则。真正需要多卡 TP 的是"一张卡装不下、又要并发"的场景。TP 的瓶颈不是单卡算力,而是卡间 all-reduce 的带宽——每生成一个 token 都要做 all-reduce,消息小、次数密、对延迟极其敏感。

关键数字(论坛实测):

一句话结论:switch 治的是通信,不是算力。它买到的是卡间直连不经主机、延迟更低,顺带绕开很多老平台上 P2P 根本不通的问题。单请求、单卡跑的话,买 switch 基本白花钱。

二、主板与 BIOS:能跑 P2P 的硬条件

多卡 TP 对主板的要求,论坛总结得很清楚,必须满足:

  1. 两条插槽都直连 CPU(能拆成 x8/x8 的 PCIe 4.0/5.0 即可,不必硬上 x16)——第二个长插槽若实际接芯片组,不行
  2. BIOS 三件套:
    • Above 4G Decoding = ON
    • Resizable BAR (ReBAR) = ON
    • CSM = OFF

ReBAR 是"两卡能互相看见对方显存"的必要条件(否则 GPU 认不到另一张卡的地址),但不是全部。

论坛确认支持 ReBAR 的老平台主板型号(供参考):X99 系列的 4MF/4MT/4MTPLUS/4MFPLUS、8D3/8D4/AD3/AD4/BD3/BD4、F8D/T8D/F8DPLUS/M-F/M-T、P4T/P4F/PD3/PD4。

关于"必须 PCIe 3.0 x16 直通"可以放宽:双卡 TP 的本质瓶颈是 all-reduce 带宽,x8/x8 的 PCIe 4.0/5.0 对 27B 这种量级已经够用。关键不是非得 x16,而是两条槽都接 CPU、能拆开。

三、最容易被漏掉的一个:ACS

ReBAR 开着却仍不走 P2P 的高频原因,是 ACS(Access Control Services)没关。ACS 本是给带 switch/桥的拓扑做设备隔离用的,默认会拦"不经过根复合体的对等访问"——也就是 GPU 之间的 P2P DMA。哪怕两卡在同一 root complex、BIOS 也开了 Above 4G + ReBAR,只要路径上有个默认开 ACS 的桥端口,hipDeviceCanAccessPeer 仍可能返回 0,P2P 就退回 host-staged(走内存中转)。

定位与处理:

关 ACS = 拿设备间隔离换 P2P 性能,本机自用 / 可信环境再关;有其它租户或多用户就别关。

四、老平台的真实风险:不是算力,是"老化"

以 X99(2014 年的 Haswell/Broadwell-EP + C612)为例,今天最大的风险不是性能够不够,而是主板供电与 PCB 老化、二手板/延长线的接触问题:

五、落地前两条自查

  1. 先确认收益场景:单请求单卡跑 = switch 白花钱;收益只在多卡 TP/PP、且通信卡在主机中转时才兑现
  2. 装完先验证再调:rccl-tests + NCCL_DEBUG=INFO 确认走的是 P2P 还是 SHM,别跳过这步就以为"上 switch 就该更快"

核心原则:多卡 TP 拼的是卡间通信链路,不是单卡算力。先把"两卡能不能互相看见 + 走的是 P2P 还是 SHM"这两件事验证清楚,再谈调优。