基于多台开发机分布式训练

英博云致力于为用户提供高性能的 AI 训练环境,支持 单机多卡多机多卡 分布式训练,能够充分利用 H800/A800 GPU 及高速网络(InfiniBand / RoCE)资源,加速大规模模型的训练过程。平台底层通信框架基于 NCCL (NVIDIA Collective Communication Library),确保多机环境下的高效稳定通信。

多机多卡基本概念

单机多卡:同一台机器上多张 GPU(如 A800 × 8),通过 nccl 在本地高速互联(NVLink / PCIe)。

多机多卡:多台服务器的 GPU 参与训练,需要通过网络(InfiniBand / RoCE / TCP)通信。

分布式框架(如 PyTorch DDP、DeepSpeed、Accelerate)底层大多依赖 NCCL 作为通信后端。

NCCL 的作用

管理 GPU 之间的通信(all-reduce、broadcast、scatter-gather 等)。

充分利用高速互联(NVLink、InfiniBand、RDMA)。

自动拓扑优化,提高带宽利用率。

关键环境变量(示例配置)

在多机场景下,NCCL 行为常需要手动指定,例如:

export NCCL_IB_DISABLE=0             # 启用 InfiniBand
export NCCL_IB_HCA=mlx5_100,mlx5_101,mlx5_102,mlx5_103,mlx5_104,mlx5_105,mlx5_106,mlx5_107     # 指定 IB 设备
export NCCL_IB_GID_INDEX=3           # RoCEv2 常用 GID index
export NCCL_SOCKET_IFNAME=eth0       # 指定通信网卡
export NCCL_IB_TIMEOUT=22
export NCCL_IB_RETRY_CNT=7

# 限定端口范围,避免端口冲突
export NCCL_PORT_RANGE=40000-50000
export NCCL_IB_PORT_RANGE=40000-50000
export NCCL_P2P_PORT_RANGE=40000-50000

⚠️ 其中 NCCL_SOCKET_IFNAMENCCL_IB_HCA 非常关键,必须指定到实际用于训练的高速网卡,否则 NCCL 可能走默认的低速网卡,性能会大幅下降。

多机启动要点

示例参考github代码:ebtech-ebcloud/examplesopen in new window

git clone https://github.com/ebtech-ebcloud/examples.git   ## 下载代码
cd examples/nccl_test

主节点(rank=0):指定 MASTER_ADDR IP 地址和 MASTER_PORT端口号,其他节点会通过它初始化通信。

选用一台机器为主节点,查找本机 IP 地址的指令为 ifconfig , eth0:中 inet 后面的就是本机 IP。 端口号选一个空闲端口,示例使用的是12355端口。

WORLD_SIZE:集群内总进程数(机器数 × 每机 GPU 数)。本实例为两机测试,因此该值为 2 × 8 = 16。

RANK:当前进程的唯一编号(0,1,2,...)。

在两台机器上分别运行 run_node0.shrun_node1.sh

注意修改这两个文件里面的 MASTER_ADDRMASTER_PORT