GPU服务器集群InfiniBand组网方案与算力调度实践

GPU集群网络为什么选InfiniBand而不是以太网

大模型训练和推理对网络带宽和延迟的要求远超传统数据中心业务。8卡A100/H100服务器之间做AllReduce操作时,每轮梯度同步需要传输数十GB数据。以太网(即使100G/400G)的RDMA over Converged Ethernet(RoCEv2)在拥塞场景下延迟抖动严重,而InfiniBand凭借硬件级流控和无损传输,在大规模GPU集群中是事实标准。

InfiniBand的HDR(200Gbps)和NDR(400Gbps)是目前主流速率。200Gbps HDR单端口实测带宽约190Gbps,延迟低于1微秒;NDR 400Gbps端口实测约380Gbps。选择HDR还是NDR取决于集群规模和预算——64节点以内HDR足够,128节点以上建议NDR。

InfiniBand网络架构设计

胖树(Fat-Tree)拓扑是GPU集群的标准方案,保证任意两个节点间等带宽无阻塞:

两层胖树(64节点方案)

– 8台叶交换机(每个连接8台GPU服务器)
– 4台脊交换机(每个连接所有8台叶交换机)
– 每台服务器1张HDR HCA卡,2个200Gbps端口
– 叶-脊间每个连接2条HDR链路做端口聚合

三层胖树(512节点方案)

– 64台叶交换机
– 32台脊交换机
– 16台核心交换机
– 需要NDR交换机支撑

线缆选择:机柜内部用DAC直连铜缆(3米以内),跨机柜用AOC有源光缆或光模块+光纤。NDR 400Gbps推荐QSFP-DD光模块配合OM4多模光纤。

Mellanox OFED驱动安装与配置

GPU服务器安装InfiniBand HCA卡后,需要安装Mellanox OFED驱动:

# 检查HCA卡识别
lspci | grep Mellanox

# 安装MLNX_OFED(CentOS/RHEL 8)
wget https://content.mellanox.com/ofed/MLNX_OFED-5.10-1.0.3.0/MLNX_OFED_LINUX-5.10-1.0.3.0-rhel8.9-x86_64.iso
mount -o ro,loop MLNX_OFED_LINUX-*.iso /mnt
/mnt/MLNX_OFED_INSTALL.sh --all

# 重启后验证
ibv_devinfo
ibstat

# 确认端口状态为Active
# Port 1: State: Active, Physical state: LinkUp, Rate: 200

子网管理器配置:

InfiniBand网络需要子网管理器(OpenSM)分配GID和LID。生产环境推荐在两台交换机上运行主备OpenSM:

# 在交换机上启用OpenSM
# 主SM配置
opensm --create-config /etc/opensm/opensm.conf
# 修改 opensm.conf:
#   sm_priority = 0     # 主SM优先级最高
#   subnet_prefix = 0xfe80000000000000

# 备SM配置(另一台交换机)
#   sm_priority = 1     # 备SM优先级低于主SM
#   subnet_prefix = 0xfe80000000000000

# 启动OpenSM服务
systemctl enable opensmd
systemctl start opensmd

网络性能调优关键参数

InfiniBD网络调优涉及HCA卡、交换机和操作系统三方面:

HCA卡调优:

# 开启自适应路由(NDR交换机必需)
echo adaptive_routing=1 > /sys/class/infiniband/mlx5_0/tc/adaptive_routing

# 调整发送引擎数量
mlxconfig -d /dev/mst/mt4123_pciconf0 set NUM_OF_EQ=8

# 确认PCIe链路宽度与速率
lspci -vvv -s 3b:00.0 | grep Width
# 期望: Width x16, Speed 16GT/s (PCIe 4.0)

操作系统网络参数:

# /etc/sysctl.conf
net.core.rmem_max = 2147483647
net.core.wmem_max = 2147483647
net.ipv4.tcp_rmem = 4096 87380 2147483647
net.ipv4.tcp_wmem = 4096 65536 2147483647

# 关闭NUMA平衡(GPU训练场景)
kernel.numa_balancing = 0

# 巨页配置(大模型训练建议1GB巨页)
echo 32 > /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages
echo 32 > /sys/devices/system/node/node1/hugepages/hugepages-1048576kB/nr_hugepages

GPU算力调度方案

多用户共享GPU集群需要算力调度系统。主流方案有三类:

方案一:SLURM——HPC领域最成熟的调度器,支持GPU拓扑感知调度:

# slurm.conf GPU拓扑配置
GresTypes=gpu
NodeName=gpu[01-08] CPUs=128 Gres=gpu:8 RealMemory=1024000

# 提交8卡训练任务
sbatch --job-name=llm-train \
       --nodes=4 \
       --ntasks-per-node=1 \
       --gres=gpu:8 \
       --time=72:00:00 \
       train.sh

# 查看GPU使用情况
squeue -u $USER
sacct -j <jobid> --format=JobID,AllocNodes,AllocTRES,State

方案二:Kubernetes + GPU Operator——云原生场景首选:

# GPU节点打标签
kubectl label nodes gpu01 nvidia.com/gpu.product=A100-SXM4-80GB

# Pod申请GPU资源
apiVersion: v1
kind: Pod
metadata:
  name: llm-training
spec:
  containers:
  - name: trainer
    image: pytorch/pytorch:2.3-cuda12.4
    resources:
      limits:
        nvidia.com/gpu: 8
    volumeMounts:
    - name: shm
      mountPath: /dev/shm
  volumes:
  - name: shm
    emptyDir:
      medium: Memory
      sizeLimit: 64Gi

方案三:Slack与共享调度——多租户场景,空闲GPU自动回收给低优先级任务使用。

常见网络故障诊断

问题1:ibstat显示Port State为Initializing

原因通常是OpenSM未运行或子网分配失败。检查OpenSM状态:systemctl status opensmd,查看日志/var/log/opensm.log。

问题2:ibv_devinfo报couldn’t open device

驱动未正确加载。执行modprobe mlx5_core,确认lsmod | grep mlx5输出正常。

问题3:NCCL训练时出现rank超时

大概率是网络不通或IB端口速率不一致。排查步骤:

# 在所有节点执行,确认IB端口一致
ibstat | grep "Rate:"

# 测试节点间带宽
ib_write_bw -d mlx5_0 --size=4194304 -n 100 <server_ip>

# NCCL调试环境变量
export NCCL_DEBUG=INFO
export NCCL_IB_DISABLE=0     # 确保启用IB
export NCCL_IB_HCA=mlx5      # 指定HCA卡
export NCCL_SOCKET_IFNAME=ib0 # 指定IB接口

问题4:PFC拥塞导致性能下降

RoCEv2网络中常见,InfiniBand原生无损传输一般不会触发。如果混合部署RoCEv2和IB,检查PFC优先级映射:

# 查看PFC统计
mlx5ctl -d /dev/mst/mt4123_pciconf0 --pc

# 丢包统计
ethtool -S ib0 | grep -i drop

监控体系搭建

GPU集群需要三层监控:网络层、GPU层、任务层。

Prometheus + Grafana监控方案:

# node_exporter 采集IB网络指标
# dcgm-exporter 采集GPU指标
# slurm-exporter 采集任务调度指标

# Grafana关键看板
# 1. IB网络带宽利用率(per node)
# 2. GPU利用率/显存占用/温度/功耗
# 3. NCCL AllReduce延迟分位值
# 4. 任务排队数与GPU分配率
# 5. IB链路误码率(symbol_error, physical_error)

告警规则中重点关注:IB端口状态变为Down、GPU温度超过85度、NCCL AllReduce延迟P99超过阈值、GPU显存OOM。

GPU集群网络的稳定性直接决定训练任务的成败。每次网络拓扑变更后,务必用ib_write_bw和nccl-tests做全量性能回归测试,确保无静默降级。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/gpu-fu-wu-qi-ji-qun-infiniband-zu-wang-fang-an-yu-suan-li/

(0)
小编小编
上一篇 14小时前
下一篇 14小时前

相关推荐