算力机器网络配置,内网多机数据传输优化
算力机器网络配置,内网多机数据传输优化
算力机器网络配置和多机数据传输优化,核心目标是让多台服务器之间用最短路径、最大带宽交换数据。
如果你刚拿到几台GPU服务器,准备跑分布式训练或高性能计算,这篇文章会从零开始带你完成内网组网、参数调优和效果验证。
先确认硬件和拓扑再动手
动手改配置前,先搞清楚每台机器有几张网卡、分别是什么速率、交换机怎么连的。
用下面命令查看网卡和链路状态:
ip -br link show
ethtool eth0 | grep -E 'Speed|Duplex'
如果看到 Speed: 10000Mb/s 说明是万兆网卡,25000Mb/s 则是25G。算力集群内网建议至少25G起步,多机AllReduce通信对带宽非常敏感。
确认交换机端口和网线对应关系。
常见做法是每台机器用一张独立网卡专门跑计算流量,另一张跑管理流量。
如果只有一张网卡,至少要把管理流量和计算流量用VLAN或不同子网隔开,避免SSH操作把带宽占满。
配置静态IP和巨型帧
内网机器建议全部使用静态IP,不要依赖DHCP,否则重启后IP变化会导致NCCL通信失败。
以Ubuntu 22.04为例,编辑 /etc/netplan/01-netcfg.yaml:
network:
version: 2
ethernets:
eth1:
addresses:
- 192.168.100.11/24
mtu: 9000
routes:
- to: 192.168.100.0/24
scope: link
应用配置:
sudo netplan apply
ip addr show eth1
MTU设为9000(巨型帧)能显著降低大包传输的CPU开销,但要求交换机所有端口都支持并开启巨型帧。
如果只改服务器不改交换机,会出现丢包或连接超时。
可以先在两台机器间用 ping -M do -s 8972 192.168.100.12 测试,能通说明路径MTU没问题。
多机数据传输的关键调优项
系统层面有几个参数直接影响多机传输吞吐。
先调整内核网络缓冲区:
sudo sysctl -w net.core.rmem_max=134217728
sudo sysctl -w net.core.wmem_max=134217728
sudo sysctl -w net.ipv4.tcp_rmem='4096 87380 134217728'
sudo sysctl -w net.ipv4.tcp_wmem='4096 65536 134217728'
把以上内容写入 /etc/sysctl.d/99-network-tuning.conf 可以持久化。
如果使用NCCL做GPU间通信,还需要指定网卡和协议。
在启动训练脚本前设置:
export NCCL_SOCKET_IFNAME=eth1
export NCCL_IB_DISABLE=1
export NCCL_DEBUG=INFO
有RDMA网卡(如Mellanox ConnectX系列)时,
把 NCCL_IB_DISABLE 设为0,
并安装 rdma-core 和对应驱动。RDMA能绕过内核直接访问内存,
延迟比TCP低一个数量级,
是算力集群内网的首选方案。
避坑指南:这些错误最容易踩
- 网卡名写错:
NCCL_SOCKET_IFNAME必须和ip link显示的接口名完全一致,写成eth0但实际是enp3s0会导致NCCL回退到慢速接口。 - 防火墙没关:内网机器之间建议关闭
ufw或firewalld,或者放行计算端口。用sudo ufw status确认状态。 - MTU不一致:交换机端口MTU没改成9000,服务器改了反而导致大包被丢弃,表现为小包能通、大文件传输卡死。
- 多网卡路由冲突:两张网卡在同一子网会导致回包路径不确定,建议计算网卡和管理网卡使用不同网段。
验证传输效果
配置完成后用 iperf3 测试实际带宽:
# 服务端
iperf3 -s
# 客户端
iperf3 -c 192.168.100.12 -t 30 -P 4
25G网卡单流应该跑到20Gbps以上,多流 -P 4 应接近线速。
如果只有几Gbps,检查MTU、网卡速率和CPU占用。
GPU多机通信可以用NCCL自带的测试工具:
./build/all_reduce_perf -b 8 -e 128M -f 2 -g 8
观察 algbw 和 busbw 数值,busbw接近网卡线速的80%以上算正常。
常见疑问
内网多机传输一定要用RDMA吗?
不一定。TCP也能跑分布式训练,但延迟和CPU占用更高。如果预算允许且对训练效率有要求,RDMA是更优选择。
MTU 9000在所有场景都推荐吗?
不是。跨公网或经过不支持巨型帧的设备时,保持1500更稳妥。内网全链路可控时才建议开9000。
NCCL_DEBUG=INFO输出太多怎么办?
排查阶段开INFO,稳定后改成WARN,减少日志干扰。
完成以上步骤后,你的算力机器内网应该能稳定跑满网卡带宽。
实际环境中交换机型号和驱动版本差异较大,遇到异常优先回看避坑部分,并用 ethtool -S 查看网卡丢包计数定位问题。