export INSTALL_DIR=/usr/local/Ascend/ascend-toolkit/latest export PATH=/usr/local/mpich-3.2.1/bin:$PATH export LD_LIBRARY_PATH=/usr/local/mpich-3.2.1/lib:${INSTALL_DIR}/lib64:$LD_LIBRARY_PATH
大规模集群组网场景下,建议开发者根据集群数量在master节点适当调整“somaxconn”与“tcp_max_syn_backlog”参数的值,例如:
sysctl -w net.core.somaxconn=65535 sysctl -w net.ipv4.tcp_max_syn_backlog=65535
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命令参数 |
||
-f |
可选 |
Hostfile节点列表文件。 单机场景下无需配置此文件;多机场景下,需要配置此文件。 文件示例如下:
|
-n |
必选 |
需要启动的NPU总数。 |
./bin/<executable_file> |
必选 |
集合通信性能测试工具的执行命令。 其中<executable_file>为集合通信性能测试工具的可执行文件。当前可指定文件有:all_gather_test,all_reduce_test,alltoallv_test,alltoall_test,broadcast_test,reduce_scatter_test,reduce_test,scatter_test。 例如./bin/all_gather_test。 |
集合通信性能测试命令支持的参数 |
||
-p |
必选 |
单个计算节点上参与训练的NPU个数。 默认为当前节点的NPU总数。 说明:集合通信测试工具会按照用户配置的参与训练的NPU个数拉起相应的Device,Device的约束可参见规格约束 |
-b |
可选 |
定义执行集合通信操作所使用的测试数据大小。
说明:
例如: 假设配置示例为:-b 100M -e 400M -f 2 即测试数据大小起始值为100M,结束值为400M,数据增量乘法因子为2,则每次迭代都会分别取大小为“100M”、“200M”、“400M”的数据进行测试。 |
-e |
可选 |
|
-i |
可选 |
|
-f |
可选 |
|
HCCL操作参数 |
||
-o |
可选 |
Reduce相关执行命令的操作类型,包含:sum、prod、max、min,默认值为sum。 Reduce相关的执行命令有:all_reduce_test、reduce_scatter_test、reduce_test。 |
-r |
可选 |
执行命令为broadcast_test、reduce_test、scatter_test时,需要通过此参数指定根节点的Device ID。 取值范围:[0,实际Device数量-1]。 默认值为:0。 |
-d |
可选 |
HCCL执行命令支持的数据类型,默认值为fp32。
|
性能测试参数 |
||
-n |
可选 |
迭代次数,默认值为20。 |
-w |
可选 |
预热迭代次数,此参数不参与性能统计,仅影响HCCL Test工具的执行耗时,默认值:5。 说明:由于前几轮迭代可能存在影响性能测试的操作(例如,首轮迭代的socket建链操作等),建议将前几轮迭代设置为预热迭代,不进入性能统计。 |
结果校验参数 |
||
-c |
可选 |
是否开启集合通信操作结果正确性校验。
默认值:1。 说明:大规模集群场景下,开启结果校验会使HCCL Test工具的执行耗时增加。 |
以1个计算节点,8个NPU设备,测试AllReduce算子的性能为例:
export HCCL_SOCKET_FAMILY=AF_INET
取值为“AF_INET”,代表使用IPv4协议;取值为“AF_INET6”,代表使用IPv6协议。
集合通信场景中,设备间socket建链超时等待时间默认值为120s,当Master节点需要建链和处理的数据量较大时,默认值120秒无法满足建链需求,需要适当进行调整。
例如,若集群组网中卡数为3K,建议调整为240s;若集群组网中卡数为5K,建议调整为600s。
export HCCL_CONNECT_TIMEOUT=600
两个NPU之间共享数据的缓存区大小默认为200M,可通过环境变量HCCL_BUFFSIZE进行调整,单位为M,取值需要大于等于1,默认值是200M。
集合通信网络中,每一个HCCL通信域都会占用HCCL_BUFFSIZE大小的缓存区。若集群网络中存在较多的HCCL通信域,此缓存区占用量就会增多,可能存在影响模型数据正常存放的风险,此种场景下,可通过此环境变量减少通信域占用的缓存区大小;若业务的模型数据量较小,但通信数据量较大,则可通过此环境变量增大HCCL通信域占用的缓存区大小,提升数据通信效率。
使用hccl_test工具进行性能测试的场景下,往往通信数据量较大,此种场景下,可适当增大HCCL_BUFFSIZE的值,提升数据通信效率。
配置示例:
export HCCL_BUFFSIZE=2048
针对集合通信算子,当测试数据量超过HCCL_BUFFSIZE的取值时,可能会出现性能下降的情况,建议HCCL_BUFFSIZE的取值大于测试数据量。
cd hccl_test mpirun -n 8 ./bin/all_reduce_test -b 8K -e 64M -f 2 -d fp32 -o sum -p 8
命令含义:执行allreduce算子,数据量(-b)从8KB到64MB,增量系数(-f)为2倍,参与训练的NPU个数(-p)为8,每个NPU上会拉起1个进程。
配置HCCL的初始化root通信网卡使用的IP协议版本,AF_INET:IPv4;AF_INET6:IPv6 export HCCL_SOCKET_FAMILY=AF_INET #IPv4 # 支持以下格式的网卡名配置(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,则需要使用模糊匹配网卡的方式进行环境变量配置。
示例二:配置格式“节点名:每节点进程数”,该配置方式支持使用IPv4协议或者IPv6协议进行通信的场景。
# 训练节点名:每节点的进程数 node3:8 node4:8
集合通信场景中,设备间socket建链超时等待时间默认值为120s,当Master节点需要建链和处理的数据量较大时,默认值120秒无法满足建链需求,需要适当进行调整。
例如,若集群组网中卡数为3K,建议调整为240s;若集群组网中卡数为5K,建议调整为600s。
export HCCL_CONNECT_TIMEOUT=600
两个NPU之间共享数据的缓存区大小默认为200M,可通过环境变量HCCL_BUFFSIZE进行调整,单位为M,取值需要大于等于1,默认值是200M。
集合通信网络中,每一个HCCL通信域都会占用HCCL_BUFFSIZE大小的缓存区。若集群网络中存在较多的HCCL通信域,此缓存区占用量就会增多,可能存在影响模型数据正常存放的风险,此种场景下,可通过此环境变量减少通信域占用的缓存区大小;若业务的模型数据量较小,但通信数据量较大,则可通过此环境变量增大HCCL通信域占用的缓存区大小,提升数据通信效率。
使用hccl_test工具进行性能测试的场景下,往往通信数据量较大,此种场景下,可适当增大HCCL_BUFFSIZE的值,提升数据通信效率。
配置示例:
export HCCL_BUFFSIZE=2048
针对集合通信算子,当测试数据量超过HCCL_BUFFSIZE的取值时,可能会出现性能下降的情况,建议HCCL_BUFFSIZE的取值大于测试数据量。
以2个计算节点,共16个NPU设备(每个计算节点包含8个NPU设备),每个NPU测试allreduce算子的性能为例:
cd hccl_test mpirun -f hostfile -n 16 ./bin/all_reduce_test -b 8K -e 64M -f 2 -d fp32 -o sum -p 8