基于多台开发机分布式训练
英博云致力于为用户提供高性能的 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_IFNAME
和 NCCL_IB_HCA
非常关键,必须指定到实际用于训练的高速网卡,否则 NCCL 可能走默认的低速网卡,性能会大幅下降。
多机启动要点
示例参考github代码:ebtech-ebcloud/examples
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.sh
和 run_node1.sh
注意修改这两个文件里面的
MASTER_ADDR
和MASTER_PORT