分布式训练中网络带宽利用率分析踩坑记录
最近在优化一个100B参数模型的分布式训练时,遇到了网络带宽利用率异常的问题。经过两周的排查,总结了一些实用的经验。
问题现象
使用8卡A100训练时,理论带宽利用率只有35%,远低于预期的70%以上。通过nvidia-smi监控发现GPU显存利用率正常,但网络传输速率明显偏低。
排查步骤
首先确认了基础配置:
export NCCL_SOCKET_IFNAME=eth0
export NCCL_IB_DISABLE=0
export NCCL_IB_GID_INDEX=3
然后用nccl-tests测试网络性能:
# 测试带宽
./build/all_reduce_perf -b 8 -e 128M -f 2 -g 1
# 测试延迟
./build/collective_perf -c allreduce -t 1000
测试结果显示带宽只有理论值的30%。
关键发现
最终定位到问题:
- 网卡驱动版本过旧,从4.1升级到5.7后,利用率提升至60%
- 网络MTU设置不当,调整为9000后带宽提升明显
- 多进程间通信阻塞,通过设置
NCCL_BLOCKING_WAIT=1解决
实用建议
- 建议在训练前先运行nccl-tests进行基准测试
- 网络配置需要统一管理,避免不同节点配置差异
- 可以通过
torch.distributed.get_world_size()确认实际参与训练的设备数
这个坑踩得有点惨,但收获不小。大家在分布式训练中也遇到过类似问题吗?

讨论