HCCL TEST简介
HCCL TEST主要是在多机(也可以单机)多卡上面,运行通信算子,验证多机多卡hccl通信功能以及性能。
HCCL_TEST主要是提供一些通信算子的可执行文件,真正要调度到多机多卡上,需要借助MPICH。HCCL TEST路径及内容:
/usr/local/Ascend/ascend-toolkit/latest/toolkit/tools/hccl_test
MPICH介绍
HCCL性能测试工具依赖MPI拉起多个进程,所以需要先安装MPI软件。
MPICH执行效果如下,实际上它在两个服务器的16个卡上并行的调用了hccl test的通信算子命令:./bin/all_reduce_test -p 8 -b 8K -e 64M -f 2 -d fp32 -o sum
-
执行如下hccl test命令,其中hostfile配置如下:
#训练节点ip:每节点的进程数
192.168.1.10:8
192.168.1.11:8
mpirun -f hostfile -n 16 ./bin/all_reduce_test -p 8 -b 8K -e 64M -f 2 -d fp32 -o sum
-
执行效果
-
分别在两台服务器执行top -c,可以看到
HCCL TEST安装和使用
这里简单说下流程,详情参考以下链接:hccl性能测试工具介绍
-
MPI安装与配置
-
编译安装MPI
-
配置/etc/hosts:主要是方便通过name/域名访问其他服务器
-
服务器间免密:实现直接ssh其他服务器,不用账号密码认证
-
-
HCCL TEST编译
-
主要注意这里依赖cann的安装
-
-
工具使用,具体可以参照:工具使用
HCCL_SOCKET_IFNAME环境变量使用
这里主要介绍HCCL_SOCKET_IFNAME环境变量的使用。只解决两个问题:
-
到底什么时候需要配置
-
怎么配置
什么时候需要配置
在做hccl test的时候发现一个现象,就是有时候不需要配置HCCL_SOCKET_IFNAME环境变量,直接执行hccl_test就能成功,而有的时候不配置HCCL_SOCKET_IFNAME就会报错,到底原因是什么呢?
仔细查看官方文档,会发现有这样一段话:
HCCL_SOCKET_IFNAME中可配置多个网卡,取最先匹配到的网卡作为root网卡。
说明
-
环境变量网HCCL_IF_IP的优先级高于HCCL_SOCKET_IFNAME。
-
如果用户未指定HCCL_IF_IP和HCCL_SOCKET_IFNAME,按照如下优先级选择:
-
docer/lo以外网卡(网卡名字典序升序) > docker 网卡 > lo网卡
也就是说如果不配置HCCL_IF_IP和HCCL_SOCKET_IFNAME,按照docer/lo以外网卡(网卡名字典序升序) > docker 网卡 > lo网卡的顺序匹配网卡,匹配时候按照网卡名字典序升序匹配,所以:
-
如果hostfile中配置的通信ip地址正好是第一个物理网卡的ip地址(linux下使用ifconfig命令查看网络接口,从上到下看),那么这个网卡就用来做通信的root网卡,不需要配置HCCL_SOCKET_IFNAME。
-
上面说的这个第一个物理网卡down了,或者没有配置通信ip地址,那么这时候就需要配置HCCL_SOCKET_IFNAME环境变量,具体指定用哪个网卡来通信,否则会报异常。
怎么配置
这里主要对一个特殊场景的配置,做一下说明。
如果两个服务器的通信网卡命名规则不同,如下面情况,一个服务器通信网卡是物理网卡,另一个服务器通信网卡是网桥接口,这时候要怎么配置呢?就需要参照下图这样配置,要把两面服务器的网卡名都写上。