---
title: 工具执行
description: "- 运行环境已关闭防火墙。"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/devaids/hccltool/HCCLpertest_16_0004.html
sourcePath: /source/zh/canncommercial/900/devaids/hccltool/HCCLpertest_16_0004.html
indexId: 6ae1b46e40a80a003ca157071da4432870e2aeda15f05835005e879a9528154971
---
# 工具执行

#### 前提条件

- 运行环境已关闭防火墙。
- 由于Master节点允许处理的并发建链数受Linux内核参数“somaxconn”与“tcp_max_syn_backlog”的限制，所以，针对大规模集群组网，若“somaxconn”与“tcp_max_syn_backlog”取值较小会导致部分客户端概率性提前异常退出，进而集群初始化失败。
  大规模集群组网场景下，建议开发者根据集群数量在Master节点适当调整“somaxconn”与“tcp_max_syn_backlog”参数的值，例如：

```
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_max_syn_backlog=65535
```


- 执行HCCL Test前，建议临时将当前Shell环境的文件描述符上限设置为65535，以防止资源耗尽导致工具运行失败。

```
ulimit -n 65535
```


#### 操作步骤

1. 针对Atlas 350 加速卡，先检查rootinfo文件是否存在。
  执行HCCL Test工具前，请检查“/etc/hccl_rootInfo.json”文件是否存在，此文件记录了NPU间通信的EID（Entity ID，通信中发起或接收对象的标识）信息，环境部署完成后自动生成。若无此文件，请单击Link(https://www.hiascend.com/support)联系技术支持。

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

  - 安装MPICH的场景：
    1 2 3 export INSTALL_DIR=/usr/local/Ascend/cann export PATH=/usr/local/mpich/bin:$PATH export LD_LIBRARY_PATH=/usr/local/mpich/lib:${INSTALL_DIR}/lib64:$LD_LIBRARY_PATH

  - 安装Open MPI的场景：
    1 2 3 export INSTALL_DIR=/usr/local/Ascend/cann 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安装路径，请根据实际情况替换。
如果环境中已存在上述环境变量，无需再次配置。
3. 配置HCCL集合通信相关环境变量。

  a. 在训练进程拉起节点配置通信域初始化时使用的通信网卡相关信息。
    配置HCCL初始化时Host侧使用的网卡名及通信网卡使用的IP协议版本，HCCL可通过配置的网卡名获取Host IP，完成通信域创建。 1 2 3 4 5 6 7 8 9 10 11 # 配置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为前缀的网卡

    注意：如果参与集合通信的不同节点的网卡名字不同，例如node1的网卡名为eth1，node2的网卡名为eth2，若后续环境变量会从当前节点同步到其他节点，建议使用模糊匹配网卡的方式进行环境变量配置。

  b. 调整socket建链超时等待时间。
    集合通信场景中，设备间socket建链超时等待时间默认值为120s，当Master节点需要建链和处理的数据量较大时，默认值120秒无法满足建链需求，需要适当进行调整。

    例如，若集群组网中卡数为3K，建议调整为240s；若集群组网中卡数为5K，建议调整为600s。

```
export HCCL_CONNECT_TIMEOUT=600
```


  c. 调整NPU之间共享缓冲区的大小。
    集合通信中，每个通信域都默认占用200MB的缓存区，此缓存区大小可通过环境变量HCCL_BUFFSIZE进行调整，单位为MB。

    若集群中存在较多的通信域，整体缓存占用会增加，可能影响模型数据的正常存储。此种场景下，可通过调小该环境变量的值以降低通信域占用的缓存空间；若业务的模型数据量较小，但通信数据量较大，可适当调大该环境变量的值以增大通信域占用的缓存空间，以提升数据通信效率。

    使用hccl_test工具进行性能测试的场景下，通信数据量通常较大，此种场景下，可适当增大HCCL_BUFFSIZE的值，提升数据通信效率。针对集合通信算子，当测试数据量超过HCCL_BUFFSIZE的取值时，可能会出现性能下降的情况，建议HCCL_BUFFSIZE的取值大于测试数据量。

    配置示例：

```
export HCCL_BUFFSIZE=2048
```


    更多环境变量可参见《环境变量参考(https://www.hiascend.com/document/detail/zh/canncommercial/900/maintenref/envvar/envref_07_0001.html)》中的集合通信(https://www.hiascend.comdocument/detail/zh/canncommercial/900/maintenref/envvar/envref_07_0072.html)。

  d. （可选）配置HCCL Test工具辅助环境变量。

    - 指定Device执行HCCL Test。

```
# HCCL_TEST_USE_DEVS后的数字为需要执行HCCL Test的Device Id，多个Device之间使用“,”分隔
export HCCL_TEST_USE_DEVS="4,5,6,7"
```


    - 执行HCCL Test时采集性能数据。

```
# “1”代表开启profiling，“0”代表关闭profiling，默认值为“0”，开启时，执行HCCL Test时采集性能数据
export HCCL_TEST_PROFILING=1
# 指定profiling数据存放路径，默认为“/var/log/npu/profiling”
export HCCL_TEST_PROFILING_PATH=/home/profiling
```


      若开启HCCL_TEST_PROFILING，HCCL Test工具执行完成后会在HCCL_TEST_PROFILING_PATH指定目录下生成profiling数据，性能数据的解析可参见《性能调优工具(https://www.hiascend.com/document/detail/zh/canncommercial/900/devaids/Profiling/atlasprofiling_16_0144.html)》的“使用msprof命令解析、查询与导出性能数据(https://www.hiascend.comdocument/detail/zh/canncommercial/900/devaids/Profiling/atlasprofiling_16_0018.html)”章节。

      开启Profiling后，会对集合通信算子性能产生影响。

4. 配置Hostfile文件。
Hostfile文件用于指定需要在哪些节点上启动通信进程，Hostfile文件是文本文件，需要用户自定义。
“${INSTALL_DIR}/tools/hccl_test/”路径下已存在默认Hostfile模版文件，命名为“hostfile”，您可以直接基于该模版进行编辑，也可以自定义文件存储路径与名称。

  - 安装MPICH的场景，仅支持通信协议IPv4，内容格式如下：

```
节点ip:每节点的进程数
```


    例如，定义Hostfile文件的名称为“hostfile”，内容如下：

```
10.10.130.22:8
10.10.130.21:8
```


  - 安装Open MPI的场景，既支持通信协议IPv4，又支持通信协议IPv6，内容格式如下：

```
节点名 slots=每节点的进程数
```


    例如，定义Hostfile文件的名称为“hostfile”，内容如下：

```
node3 slots=8
node4 slots=8
```


- 针对Atlas A3 训练系列产品 / Atlas A3 推理系列产品，Hostfile文件中，请将属于同一超节点的AI Server信息配置在一起。假设有两个超节点，标识分别为“0”和“1”，请在Hostfile中先配置“0”中的AI Server信息，再配置“1”中的AI Server信息，不支持“0”中的AI Server信息与“1”中的AI Server信息交叉配置。
- 针对单机场景，Hostfile文件可不配置。


5. 执行HCCL Test工具。
开发者需要在“${INSTALL_DIR}/tools/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 <iters_count>] [-w <warmup_iters_count>] [-c <0/1>]
```

命令示例如下：

```
mpirun -f
hostfile
-n
./bin/all_reduce_test -p
-b
8K
-e
64M
-f
2
-d
fp32
-o
sum
```


    - mpirun后跟随的是MPI命令相关参数。
    - ./bin/<executable_file>后跟随的是HCCL Test工具相关参数。
关于MPICH及集合通信测试命令相关参数的详细说明可参见参数说明。需要注意，本文中给出的MPICH参数仅为常用参数，关于MPICH参数的详细使用方法及使用过程中的问题解决方法可参见MPICH官方文档(https://www.mpich.org/)。
安装MPICH的场景下，执行mpirun命令时，会默认将当前节点的环境变量同步到其他节点，若各节点的环境变量存在差异，建议将环境变量设置命令写入执行脚本，并将执行脚本传入mpirun命令，例如：

a. 创建执行脚本run.sh，写入需要设置的环境变量，内容示例如下：

```
export HCCL_TEST_USE_DEVS="4,5,6,7"
$1
```


b. 执行mpirun命令，示例如下：

```
mpirun -n 4 ./run.sh "./all_reduce_test -b 8K -e 64M -f 2 -p 4"
```


  - 安装Open MPI的场景，命令格式如下：

```
mpirun [--prefix <mpi_install_path>] [-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 <iters_count>] [-w <warmup_iters_count>] [-c <0/1>]
```

命令示例如下：

```
mpirun --prefix
/usr/local/openmpi
-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
./bin/all_reduce_test -p
-b
8K
-e
64M
-i
0
-o
sum
-d
fp32
-w
-n
```


    - mpirun后跟随的是MPI命令相关参数。
    - ./bin/<executable_file>后跟随的是HCCL Test工具相关参数。
关于Open MPI及集合通信测试命令相关参数的详细说明可参见参数说明。需要注意，本文中给出的Open MPI参数仅为常用参数，关于Open MPI参数的详细使用方法及使用过程中的问题解决方法可参见Open MPI官方文档(https://www.open-mpi.org/)。
HCCL Test依赖MPI交换通信域创建必要信息，在MPI执行过程中，可能存在部分进程异常退出，导致其他进程无法退出的问题，请自行清理残留进程。
