You need to enable JavaScript to run this app.
文档中心
GPU云服务器

GPU云服务器

复制全文
下载 pdf
性能测试/调优
使用NCCL Softbond Plugin保障单网卡故障下训练流量恢复
复制全文
下载 pdf
使用NCCL Softbond Plugin保障单网卡故障下训练流量恢复
NCCL Softbond Plugin是用于RDMA网卡故障自动恢复流量的插件,本文介绍如何通过NCCL Softbond Plugin实现单网卡故障情况下训练任务流量自动恢复。​
背景信息​
在AI分布式训练中,有概率出现网口故障之类的硬件故障,导致训练中断。对于双网口的单网卡,可以采用bonding方式缓解,即便一个网口出现故障,流量也可以切换到另一个网口,训练能够正常继续运行,并且可以坚持到下一个checkpoint点后进行修复。然而对于单网口的情况,因为没有硬件支持的bond方案,所以无法自动切换流量,一旦网口故障的时间超过RDMA连接超时时间,就会造成连接断开,训练中断。因此,为了弥补单网口网卡没有冗余链路的弊端,我们提出在NCCL中实现SoftBonding的方案,在遇到网口故障等硬件故障时,通过软件来切换流量,确保即使遇到小故障,训练也不会中断。​
关键组件​
​
关键组件​
说明​
实例​
  • 实例规格:NCCL Softbond Plugin支持ecs.hpcpni3ln.45xlarge规格,规格详情请参见高性能计算GPU型hpcpni3ln,该实例正在邀测中,如需使用,请联系客户经理申请。 ​
  • GPU驱动:用来驱动NVIDIA GPU卡的程序。本文以535.161.08版本为例。​
  • CUDA工具包:使GPU能够解决复杂计算问题的计算平台。本文以CUDA 12.2为例。​
NCCL​
NCCL(Nvidia Collective Communication Library)是NVIDIA的集合通信库,支持安装在单个节点或多个节点的大量GPU卡上,实现多个GPU的快速通信。它提供了一系列高度优化的通信原语,如allreduce(全规约)、reduce-scatter(分散规约)、allgather(全收集)等,这些原语能够帮助并行计算任务在多个GPU间高效地同步和交换数据。​
注意​
使用NCCL Softbond Plugin必须确保NCCL版本不低于2.19,本文以NCCL 2.21.5为例。​
NCCL Softbond Plugin​
NCCL性能优化插件,实现单网卡网口故障情况下训练任务流量自动恢复。​
Git​
分布式版本控制系统。本文使用Git 2.25.1版本。​
OpenMPI​
OpenMPI是一个开源的 Message Passing Interface 实现,是一种高性能消息传递库,能够结合整个高性能计算社区的专业知识、技术和资源,建立现有的最佳MPI库。OpenMPI在系统和软件供应商、应用开发者和计算机科学研究人员中有广泛应用。​
NCCL Tests​
NCCL Tests是一个测试工具集,可以用来评估NCCL的运行性能和正确性。​
​
准备环境​
  • 已创建高性能GPU计算型实例,本文所示配置如下:​
  • 规格:ecs.hpcpni3ln.45xlarge​
  • 镜像:velinux 1.0​
  • GPU驱动版本:535.161.08​
  • ​​​
  • 执行nvcc -V 命令查看CUDA版本。若未安装,请安装CUDA。​
  • 执行python3 --version命令查看Python版本。若未安装,请安装Python。​
操作步骤​
步骤一:安装NCCL和NCCL Softbond Plugin​
  1. 下载并安装NCCL。​
  1. 执行以下命令,安装Git。​
  • ​
    apt update​
    apt -y install git​
    ​
  • 执行git --version命令,回显如下,表示安装成功。​
  • ​​​
  1. 执行以下命令,安装NCCL并进行编译。​
  • ​
    git clone -b v2.21.5-1 https://github.com/NVIDIA/nccl​
    cd nccl​
    make -j src.build​
    make install ​
    ​
  1. 根据业务所在地域,执行以下命令下载NCCL Softbond Plugin。​
  • 华北2(北京):​
  • ​
    https://iaas-debug-beijing.tos-cn-beijing.ivolces.com/tool/misc/libnccl-net-soft-bonding_2.1-nccl_amd64.deb​
    ​
  • 华东2(上海):​
  • ​
    https://iaas-debug-shanghai.tos-cn-shanghai.ivolces.com/tool/misc/libnccl-net-soft-bonding_2.1-nccl_amd64.deb​
    ​
  • 华南1(广州):​
  • ​
    https://iaas-debug-guangzhou.tos-cn-guangzhou.ivolces.com/tool/misc/libnccl-net-soft-bonding_2.1-nccl_amd64.deb​
    ​
  • 亚太东南(柔佛):​
  • ​
    https://iaas-debug-southeast-1.tos-ap-southeast-1.ivolces.com/tool/misc/libnccl-net-soft-bonding_2.1-nccl_amd64.deb​
    ​
  1. 依次执行以下命令,安装并确认。​
  • ​
    dpkg -i libnccl-net-soft-bonding_2.1-nccl_amd64.deb​
    dpkg -l |grep libnccl-net-soft-bonding​
    ​
步骤二:安装OpenMPI​
  1. 执行以下命令,安装OpenMPI。​
  • ​
    sudo apt update​
    sudo apt -y install openmpi-bin​
    ​
  1. 检查是否正常安装。​
  • ​
    mpiexec --version​
    ​
  • 回显如下,表示已正常安装。​
  • ​​​
步骤三:使用NCCL Softbond Plugin​
安装成功后,您可以直接使用NCCL Softbond Plugin的通信优化功能,无需再进行其他配置。以下示例通过NCCL_Tests展示NCCL Softbond Plugin在双机16卡实例中,采用allreduce通信算法进行加速的效果。​
  1. 在NVIDIA nccl-tests中下载nccl-tests软件包。​
  • ​
    sudo apt install git​
    git clone https://github.com/NVIDIA/nccl-tests.git​
    ​
  1. 执行以下命令,编译nccl-tests。​
  • ​
    cd nccl-tests​
    make ​
    ​
  1. 执行以下脚本加载优化算法。​
  • 不使用Softbond PLUGIN​
  • ​
    mpirun --allow-run-as-root -np 8 -x NCCL_DEBUG=INFO -x NCCL_P2P_LEVEL=SYS ./build/all_reduce_perf -b 8 -e 1G -f 2 -g 1​
    ​
  • 使用Softbond PLUGIN​
  • ​
    # 设置NCCL_IB_TIMEOUT和NCCL_IB_RETRY_CNT会影响Softbond故障切流的失效​
    # NET PLUGIN默认配置:NCCL_IB_TIMEOUT=18 NCCL_IB_RETRY_CNT=7​
    export NCCL_NET_PLUGIN=soft-bonding​
    export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH​
    mpirun --allow-run-as-root -np 8 -x NCCL_DEBUG=INFO -x NCCL_NET_PLUGIN -x NCCL_P2P_LEVEL=SYS -x LD_LIBRARY_PATH ./build/all_reduce_perf -b 8 -e 1G -f 2 -g 1​
    ​
  • 同时设置NCCL_DEBUG=INFO,在NCCL日志中打印出如下信息时,表明Softbond PLUGIN加载成功。​
  • ​​​
效果示例​
​
​
# out-of-place in-place​
# size count type redop root time algbw busbw #wrong time algbw busbw #wrong​
# (B) (elements) (us) (GB/s) (GB/s) (us) (GB/s) (GB/s)​
536870912 134217728 float sum -1 5634.4 95.28 178.66 0 5629.2 95.37 178.82 0​
1073741824 268435456 float sum -1 10914 98.38 184.46 0 10907 98.44 184.58 0​
​
# 故障发生​
iv-ydh7r9vegwcva4fcdp8k:4783:4873 [0] src/plugin.cc:181 NCCL WARN NET/IB : mlx5_1 get async event : port error​
​
iv-ydh7cejev4cva4f5wdv0:4433:4566 [0] src/plugin.cc:2636 NCCL WARN NET/IB: ### ncclIbTestRecv[0x7f0dbc115000]: poll_cq error on mlx5_1 (primary)! retrying...​
iv-ydh7cejev4cva4f5wdv0:4433:4566 [0] NCCL INFO ncclIbIrecvQpErrAll[0x7f0dbc115000]: transitioning all QP to ERR​
iv-ydh7cejev4cva4f5wdv0:4433:4566 [0] NCCL INFO ### ncclIbIrecvQpErrAll[0x7f0dbc115000] set GPU flush QP 17046 to ERR​
iv-ydh7cejev4cva4f5wdv0:4433:4566 [0] NCCL INFO ### ncclIbRetryIrecv[0x7f0dbc115000]: switching to mlx5_2 (backup) from mlx5_1!​
iv-ydh7r9vegwcva4fcdp8k:4783:4913 [0] NCCL INFO ncclIbTestSend[0x7f02780da000] complete link backup latency 7520283548 ns​
# 切流完成​
4294967296 1073741824 float sum -1 85685 50.13 93.98 0 85389 50.30 94.31 0​
8589934592 2147483648 float sum -1 171258 50.16 94.05 0 170520 50.37 94.45 0​
​
# 故障修复​
iv-ydh7r9vegwcva4fcdp8k:4787:4837 [0] src/plugin.cc:181 NCCL WARN NET/IB : mlx5_1 get async event : port active​
​
iv-ydh7r9vegwcva4fcdp8k:4783:4913 [0] NCCL INFO ### ncclIbIsend[0x7f02780da000]: switching back to primary dev mlx5_1, resetting QP states​
iv-ydh7cejev4cva4f5wdv0:4433:4566 [0] NCCL INFO ### ncclIbIrecv[0x7f0dbc115000]: resetting GPU QP states.​
iv-ydh7r9vegwcva4fcdp8k:4783:4913 [0] NCCL INFO ncclIbIsend[0x7f02780da000]: state transition from B/U/U to P/U/U after send​
iv-ydh7cejev4cva4f5wdv0:4433:4566 [0] NCCL INFO ncclIbIrecv[0x7f0dbc115000]: state transition from B/U/U to P/U/U after postfifo​
iv-ydh7r9vegwcva4fcdp8k:4783:4913 [0] NCCL INFO ncclIbTestSend[0x7f02780da000] recovery complete latency 8505401 ns​
# 流量恢复​
327900 52.39 98.24 0 169356 101.44 190.20 0​
# Out of bounds values : 0 OK​
# Avg bus bandwidth : 109.709​
​
最近更新时间:2025.07.08 17:09:41
这个页面对您有帮助吗?
有用
有用
无用
无用