写点什么

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

作者:zjun
  • 2025-06-25
    上海
  • 本文字数:3307 字

    阅读完需:约 11 分钟

1 适用场景

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

2 MPI 安装与配置

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

3工具编译

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


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

  2. 安装 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 安装路径,请根据实际情况替换。


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


   cd ${INSTALL_DIR}/tools/hccl_test
复制代码


  1. 编译 HCCL 性能测试工具。

  2. 安装 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 工具启动依赖的环境变量。

  2. 安装 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 安装路径,请根据实际情况替换。


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


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

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

  3. 配置 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 <hostfile>] -n <number> ./bin/<executable_file> [-p <npus>] [-b <minbytes>] [-e <maxbytes>] [-f <incfactor>] [-o <operator>] [-r <root>] [-d <datatype>] [-z <0/1>] [-n <iterscount>] [-w <warmup_iterscount>] [-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/*<executable_file>*后跟随的是 HCCL Test 工具相关参数。


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


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


  mpirun [-hostfile <hostfile>] -n <number> -x <env> [--allow-run-as-root] [--mca <key value>] ./bin/<executable_file> [-p <npus>] [-b <minbytes>] [-e <maxbytes>] [-f <incfactor>] [-o <operator>] [-r <root>] [-d <datatype>] [-z <0/1>] [-n <iterscount>] [-w <warmup_iterscount>] [-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/*<executable_file>*后跟随的是 HCCL Test 工具相关参数。


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

5 参数说明

5.1 命令格式

安装 MPICH 的场景


  mpirun [-f <hostfile>] -n <number> ./bin/<executable_file> [-p <npus>] [-b <minbytes>] [-e <maxbytes>] [-f <incfactor>] [-o <operator>] [-r <root>] [-d <datatype>] [-z <0/1>] [-n <iterscount>] [-w <warmup_iterscount>] [-c <0/1>]
复制代码


  • 安装 Open MPI 的场景


  mpirun [-hostfile <hostfile>] -n <number> -x <env> [--allow-run-as-root] [--mca <key value>] ./bin/<executable_file> [-p <npus>] [-b <minbytes>] [-e <maxbytes>] [-f <incfactor>] [-o <operator>] [-r <root>] [-d <datatype>] [-z <0/1>] [-n <iterscount>] [-w <warmup_iterscount>] [-c <0/1>]
复制代码


5.2 具体参数说明

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

6 结果说明

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


图 1 HCCL Test 工具执行结果示例



各字段含义如下:


  • 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。针对归约类算子,乘与加操作在不同的算子类型与数据类型下,结果校验所能支持的最大卡数如下表所示:

  • 展开


用户头像

zjun

关注

还未添加个人签名 2020-03-06 加入

还未添加个人简介

评论

发布
暂无评论
Ascend如何测试集合通信(HCCL)的功能正确性以及性能?_昇腾_zjun_InfoQ写作社区