8.5 KiB
多机 NCCL 8 卡 alltoall 网络参数 sweep
- 日期:2026-05-23
- 主机:
aikubeworker0012/172.72.8.12,aikubeworker0016/172.72.8.16 - NCCL:临时
2.27.7+cuda12.4 - 测试:2 nodes x 8 GPUs,
alltoall_perf -b 16G -e 16G - HCA:
mlx5_0,mlx5_1,mlx5_6,mlx5_7
结论
NCCL_PXN_DISABLE=1 是本轮唯一有效正向参数,可以把 8 卡 alltoall 从约 30.06 GB/s 提升到约 37.24 GB/s。纳入正式 PDF 矩阵配置后,8 卡 alltoall 原始报告结果为 36.70 GB/s peak / 36.74 GB/s avg。
补充计数器探测显示,NCCL_PXN_DISABLE=1 的实际作用是把 alltoall 流量重新均匀分配到 4 条 400G rail 上。baseline 下 mlx5_0/6 与 mlx5_1/7 的流量约为 3:1;禁用 PXN 后四条 HCA 均衡。但每条 rail 的实际吞吐仍只有约 19-20 GB/s,没有打满 400G rail。
复测错误/拥塞 counter 后,没有看到 discard、链路错误、RoCE 重传、slow restart 或 packet sequence error 增长;主要非零异常是部分端口 port_xmit_wait。不过 allreduce 对照在 354 GB/s busbw 时也会出现同类 port_xmit_wait,所以当前不支持“链路坏包/重传导致慢”的判断,也不能只用 port_xmit_wait 解释 alltoall 低吞吐。更可能的方向是 NCCL internal alltoall 通信模式效率、交换侧调度/拥塞控制,或缺少 NCCL net plugin/SHARP。
这个提升有实际价值,但仍远低于 PDF 参考 76.54 GB/s。在 NCCL_PXN_DISABLE=1 之前做过一轮参数 sweep,其他参数没有改善,部分明显变差:
| Case | Avg Bus BW | 结论 |
|---|---|---|
| baseline | 30.0633 GB/s |
基线 |
NCCL_PXN_DISABLE=1 |
37.2421 GB/s |
有效提升 |
NCCL_P2P_PXN_LEVEL=0 |
20.1205 GB/s |
明显变差 |
NCCL_P2P_PXN_LEVEL=1 |
30.0588 GB/s |
无改善 |
NCCL_P2P_PXN_LEVEL=2 |
30.0437 GB/s |
无改善 |
NCCL_NET_SHARED_COMMS=0 |
27.3889 GB/s |
变差 |
NCCL_NET_SHARED_BUFFERS=0 |
28.2389 GB/s |
变差 |
NCCL_NET_SHARED_COMMS=0 NCCL_NET_SHARED_BUFFERS=0 |
28.2279 GB/s |
变差 |
NCCL_NCHANNELS_PER_NET_PEER=2 |
30.0281 GB/s |
无改善 |
NCCL_NCHANNELS_PER_NET_PEER=4 |
29.9802 GB/s |
无改善 |
NCCL_IB_ADAPTIVE_ROUTING=1 NCCL_IB_AR_THRESHOLD=0 |
30.0526 GB/s |
无改善 |
NCCL_IB_ADAPTIVE_ROUTING=0 |
30.0535 GB/s |
无改善 |
NCCL_IB_PCI_RELAXED_ORDERING=0 |
未完成 | 明显异常,不建议 |
在 NCCL_PXN_DISABLE=1 作为基线后又补跑了一轮叠加参数 sweep。短测窗口里 NVLS_ENABLE=0、P2P_NET_CHUNKSIZE=4M 有小幅波动式提升,但更长 -w 10 -n 10 复测没有复现,不能作为稳定优化项。
| Case | Avg Bus BW | 结论 |
|---|---|---|
NCCL_PXN_DISABLE=1 |
37.0069 GB/s |
短测基线 |
+ NCCL_NVLS_ENABLE=0 |
37.2217 GB/s |
小幅波动,不稳定 |
+ NCCL_P2P_NET_CHUNKSIZE=4194304 |
37.2522 GB/s |
小幅波动,不稳定 |
+ NCCL_BUFFSIZE=8388608 |
37.0911 GB/s |
无实质改善 |
+ NCCL_MIN_NCHANNELS=16 NCCL_MAX_NCHANNELS=16 |
37.0189 GB/s |
无实质改善 |
+ NCCL_IB_AR_THRESHOLD=0 |
37.0843 GB/s |
无实质改善 |
+ NCCL_IB_QPS_PER_CONNECTION=4 NCCL_IB_SPLIT_DATA_ON_QPS=0 |
35.9847 GB/s |
变差 |
+ NCCL_IB_QPS_PER_CONNECTION=4 NCCL_IB_SPLIT_DATA_ON_QPS=1 |
29.8406 GB/s |
明显变差 |
+ NCCL_IB_QPS_PER_CONNECTION=8 NCCL_IB_SPLIT_DATA_ON_QPS=1 |
24.1183 GB/s |
明显变差 |
+ NCCL_NCHANNELS_PER_NET_PEER=8 |
29.8904 GB/s |
明显变差 |
长测复核:
| Case | Avg Bus BW | 结论 |
|---|---|---|
NCCL_PXN_DISABLE=1 |
32.7280 GB/s |
当前窗口基线下滑 |
+ NCCL_P2P_NET_CHUNKSIZE=4194304 |
31.9340 GB/s |
未复现短测提升 |
+ NCCL_NVLS_ENABLE=0 NCCL_P2P_NET_CHUNKSIZE=4194304 |
27.6585 GB/s |
明显变差 |
补充 ENV/INIT/NET 日志确认,性能波动时仍是 NCCL 2.27.7+cuda12.4、4 条 400G HCA、GDR enabled、internal IB plugin;不是退回旧 NCCL、HCA 选择错误或 GDR 失效。
NCCL GRAPH/TUNING 对照
为避免只看带宽结果,补抓了 allreduce 与 PXN disabled alltoall 的 NCCL_DEBUG_SUBSYS=INIT,NET,GRAPH,TUNING,COLL 日志。该日志采样使用短迭代,只用于看 NCCL 图和通道选择,不作为性能结论。
共同点:
| 观察项 | allreduce | alltoall + NCCL_PXN_DISABLE=1 |
|---|---|---|
| NCCL version | 2.27.7+cuda12.4 |
2.27.7+cuda12.4 |
| HCA | mlx5_0,mlx5_1,mlx5_6,mlx5_7 |
mlx5_0,mlx5_1,mlx5_6,mlx5_7 |
| GDR | enabled | enabled |
| external net plugin | missing, internal IB | missing, internal IB |
| channels | 16 coll / 16 nvls / 16 p2p |
16 coll / 16 nvls / 16 p2p |
| p2p channels per peer | 2 |
2 |
| P2P chunk | 131072 |
131072 |
差异:
| 观察项 | allreduce | alltoall + NCCL_PXN_DISABLE=1 |
|---|---|---|
| Pattern 4 | crossNic 0, type NVL/PXN, nChannels 8 |
crossNic 2, type NVL/PIX, nChannels 8 |
NET/IB/*/GDRDMA channel edge lines |
256 |
512 |
P2P/CUMEM channel edge lines |
0 |
224 |
| total NET/P2P channel edge lines | 256 |
736 |
判断:PXN disabled 后 4 条 IB/GDRDMA rail 都仍被使用,且通道数没有少;但 alltoall 的 NCCL graph 明显更复杂,并混入大量本机 P2P/CUMEM 路径。这个结果进一步支持:剩余差距不是 HCA/GDR 基础环境没有生效,而是 alltoall collective graph、P2P/NET 组合方式、internal IB plugin 能力或交换网络策略的问题。
PXN disabled 端口计数器
NCCL_PXN_DISABLE=1 后,8 卡 alltoall 输出:
| Metric | Value |
|---|---|
algbw |
39.37 / 39.46 GB/s |
busbw |
36.91 / 37.00 GB/s |
Avg bus bandwidth |
36.9518 GB/s |
端口计数器:
| Host | HCA | Xmit GB | Recv GB | Xmit GB/s | Recv GB/s |
|---|---|---|---|---|---|
| 172.72.8.12 | mlx5_0 |
590.98 |
590.91 |
19.82 |
19.82 |
| 172.72.8.12 | mlx5_1 |
590.98 |
590.98 |
19.82 |
19.82 |
| 172.72.8.12 | mlx5_6 |
590.98 |
590.90 |
19.82 |
19.82 |
| 172.72.8.12 | mlx5_7 |
590.98 |
590.98 |
19.82 |
19.82 |
| 172.72.8.16 | mlx5_0 |
590.94 |
590.98 |
19.82 |
19.82 |
| 172.72.8.16 | mlx5_1 |
590.94 |
590.98 |
19.82 |
19.82 |
| 172.72.8.16 | mlx5_6 |
590.94 |
590.98 |
19.82 |
19.82 |
| 172.72.8.16 | mlx5_7 |
590.94 |
590.98 |
19.82 |
19.82 |
对比 baseline:
| Case | Rail 分布 | Avg Bus BW |
|---|---|---|
| baseline | mlx5_0/6 约 885 GB,mlx5_1/7 约 295 GB |
30.04 GB/s |
NCCL_PXN_DISABLE=1 |
四条 HCA 均约 591 GB |
36.95 GB/s |
错误/等待 counter 复测
PXN disabled 复测结果:
| 观察项 | 结果 |
|---|---|
Avg bus bandwidth |
36.4512 GB/s |
| 每条 HCA 流量 | 约 712.18-712.28 GiB,四条 rail 均衡 |
| discard / rcv error / symbol error / link down / link recovery | 0 增量 |
| RoCE retrans / slow restart / packet sequence error / out of sequence | 0 增量 |
port_xmit_wait |
mlx5_1、mlx5_7 有增长,约 15.65M-23.49M |
allreduce 对照:
| 观察项 | 结果 |
|---|---|
Avg bus bandwidth |
354.366 GB/s |
| 每条 HCA 流量 | 约 178.03-178.07 GiB,四条 rail 均衡 |
| 错误/重传类 counter | 0 增量 |
port_xmit_wait |
mlx5_1、mlx5_7 有增长,约 6.11M-6.59M |
正式配置更新
configs/multinode_nccl_nccl227_pdf_matrix.yaml 已对 2 nodes x 8 GPUs 的 alltoall 增加:
op_env:
alltoall:
NCCL_PXN_DISABLE: 1
正式矩阵报告:reports_multinode_nccl_pdf_matrix_nccl227.md
| Topology | alltoall Peak Bus BW | alltoall Avg Bus BW | PDF Reference | Status |
|---|---|---|---|---|
| 2 nodes x 8 GPUs | 36.70 GB/s |
36.74 GB/s |
76.54 GB/s |
FAIL |
判断
- PXN 在当前拓扑下对 8 卡 alltoall 有负面影响,禁用后有约
22-24%提升。 - 禁用 PXN 可以修复 rail 分布不均衡,但无法打满每条 400G rail。
- PXN disabled 基线上继续叠加 NVLS、P2P chunk、buffer、channel、QP/split、AR 等参数,没有稳定收益;QP/split 和
NCCL_NCHANNELS_PER_NET_PEER=8反而明显变差。 - 禁用 PXN 后仍只有 PDF 目标的一半左右,剩余差距不是单一 NCCL 环境变量可以补齐。
- 后续重点仍应放在 NCCL net plugin/SHARP、交换网络策略和 NCCL internal alltoall 实现效率;
port_xmit_wait需要结合 allreduce 对照解读,不能单独作为 alltoall 根因。