H20 集群 NCCL 大规模集合通信压测与慢节点定位
NCCL 是大规模 GPU 训练集群验收中最核心的指标之一。它不只是跑一个 all_reduce_perf,而是用集合通信的方式把 GPU、NIC、RoCE、路由、交换机、拥塞控制、驱动版本和节点一致性一起压出来。
一、NCCL 验收要回答什么问题
大规模 NCCL 验收至少要回答四个问题。
第一,单机 8 卡是否健康。单机测试用来排除 GPU、驱动、CUDA、NCCL、本机拓扑问题。如果单机都不稳定,跨机测试没有意义。
第二,双机 16 卡是否稳定。双机测试是跨机通信的最小闭环,可以验证 RoCE、GID、HCA、GDR、业务网控制通道、MPI 启动链路是否正常。
第三,百台级性能曲线是否符合预期。64/128/256 机测试用于观察规模放大后的带宽曲线、尾延迟和慢节点。
第四,整网是否可复跑。350 机以上验收不是为了得到一个漂亮数字,而是证明网络、GPU 和软件栈具备生产稳定性。
二、测试指标如何解读
NCCL Tests 常见字段包括:
| 字段 | 含义 |
|---|---|
size |
消息大小,单位 Byte |
time |
完成一次通信操作的时间 |
algbw |
算法带宽,反映应用视角的数据处理速率 |
busbw |
总线带宽,按通信模式折算后的有效链路压力 |
#wrong |
校验错误数量,必须为 0 |
重点展示 busbw、消息大小、节点规模、测试轮次和错误数量。更好的方式是给出分规模结果矩阵和结论。
三、推荐测试阶梯
生产验收不要一开始就跑 350 机。建议按下面顺序推进:
单机 8 卡
-> 双机 16 卡
-> 8/16 机冒烟
-> 64 机小规模验收
-> 128 机百台级验收
-> 256 机大规模验收
-> 350 机以上整网验收
每个阶段都要记录:
| 记录项 | 说明 |
|---|---|
| 节点清单 | 使用脱敏编号即可,例如 node-001 |
| GPU 数量 | 每个节点应为 8 卡 |
| HCA 列表 | 公开文档使用 <train-hca-list> |
| NCCL 参数 | 保留模板,隐藏真实业务细节 |
| 消息大小 | 例如 120M 到 34G |
| 迭代次数 | 生产验收不要只跑少量 iteration |
| 错误计数 | #wrong 必须为 0 |
| 结果曲线 | 关注稳定区间,不只看最大值 |
四、参考命令
单机测试模板:
NCCL_ALGO=ring ./all_reduce_perf \
-g 8 \
-b 8M \
-e 12G \
-f 2
双机和多机测试模板:
mpirun -np <total-ranks> \
-H <node-a>:8,<node-b>:8,... \
--allow-run-as-root \
--bind-to none \
--map-by slot \
--mca btl_tcp_if_include <business-bond> \
--mca oob_tcp_if_include <business-bond> \
-x NCCL_SOCKET_IFNAME=<business-bond> \
-x UCX_NET_DEVICES=<business-bond> \
-x NCCL_IB_DISABLE=0 \
-x NCCL_IB_GID_INDEX=<gid-index> \
-x NCCL_IB_HCA=<train-hca-list> \
-x NCCL_IB_TC=<traffic-class> \
-x NCCL_NET_GDR_LEVEL=<gdr-level> \
./all_reduce_perf \
-g 1 \
-b 120M \
-e 34G \
-f 2 \
-n 100
AllToAll 测试模板:
mpirun -np <total-ranks> \
-H <node-list> \
<mpi-and-nccl-env> \
./alltoall_perf \
-b 1M \
-e 2048M \
-f 2 \
-g 1
五、慢节点定位方法
慢节点定位要避免“看到带宽低就换卡”。建议按下面顺序收敛。
第一步,确认是否所有节点都慢。如果所有节点一起下降,优先看全局网络、交换机队列、PFC/ECN、DCQCN、NCCL 参数和业务网控制通道。如果只有少数节点慢,优先看节点本地。
第二步,做排除式测试。把可疑节点从集群里拿掉,复跑同规模或小一档规模测试。如果带宽恢复,说明可疑节点或其上联路径需要深入排查。
第三步,做单机 8 卡测试。确认本机 GPU、驱动、NVSwitch 或 PCIe 拓扑是否正常。
第四步,做单卡隔离。轮流排除某一张 GPU 或某一路 HCA,观察结果是否恢复:
# 示例:排除最后一张 GPU,仅使用 GPU 0-6
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6 ./all_reduce_perf \
-g 7 \
-b 8M \
-e 12G \
-f 2
第五步,检查网卡与 RoCE 参数。包括 GID、PFC、ECN、DSCP、CNP、DCQCN、MTU、错误包、丢包、交换机端口统计。
第六步,检查 GPU 和 NVSwitch。包括 nvidia-smi、ECC、row remapper、Fabric Manager、dmesg、lspci。
六、慢节点常见原因矩阵
| 现象 | 可能原因 | 建议动作 |
|---|---|---|
| 单机 NCCL 异常 | GPU、NVSwitch、驱动、CUDA/NCCL 版本 | 单机复测,查 nvidia-smi 和 Fabric |
| 双机异常,单机正常 | RoCE、GID、HCA、路由、GDR | 查 show_gids、HCA、nvidia_peermem |
| 小规模正常,大规模掉速 | PFC/ECN/DCQCN、交换机拥塞、ECMP 不均 | 查队列、CNP、交换机端口统计 |
| 某个节点加入就掉速 | 节点本地配置漂移或硬件异常 | 节点隔离,单卡/单 HCA 排查 |
#wrong 不为 0 |
数据正确性问题,风险高 | 停止验收,查软件栈和硬件错误 |
| Fabric Manager 异常 | NVSwitch 未识别或服务启动失败 | 查 dmesg、journalctl、lspci |
七、验收报告应该怎么写
一份可用的 NCCL 验收报告,建议至少包含:
- 集群规模和脱敏节点范围。
- GPU、驱动、CUDA、NCCL、OFED 版本矩阵。
- RoCE 关键配置摘要。
- 单机、双机、小规模、百台级和整网测试结果。
- AllReduce 和 AllToAll 指标说明。
- 慢节点处理记录和复测结果。
八、总结
智算集群 NCCL 验收的关键,不是一次跑出高带宽,而是形成从单机到整网的可复跑阶梯。AllReduce 能验证梯度同步类场景,AllToAll 能补充验证更复杂的多对多通信压力。慢节点定位要从 GPU、NIC、RoCE、Fabric、路由和参数一致性逐层排除。
NCCL 是验收工具,也是巡检工具。把 NCCL 测试做成标准化、脱敏化、可复跑的流程,后续扩容、替换、升级和故障恢复都会轻松很多。