Ascend如何测试集合通信(HCCL)的功能正确性以及性能?
INSTALL_DIR”是CANN软件安装后文件存储路径,其中“/usr/local/Ascend”为root用户的默认安装路径,如果使用普通用户安装,或指定路径安装,请自行替换。“INSTALL_DIR”是CANN软件安装后文件存储路径,其中“/usr/local/Ascend”为root用户的默认安装路径,如果使用普通用户安装,或指定路径安装,请自行替换。“/usr/local/mpich”以
1 适用场景
分布式训练场景下,开发者可以通过此工具测试HCCL(Huawei Collective Communication Library)集合通信的功能正确性以及性能。
此工具仅支持基于HCCL单算子API实现集合通信的网络性能测试。
2 MPI安装与配置
HCCL性能测试工具依赖MPI拉起多个进程,所以需要先安装MPI软件。
具体的安装步骤,可以参考:MPICH安装配置
3工具编译
安装完MPI软件后,需要进行HCCL性能测试工具的编译。
-
配置编译依赖环境变量。
-
安装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安装路径,请根据实际情况替换。
-
-
进入HCCL性能测试工具源码存放路径。
cd ${INSTALL_DIR}/tools/hccl_test -
编译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 操作步骤
-
配置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安装路径,请根据实际情况替换。
如果环境中已存在上述环境变量,无需再次配置。
-
-
配置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 <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>] -
mpirun后跟随的是MPI命令相关参数,MPI命令相关参数说明请参见MPICH命令参数与Open MPI命令参数。
-
./bin/<executable_file>后跟随的是HCCL Test工具相关参数,HCCL Test工具相关参数说明请参见HCCL Test工具相关参数。
5.2 具体参数说明
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。针对归约类算子,乘与加操作在不同的算子类型与数据类型下,结果校验所能支持的最大卡数如下表所示:
展开
操作类型 算子类型 数据类型 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
-
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐

所有评论(0)