基于抡锤者论坛(lcz.me)热帖的实测数据整理。多卡张量并行(TP)能不能跑出预期速度,八成卡死在"卡间通信"这一环。这篇把从主板选型到带宽实测的完整链路写清楚,附真实数字。
一、为什么多卡 TP 这么难:卡在"卡间通信"
单卡装得下就单卡跑,这是第一原则。真正需要多卡 TP 的是"一张卡装不下、又要并发"的场景。TP 的瓶颈不是单卡算力,而是卡间 all-reduce 的带宽——每生成一个 token 都要做 all-reduce,消息小、次数密、对延迟极其敏感。
关键数字(论坛实测):
- 没有 P2P 时,RCCL 退回 SHM(经主机内存中转),实测带宽只有 约 6.9 GB/s
- 走上 PCIe switch 直接 P2P 后,能到 约 10.3 GB/s,双向聚合约 19.7 GB/s
- 两张卡对主机的流量仍共享那条 Gen3 x16 上行(约 15.75 GB/s),switch 不会把这条变宽
一句话结论:switch 治的是通信,不是算力。它买到的是卡间直连不经主机、延迟更低,顺带绕开很多老平台上 P2P 根本不通的问题。单请求、单卡跑的话,买 switch 基本白花钱。
二、主板与 BIOS:能跑 P2P 的硬条件
多卡 TP 对主板的要求,论坛总结得很清楚,必须满足:
- 两条插槽都直连 CPU(能拆成 x8/x8 的 PCIe 4.0/5.0 即可,不必硬上 x16)——第二个长插槽若实际接芯片组,不行
- 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(走内存中转)。
定位与处理:
- 别只信 BIOS 选项,先实测:
rocm-smi --showtopo(看两卡 weight/hops,同 root complex 应为 1 跳),跑一段hipDeviceCanAccessPeer,或用RCCL_DEBUG=INFO看 all-reduce 走的是 P2P 还是 SHM lspci -vvv找路径上的 bridge,看 ACSCap / ACSCtl——ACSCtl 里出现 SrcValid 之类就是它在挡- BIOS 里找 ACS Enable / Access Control Services,找到就关;没选项时 Linux 侧常用
pci=acs_override(或按 PCI 地址用 setpci / 内核补丁改 ACS Control 位) - 注意:如果两卡各自直连 CPU 的两个 root port、中间没有桥,ACS 根本不参与,关不关都一样,别白折腾
关 ACS = 拿设备间隔离换 P2P 性能,本机自用 / 可信环境再关;有其它租户或多用户就别关。
四、老平台的真实风险:不是算力,是"老化"
以 X99(2014 年的 Haswell/Broadwell-EP + C612)为例,今天最大的风险不是性能够不够,而是主板供电与 PCB 老化、二手板/延长线的接触问题:
- 掉卡常见原因(多为链路/供电,不是 CPU 老):金手指/插槽氧化(重插、擦金手指)、延长线/riser 信号完整性(先直插对比)、电源老化(12V 纹波变大、多卡瞬态触发 OCP,换新电源、每卡独立供电线)
- 真正不可逆的是主板 VRM 老化:电解电容 ESR 上升,供电相数少的板长期高负载更容易出问题
五、落地前两条自查
- 先确认收益场景:单请求单卡跑 = switch 白花钱;收益只在多卡 TP/PP、且通信卡在主机中转时才兑现
- 装完先验证再调:
rccl-tests+NCCL_DEBUG=INFO确认走的是 P2P 还是 SHM,别跳过这步就以为"上 switch 就该更快"
核心原则:多卡 TP 拼的是卡间通信链路,不是单卡算力。先把"两卡能不能互相看见 + 走的是 P2P 还是 SHM"这两件事验证清楚,再谈调优。