Ascend如何测试集合通信(HCCL)的功能正确性以及性能?

1 适用场景

分布式训练场景下,开发者可以通过此工具测试HCCL(Huawei Collective Communication Library)集合通信的功能正确性以及性能。
此工具仅支持基于HCCL单算子API实现集合通信的网络性能测试。

2 MPI安装与配置

HCCL性能测试工具依赖MPI拉起多个进程,所以需要先安装MPI软件。
具体的安装步骤,可以参考:MPICH安装配置

3工具编译

安装完MPI软件后,需要进行HCCL性能测试工具的编译。

  1. 配置编译依赖环境变量。

    • 安装MPICH的场景:

      export INSTALL_DIR=/usr/local/Ascend/ascend-toolkit/latest
      export PATH=/usr/local/mpich/bin:$PATH
      export LD_LIBRARY_PATH=/usr/local/mpich/lib:${INSTALL_DIR}/lib64:$LD_LIBRARY_PATH
      
    • 安装Open MPI的场景:

      export INSTALL_DIR=/usr/local/Ascend/ascend-toolkit/latest
      export PATH=/usr/local/openmpi/bin:$PATH
      export LD_LIBRARY_PATH=/usr/local/openmpi/lib:${INSTALL_DIR}/lib64:$LD_LIBRARY_PATH
      

    “INSTALL_DIR”是CANN软件安装后文件存储路径,其中“/usr/local/Ascend”为root用户的默认安装路径,如果使用普通用户安装,或指定路径安装,请自行替换。

    “/usr/local/mpich”以及“/usr/local/openmpi”为MPI安装路径,请根据实际情况替换。

  2. 进入HCCL性能测试工具源码存放路径。

    cd ${INSTALL_DIR}/tools/hccl_test
    
  3. 编译HCCL性能测试工具。

    • 安装MPICH的场景:

      make MPI_HOME=/usr/local/mpich ASCEND_DIR=${INSTALL_DIR}
      
    • 安装Open MPI的场景:

      make MPI_HOME=/usr/local/openmpi ASCEND_DIR=${INSTALL_DIR}
      

    其中“MPI_HOME”为MPI安装路径,“ASCEND_DIR”为CANN软件安装后文件存储路径。

    编译成功后,会在${INSTALL_DIR}/tools/hccl_test/bin目录下生成集合通信性能测试工具的可执行文件,例如:

    all_gather_test、all_reduce_test等,每一个可执行文件对应一个集合通信算子。

4工具执行

4.1 操作步骤

  1. 配置HCCL Test工具启动依赖的环境变量。

    • 安装MPICH的场景:

      export INSTALL_DIR=/usr/local/Ascend/ascend-toolkit/latest
      export PATH=/usr/local/mpich/bin:$PATH
      export LD_LIBRARY_PATH=/usr/local/mpich/lib:${INSTALL_DIR}/lib64:$LD_LIBRARY_PATH
      
    • 安装Open MPI的场景:

      export INSTALL_DIR=/usr/local/Ascend/ascend-toolkit/latest
      export PATH=/usr/local/openmpi/bin:$PATH
      export LD_LIBRARY_PATH=/usr/local/openmpi/lib:${INSTALL_DIR}/lib64:$LD_LIBRARY_PATH
      

    “INSTALL_DIR”是CANN软件安装后文件存储路径,其中“/usr/local/Ascend”为root用户的默认安装路径,如果使用普通用户安装,或指定路径安装,请自行替换。

    “/usr/local/mpich”以及“/usr/local/openmpi”为MPI安装路径,请根据实际情况替换。

    如果环境中已存在上述环境变量,无需再次配置。

  2. 配置HCCL集合通信相关环境变量。

    在训练进程拉起节点配置初始化root通信网卡相关环境变量。

    配置HCCL初始化时Host侧使用的网卡名及通信网卡使用的IP协议版本,HCCL可通过配置的网卡名获取Host IP,完成通信域创建**。**

    # 配置HCCL初始化时通信网卡使用的IP协议版本,AF_INET:IPv4;AF_INET6:IPv6
    export HCCL_SOCKET_FAMILY=AF_INET
    
    # 支持以下格式的网卡名配置(4种规格自行选择1种即可,环境变量中可配置多个网卡,多个网卡间使用英文逗号分隔,取最先匹配到的网卡作为通信网卡)
    # 精确匹配网卡
    export HCCL_SOCKET_IFNAME==eth0,enp0   # 使用指定的eth0或enp0网卡
    export HCCL_SOCKET_IFNAME=^=eth0,enp0     # 不使用eth0与enp0网卡
    
    # 模糊匹配网卡
    export HCCL_SOCKET_IFNAME=eth,enp       # 使用所有以eth或enp为前缀的网卡
    export HCCL_SOCKET_IFNAME=^eth,enp      # 不使用任何以eth或enp为前缀的网卡
    

4.2 操作步骤执行HCCL Test工具。

开发者需要在hccl_test目录下执行HCCL Test工具。

  • 安装MPICH的场景,命令格式如下:

    mpirun [-f ] -n  ./bin/ [-p ] [-b ] [-e ] [-f ] [-o ] [-r ] [-d ] [-z <0/1>] [-n ] [-w ] [-c <0/1>]
    

    命令示例如下:

    mpirun -f hostfile -n 16 ./bin/all_reduce_test -p 8 -b 8K -e 64M -f 2 -d fp32 -o sum
    
    • mpirun后跟随的是MPI命令相关参数。
    • ./bin/**后跟随的是HCCL Test工具相关参数。

关于MPICH及集合通信测试命令相关参数的详细说明可参见参数说明。需要注意,本文中给出的MPICH参数仅为常用参数,关于MPICH参数的详细使用方法及使用过程中的问题解决方法可参见MPICH官方文档。

  • 安装Open MPI的场景,命令格式如下:

    mpirun [-hostfile ] -n  -x  [--allow-run-as-root] [--mca ] ./bin/ [-p ] [-b ] [-e ] [-f ] [-o ] [-r ] [-d ] [-z <0/1>] [-n ] [-w ] [-c <0/1>]
    

    命令示例如下:

    mpirun -hostfile hostfile -x LD_LIBRARY_PATH -x HCCL_SOCKET_FAMILY -x HCCL_SOCKET_IFNAME -x HCCL_CONNECT_TIMEOUT -x HCCL_BUFFSIZE --allow-run-as-root --mca btl_tcp_if_include eth0 --mca opal_set_max_sys_limits 1 -n 16 ./bin/all_reduce_test -p 16 -b 8K -e 64M -i 0 -o sum -d fp32 -w 3 -n 3
    
    • mpirun后跟随的是MPI命令相关参数。
    • ./bin/**后跟随的是HCCL Test工具相关参数。

    关于Open MPI及集合通信测试命令相关参数的详细说明可参见参数说明。需要注意,本文中给出的Open MPI参数仅为常用参数,关于Open MPI参数的详细使用方法及使用过程中的问题解决方法可参见Open MPI官方文档。

5 参数说明

5.1 命令格式

安装MPICH的场景

mpirun [-f ] -n  ./bin/ [-p ] [-b ] [-e ] [-f ] [-o ] [-r ] [-d ] [-z <0/1>] [-n ] [-w ] [-c <0/1>]
  • 安装Open MPI的场景

    mpirun [-hostfile ] -n  -x  [--allow-run-as-root] [--mca ] ./bin/ [-p ] [-b ] [-e ] [-f ] [-o ] [-r ] [-d ] [-z <0/1>] [-n ] [-w ] [-c <0/1>]
    
  • mpirun后跟随的是MPI命令相关参数,MPI命令相关参数说明请参见MPICH命令参数与Open MPI命令参数。

  • ./bin/后跟随的是HCCL Test工具相关参数,HCCL Test工具相关参数说明请参见HCCL Test工具相关参数。

5.2 具体参数说明

https://www.hiascend.com/document/detail/zh/canncommercial/81RC1/devaids/devtools/hccltool/HCCLpertest_16_0005.html

6 结果说明

HCCL Test工具执行完成后,回显如下所示:

图1 HCCL Test工具执行结果示例
Ascend如何测试集合通信(HCCL)的功能正确性以及性能?_第1张图片

各字段含义如下:

  • data_size:单个NPU上参与集合通信的数据量,单位为Bytes。

  • aveg_time:集合通信算子执行耗时,单位为us。

  • alg_bandwidth:集合通信算子执行带宽,单位为GB/s。

    说明:此处的集合通信算子执行带宽指的是算法带宽,计算方式为:“集合通信数据量/耗时”。

  • check_result:集合通信算子执行结果校验标识,取值为:success、failed、NULL。

    • 若执行工具时“-c”参数配置为“0”,即未开启结果校验,check_result状态为NULL。

    • 当算子计算结果出现溢出或超出可精确表达的数值范围时,不会开启结果校验,check_result状态为NULL。

      HCCL Test工具通过将算子输入初始化为固定值,并检验算子输出是否符合预期来判断通信结果是否正确。由于计算机数值表达范围和表达精度有限,针对归约类算子的乘法与加法操作,如果卡数过多,可能会出现结果溢出或超出可精确表达的数值范围的情况,导致无法准确校验,此种情况check_result状态会显示为NULL。针对归约类算子,乘与加操作在不同的算子类型与数据类型下,结果校验所能支持的最大卡数如下表所示:

      展开

      操作类型 算子类型 数据类型
      INT8 INT16 INT32 INT64 FP32 FP16 BF16
      乘(prod) AllReduce 6 14 30 62 127 15 127
      Reduce
      ReduceScatter
      加(sum) AllReduce 63 16383 ~1e9 ~1e18 ~1e6 511 63
      Reduce
      ReduceScatter 11 181 46340 ~1e9 2896 31 11

你可能感兴趣的:(ascend,hccltest,hccl,带框测试)