Ascend 如何测试集合通信(HCCL)的功能正确性以及性能?
1 适用场景
分布式训练场景下,开发者可以通过此工具测试 HCCL(Huawei Collective Communication Library)集合通信的功能正确性以及性能。此工具仅支持基于 HCCL 单算子 API 实现集合通信的网络性能测试。
2 MPI 安装与配置
HCCL 性能测试工具依赖 MPI 拉起多个进程,所以需要先安装 MPI 软件。具体的安装步骤,可以参考:MPICH安装配置
3工具编译
安装完 MPI 软件后,需要进行 HCCL 性能测试工具的编译。
配置编译依赖环境变量。
安装 MPICH 的场景:
安装 Open MPI 的场景:
“INSTALL_DIR”是 CANN 软件安装后文件存储路径,其中“/usr/local/Ascend”为 root 用户的默认安装路径,如果使用普通用户安装,或指定路径安装,请自行替换。
“/usr/local/mpich”以及“/usr/local/openmpi”为 MPI 安装路径,请根据实际情况替换。
进入 HCCL 性能测试工具源码存放路径。
编译 HCCL 性能测试工具。
安装 MPICH 的场景:
安装 Open MPI 的场景:
其中“MPI_HOME”为 MPI 安装路径,“ASCEND_DIR”为 CANN 软件安装后文件存储路径。
编译成功后,会在 ${INSTALL_DIR}/tools/hccl_test/bin 目录下生成集合通信性能测试工具的可执行文件,例如:
all_gather_test、all_reduce_test 等,每一个可执行文件对应一个集合通信算子。
4工具执行
4.1 操作步骤
配置 HCCL Test 工具启动依赖的环境变量。
安装 MPICH 的场景:
安装 Open MPI 的场景:
“INSTALL_DIR”是 CANN 软件安装后文件存储路径,其中“/usr/local/Ascend”为 root 用户的默认安装路径,如果使用普通用户安装,或指定路径安装,请自行替换。
“/usr/local/mpich”以及“/usr/local/openmpi”为 MPI 安装路径,请根据实际情况替换。
如果环境中已存在上述环境变量,无需再次配置。
配置 HCCL 集合通信相关环境变量。
在训练进程拉起节点配置初始化 root 通信网卡相关环境变量。
配置 HCCL 初始化时 Host 侧使用的网卡名及通信网卡使用的 IP 协议版本,HCCL 可通过配置的网卡名获取 Host IP,完成通信域创建**。**
4.2 操作步骤执行 HCCL Test 工具。
开发者需要在 hccl_test 目录下执行 HCCL Test 工具。
安装 MPICH 的场景,命令格式如下:
命令示例如下:
mpirun 后跟随的是 MPI 命令相关参数。
./bin/*<executable_file>*后跟随的是 HCCL Test 工具相关参数。
关于 MPICH 及集合通信测试命令相关参数的详细说明可参见参数说明。需要注意,本文中给出的 MPICH 参数仅为常用参数,关于 MPICH 参数的详细使用方法及使用过程中的问题解决方法可参见MPICH官方文档。
安装 Open MPI 的场景,命令格式如下:
命令示例如下:
mpirun 后跟随的是 MPI 命令相关参数。
./bin/*<executable_file>*后跟随的是 HCCL Test 工具相关参数。
关于 Open MPI 及集合通信测试命令相关参数的详细说明可参见参数说明。需要注意,本文中给出的 Open MPI 参数仅为常用参数,关于 Open MPI 参数的详细使用方法及使用过程中的问题解决方法可参见Open MPI官方文档。
5 参数说明
5.1 命令格式
安装 MPICH 的场景
安装 Open MPI 的场景
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。针对归约类算子,乘与加操作在不同的算子类型与数据类型下,结果校验所能支持的最大卡数如下表所示:
展开
评论