工具执行
前提条件
- 运行环境已关闭防火墙。
- 由于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工具启动依赖的环境变量。
- 安装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
如果环境中已存在上述环境变量,无需再次配置。
- 安装MPICH的场景:
- 配置HCCL集合通信相关环境变量。
- 在训练进程拉起节点配置初始化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,则需要使用模糊匹配网卡的方式进行环境变量配置。
- 调整socket建链超时等待时间。
集合通信场景中,设备间socket建链超时等待时间默认值为120s,当Master节点需要建链和处理的数据量较大时,默认值120秒无法满足建链需求,需要适当进行调整。
例如,若集群组网中卡数为3K,建议调整为240s;若集群组网中卡数为5K,建议调整为600s。
export HCCL_CONNECT_TIMEOUT=600
- 调整NPU之间共享缓冲区的大小。
两个NPU之间共享数据的缓存区大小默认为200M,可通过环境变量HCCL_BUFFSIZE进行调整,单位为M,取值需要大于等于1。
集合通信网络中,每一个HCCL通信域都会占用HCCL_BUFFSIZE大小的缓存区。若集群网络中存在较多的HCCL通信域,此缓存区占用量就会增多,可能存在影响模型数据正常存放的风险,此种场景下,可通过此环境变量减少通信域占用的缓存区大小;若业务的模型数据量较小,但通信数据量较大,则可通过此环境变量增大HCCL通信域占用的缓存区大小,提升数据通信效率。
使用hccl_test工具进行性能测试的场景下,往往通信数据量较大,此种场景下,可适当增大HCCL_BUFFSIZE的值,提升数据通信效率。针对集合通信算子,当测试数据量超过HCCL_BUFFSIZE的取值时,可能会出现性能下降的情况,建议HCCL_BUFFSIZE的取值大于测试数据量。
配置示例:
export HCCL_BUFFSIZE=2048
- 在训练进程拉起节点配置初始化root通信网卡相关环境变量。
- 配置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文件可不配置。
- 安装MPICH的场景,仅支持通信协议IPv4,内容格式如下:
- 执行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及集合通信测试命令相关参数的详细说明可参见参数说明。
- 安装MPICH的场景,命令格式如下: