下载
中文
注册

工具执行

前提条件

  • 运行环境已关闭防火墙。
  • 由于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

操作步骤

  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

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

  2. 配置HCCL集合通信相关环境变量。
    1. 在训练进程拉起节点配置初始化root通信网卡相关环境变量。
      配置HCCL的初始化root通信网卡使用的IP协议版本以及网卡名,HCCL可通过配置的网卡名获取Host IP,完成通信域创建
      # 配置HCCL的初始化root通信网卡使用的IP协议版本,AF_INET:IPv4;AF_INET6:IPv6
      export HCCL_SOCKET_FAMILY=AF_INET
      
      # 支持以下格式的网卡名配置(4种规格自行选择1种即可,环境变量中可配置多个网卡,多个网卡间使用英文逗号分隔,取最先匹配到的网卡作为root网卡)
      
      # 精确匹配网卡
      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为前缀的网卡

      需要注意:

      MPI工具执行时,会将环境变量同步到所有节点,如果参与集合通信的不同节点的网卡名字不同,例如node1的网卡名为eth1,node2的网卡名为eth2,则需要使用模糊匹配网卡的方式进行环境变量配置。

    2. 调整socket建链超时等待时间。

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

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

      export HCCL_CONNECT_TIMEOUT=600
    3. 调整NPU之间共享缓冲区的大小。

      两个NPU之间共享数据的缓存区大小默认为200M,可通过环境变量HCCL_BUFFSIZE进行调整,单位为M,取值需要大于等于1。

      集合通信网络中,每一个HCCL通信域都会占用HCCL_BUFFSIZE大小的缓存区。若集群网络中存在较多的HCCL通信域,此缓存区占用量就会增多,可能存在影响模型数据正常存放的风险,此种场景下,可通过此环境变量减少通信域占用的缓存区大小;若业务的模型数据量较小,但通信数据量较大,则可通过此环境变量增大HCCL通信域占用的缓存区大小,提升数据通信效率。

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

      配置示例:

      export HCCL_BUFFSIZE=2048

      更多环境变量可参见环境变量参考中的集合通信

  3. 配置Hostfile文件。

    Hostfile文件用于指定需要在哪些节点上启动通信进程,Hostfile文件是文本文件,需要用户自定义。

    • 安装MPICH的场景,仅支持通信协议IPv4,内容格式如下:
      节点ip:每节点的进程数

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

      10.78.130.22:8
      10.78.130.21:8
    • 安装Open MPI的场景,既支持通信协议IPv4,又支持通信协议IPv6,内容格式如下:
      节点名 slots=每节点的进程数

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

      node3 slots=8
      node4 slots=8
    • 针对单机场景,Hostfile文件可不配置。
  4. 执行HCCL Test工具。

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

    • 安装MPICH的场景,命令格式如下:
      mpirun [-f hostfile] [-n number] ./bin/<executable_file> [-p npus] [-b minbytes] [-e maxbytes] [-f stepfactor] [-o operator] [-r root] [-d datatype] [-n iters] [-w warmup_iters] [-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后跟随的是MPICH命令相关参数。
      • ./bin/<executable_file>后跟随的是HCCL Test工具相关参数。

      关于MPICH及集合通信测试命令相关参数的详细说明可参见参数说明

    • 安装Open MPI的场景,命令格式如下:
      mpirun [-hostfile hostfile] [-n number] [-x environment_variable_name] [--allow-run-as-root] [--mca key value] ./bin/<executable_file> [-p npus] [-b minbytes] [-e maxbytes] [-f stepfactor] [-o operator] [-r root] [-d datatype] [-n iters] [-w warmup_iters] [-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后跟随的是Open MPI命令相关参数。
      • ./bin/<executable_file>后跟随的是HCCL Test工具相关参数。

      关于Open MPI及集合通信测试命令相关参数的详细说明可参见参数说明