Skip to content

集群通信测试 ​

集群通信测试包括GPU P2P测试、网卡IB Test测试、及多卡多机通信库测试。

通信库测试通过是集群达到可用的标志。

通信库性能数据会根据硬件配置不同产生差异,性能数据是否合理需进行特定分析。

常规性能数据见下述截图(C500,PCIe Gen5,Common拓扑,400Gbps RoCE网络)。

P2P和网卡测试是基本测试,用于检测Metalink/PCIE/NIC是否处于正常状态,测试结果符合预期后再进行mccl test。

查看设备及拓扑 ​

通信库测试和单机、网络拓扑强相关,测试前,需了解CPU、GPU、NIC和交换机的连接关系,才能判断集群通信的正确性。

拓扑的判断一般通过lspci、mx-smi等命令综合判断。

lspci查看硬件设备 ​

通过lspci -tvvv查看网卡类型。如下图中的ConnectX-7字段为网卡设备,配置为单机两计算网卡,每四个GPU对应一张网卡,网卡为CX7双口网卡。

lspci查看硬件设备

如下图中配置为单机四张单网口CX7计算网卡。

lspci查看硬件设备

mx-smi判断拓扑 ​

通过mx-smi判断gpu和nic拓扑。

mx-smi判断拓扑

P2P测试 ​

P2P测试是在UMD层面测试MetaxLink/PCIE/UPI的通信带宽(软件上不涉及通信库)。适用于单机和多机超节点场景,不适用于通过网卡连接的多机。

P2P单机测试 ​

1、安装maca包

2、cd /opt/maca/samples/mccl_tests/benchmark

3、bash p2p.sh (bash example.sh)(测试耗时和卡数相关,8卡测试耗时小于1分钟)

结果一般如下(Common拓扑,Gen5;根据服务器配置和拓扑不同,数据会有差异),根据数值后面的字符(P/M/U/N,字母解释见下图最后一行)来判断GPU间的默认传输链路(可通过步骤4进一步核对),并做带宽的合理性判断。

P2P单机测试

4、测试数据检查需要用mx-smi对比来看

执行命令mx-smi topo -m 查看gpu之间的连接类型

P2P单机测试

常规情况的带宽值:

1、Metaxlink链路:两GPU通信带宽要达到50GB/s(C500系列)或25GB/s左右(C600系列)左右;

2、PCIE直连链路:带宽可达到50GB/s(gen5)或者25GB/s(gen4);

3、PCIE互联且经过CPU的链路:NODE/SYS连接的通信带宽上限受限于CPU,Intel PCIE Gen5的配置下,NODE连接的两GPU通信带宽要达到35GB/s以上,SYS连接的两GPU通信带宽要达到30GB/s,CPU和GPU间的通信带宽为30GB/s左右;海光CPU的带宽值略低。

P2P多机测试 ​

该项测试只适用于超节点机型,通过使用Scale up Link连接的多机链路,如C500X Dragonfly (Switch),测试前需要保证机器间training成功。

1、安装maca包,training多机

2、cd /opt/maca/samples/mccl_tests/benchmark

3、bash dragonfly.sh(需要根据机器IP,测试机器数量等信息,修改脚本)

测试效果图如下(4机32卡):

P2P多机测试

红色数字为机内X16 Lane MetaxLink,黄色数字为机间X8 Lane MetaxLink,蓝色数字为机内跨RC通信。

IB/RoCE网卡测试 ​

IB/RoCE网卡测试用来单独验证网卡是否处于正常状态,在单机和多机上都可进行测试,ib perf bench已发布在maca包,目录/opt/maca/samples/mccl_tests/ib_perf,推荐参照该目录下的server.sh/client.sh脚本进行测试,也可参考下文命令进行测试,测试参数可查阅开源rdma ib perf test官方文档或本文档下述描述。

测试网卡时,要明确测试机器的网卡类型、配置及拓扑,尤其要注意网卡是单口还是双口类型,也要区分出计算网卡、存储网卡及管理网卡,可通过lspci -tvvv和ibstat命令综合判断。

常规网卡测试 ​

下述以多机测试为例(10.2.122.225和10.2.122.226,226作为server端)。

#server端执行命令:
/opt/maca/samples/mccl_tests/ib_perf/tests/ib_write_bw -a -F --report_gbits -d mlx5_0 --use_maca=0
#client端执行命令:
/opt/maca/samples/mccl_tests/ib_perf/tests/ib_write_bw  -a -F --report_gbits -d mlx5_0 --use_maca=0 10.2.122.226

400G网卡性能截图

常规网卡测试

参数解释

  • -a : 使用测试size为2~2^23 Bytes

  • -b : 测试双向带宽,不加-b仅测试单向带宽

  • -d mlx5_0 : 表示用网卡设备mlx5_0来进行测试,其他网卡设备名字可通过ibstat命令查看

  • -F : 表示测试开启CPU高频模式

  • -x 3 : RoCE网卡测试需要,-x 3表示使用RoCE 的gid index为3

  • --use_maca=0 : 表示用gpu0 的hbm来做网卡mlx5_0的带宽测试,如果gpu0和网卡mlx5_0在物理拓扑上距离较远,应当指定物理拓扑上距离较近的gpu来测试,方能充分发挥网络带宽。

不使用--use_maca表示用cpu memory来做测试。

可以用命令mx-smi topo -n 查看距离网卡较近的GPU,如图mlx5_1距离GPU2近,所以参数为 -d mlx5_1 --use_maca=2

距离:PIX 最近,PXB次之,NODE,SYS按照顺序越来越远

常规网卡测试

  • --run_infinitely : 测试一直进行,除非手动杀掉进程

  • -p 10000 : 测试使用的通信端口为10000

在C588的硬件环境下,use_maca设置需要按照双倍数进行调整,否则会导致ib_write_bw的测试结果偏低。

设置方法如下,如果mlx5_1对应距离最近的是GPU1,此时设置user_maca的时候不能指定为1,需要指定为2。相同的,如果说用mlx5_10做ib_write_bw的话,对应最近的是GPU7,但是还是同样588的原因,设置use_maca的时候需要设置为14。

MXRDMA网卡测试 ​

MXRDMA网卡是C600/N300上自带的Metax ETH网口,遵循RoCE V2协议。该网口的测试需添加特殊参数,请按照下述示例进行测试。

两卡测试示例(两卡可以为单机两卡,或者两机两卡,注意网口的选择,示例参数是必需的):

export MACA_PATH=/opt/maca
export LD_LIBRARY_PATH=/opt/maca/lib:/opt/maca/mxrdma/lib:$LD_LIBRARY_PATH
# server端执行命令:
/opt/maca/samples/mccl_tests/ib_perf/tests/ib_write_bw -d metax_rdma_0 --disable_pcie_relaxed --use_old_post_send --use_maca=0 -a -n 10 -m 4096
# client端执行命令
/opt/maca/samples/mccl_tests/ib_perf/tests/ib_write_bw -d metax_rdma_1 --disable_pcie_relaxed --use_old_post_send --use_maca=1 -a -n 10 -m 4096 10.2.187.44

性能测试截图

MXRDMA网卡测试

参数解释

  • -a : 使用测试size为2~2^23 Bytes

  • -b: 测试双向带宽,不加-b仅测试单向带宽

  • -d: metax_rdma_0 表示用网卡设备metax_rdma_0来进行测试,其他网卡设备名字可通过ibstat命令查看

  • -F : 表示测试开启CPU高频模式

  • -x 1 : RoCE网卡测试需要,-x 3表示使用RoCE 的gid index为3

  • --use_maca=0 : 表示用gpu0 的hbm来做网卡metax_rdma_0的带宽测试,请确保使用相同的索引。

不使用--use_maca表示用cpu memory来做测试。

  • --run_infinitely :测试一直进行,除非手动杀掉进程

  • -p 10000 :测试使用的通信端口为10000

  • --disable-pcie-relaxed : 禁用PCIe relaxed ordering

  • --use_old_post_send: 使用旧有的ibv_post_send进行发送,而不是新的(ibv_wr_*)接口

  • -n 10 : 每一种数据大小的重复测试的次数

网卡绑定numa测试 ​

不使用--use_maca的情况下,网卡用cpu memory来做测试,这是会收到CPU numa特性的影响,导致性能不稳定,需要绑定测试进程到最近的CPU numa上,具体步骤如下:

执行mx-smi topo -n 获取机器topo,找到网卡所属的numa。

网卡绑定numa测试

如上图,mlx5_1,离GPU2最近为PIX,GPU2数据numa 0,对应CPU核心0-55。那么mlx5_1属于numa 0。所以不使用--use_maca的的测试脚本绑定numa操作为使用taskset -c 0-55 来绑核心。不同机器测试绑定numa的情况不一样,都要用上面的方法匹配一下。

#server端执行命令:
taskset -c 0-55 /opt/maca/samples/mccl_tests/ib_perf/tests/ib_write_bw -a -F --report_gbits -d mlx5_0
#client端执行命令:
taskset -c 0-55 /opt/maca/samples/mccl_tests/ib_perf/tests/ib_write_bw  -a -F --report_gbits -d mlx5_1 10.2.122.226

异常问题 ​

libpci动态库问题 ​

如执行ib perf test后,报libpci.so找不到错误(报错如下图),则需在本地安装pci组件。

安装命令:sudo apt-get install libpci-dev

libpci动态库问题

non-GPLONLY接口报错 ​

在maca机器上多机测试RDMA网卡通信不成功,dmesg有如下日志:

[Mon Aug  3 20:12:59 2026] MXCD.PEER.INFO Try to initialize peer memory client support
[Mon Aug  3 20:12:59 2026] failing symbol_get of non-GPLONLY symbol ib_register_peer_memory_client.
[Mon Aug  3 20:12:59 2026] failing symbol_get of non-GPLONLY symbol ib_register_peer_memory_client.
[Mon Aug  3 20:12:59 2026] failing symbol_get of non-GPLONLY symbol ib_unregister_peer_memory_client.
[Mon Aug  3 20:12:59 2026] failing symbol_get of non-GPLONLY symbol ib_unregister_peer_memory_client.
[Mon Aug  3 20:12:59 2026] MXCD.PEER.INFO Peer memory client interface was not detected

原因:

peer mem注册不上,是因为debian的发行版内核引入了限制——只支持GPL only的接口,而IB网卡驱动(drivers/infiniband/core/peer_mem.c)导出的接口函数是non-GPL类型,IB网卡驱动和debian发行版linux内核的适配有问题,已知linux内核 4.19.0-amd64、5.10.0-0.deb10.28-amd64有此问题。

修复方案:

方案一:回退kernel版本(已验证linux-image-5.10.0-0.deb10.24没问题)。

方案二:修改 metax driver加载方法,特殊指定ib_reg_addr,ib_unreg_addr的地址。

手动加载metax方法

sudo rmmod metax

sudo cat /proc/kallsyms |grep peer_memory_client

ffff8000015f7074 T ib_register_peer_memory_client
ffff8000015f7274 T ib_unregister_peer_memory_client

sudo modprobe metax ib_reg_addr=0xffff8000015f7074  ib_unreg_addr=0xffff8000015f7274

以root用户执行如下脚本:

#!/bin/bash
rmmod metax
ib_register_peer=$(cat /proc/kallsyms |grep "T ib_register_peer_memory_client" | awk '{print $1}')
ib_unregister_peer=$(cat /proc/kallsyms | grep "T ib_unregister_peer_memory_client" | awk '{print $1}')

ib_reg_addr="0x${ib_register_peer}"
ib_unreg_addr="0x${ib_unregister_peer}"

modprobe metax ib_reg_addr=${ib_reg_addr} ib_unreg_addr=${ib_unreg_addr}

MCCL单机测试 ​

单机测试需要保证所有测试服务器的GPU都是空闲状态,不需要IB/RoCE网卡。

1、cd /opt/maca/samples/mccl_tests/perf

2、sudo bash mccl.sh(默认测试单机4卡 all reduce)

MCCL单机测试

3、sudo bash mccl.sh 8(测试单机8卡 all reduce)

MCCL单机测试

如果单机测试mccl bench的结果和上述截图差异较大,说明单机环境有问题。

MCCL多机测试 ​

多机RDMA通信测试脚本可参考/opt/maca/samples/mccl_tests/perf/cluster.sh(需要安装maca),修改其中的服务器ip地址和可用网卡端口信息后,可直接使用。另外像C500X等超节点,在超节点规模内的多机通信除了RDMA网络外,还可以只通过MetaxLink进行通信(需参考dragonfly.sh进行测试),测试时注意区分。

测试多机RDMA通信时,有如下注意事项:

1、需要确认机器使用的是IB网络还是RoCEv2网络,并确认可用计算网口。

2、需要确认测试机器之间所有的IB/RoCE网卡是互通的,测试方法参考上面的“IB/RoCE网卡测试”,确保所有网卡和交换机是正常的,尤其需要关注“查看网卡拓扑”小节,MCCL多机性能和网卡拓扑及单机P2P状态强相关。

3、测试需要保证用户对执行脚本的工作目录拥有可读写权限,因为测试会生成中间数据。

4、需要保证所有参与测试的服务器可免密互访,已安装maca包,且GPU都是空闲状态。

5、MCCL默认使用GDR模式进行网络通信,在特定情况下如需关闭GDR而使用CPU内存进行RDMA传输,可通过环境变量MCCL_NET_GDR_LEVEL=LOC来关闭GDR,常规情况下关闭GDR,网络性能会变差。

服务器免密互访配置 ​

以ubuntu为例,免密访问配置举例如下:

  • 检查所有机器有没有ssh key,如没有则生成ssh key
bash
ls ~/.ssh/id_rsa.pub || ssh-keygen -N '' -f ~/.ssh/id_rsa
  • 配置运行测试的本地服务器可以免密登录其他服务器,remote_ip1代表对端服务器ip地址
bash
ssh-keyscan -H $remote_ip1 >> ~/.ssh/known_hosts
ssh-copy-id -f $username@$remote_ip1
  • 运行多机测试只能在配置过免密的服务器上进行,如需在对端服务器运行,则需要在对端服务器进行相应免密配置。

MCCL多机测试脚本范例 ​

可参考/opt/maca/samples/mccl_tests/perf/cluster.sh,亦可参照下述范例。

是否添加环境变量MCCL_SOCKET_IFNAME和网卡配置强相关,默认场景,MCCL会自动搜索对应网口,如只有一个socket网口,可不手动设置,如有多个,且命名等配置不统一,需指定;或者为防止出现不可预知的混乱问题,可以直接指定。

#!/bin/bash
MACA_PATH=/opt/maca
LIB_PATH_ENV="-x LD_LIBRARY_PATH=${MACA_PATH}/lib:/${MACA_PATH}/ompi/lib"

CARD_NUM=16 #测试GPU数量
HOST_IP=10.2.122.225:8,10.2.122.226:8 #IP:GPU数量
IP_MASK=10.2.122.0/24 #服务器ip地址对应的掩码
IB_PORT=mlx5_0,mlx5_2 #用做计算RDMA通信的IB/RoCE网卡
SOCKET_NIC=enP3s48f0,enP3s48f1 #用做socket通信的网卡,ifconfig确认好网卡名字,不同机器的网卡名不同可以用逗号隔开
BENCH_NAME=${MACA_PATH}/samples/mccl_tests/perf/tests/all_reduce_perf

MCCL_ENV="${MCCL_ENV} -x MCCL_SOCKET_IFNAME=${SOCKET_NIC} -x MCCL_IB_HCA=${IB_PORT} -x MCCL_P2P_LEVEL=SYS ${LIB_PATH_ENV}"
MPI_ENV="${MPI_ENV} -mca pml ^ucx -mca btl ^openib -mca osc ^ucx -mca btl_tcp_if_include ${IP_MASK} -mca oob_tcp_if_include ${IP_MASK}"

${MACA_PATH}/ompi/bin/mpirun -n ${CARD_NUM} -host ${HOST_IP} ${MPI_ENV} ${MCCL_ENV} ${BENCH_NAME} -b 1K -e 1G -f 2

RoCEv2网络测试添加gid index参数 ​

该参数MCCL已默认对应选择为ipv4,RoCEv2。详细信息可参考如下描述:

需要先执行命令show_gids查看网卡的gid信息,确认RoCEv2网络使用的gid号:

如图:执行show_gids可以查看到网卡的gid信息。

gid VER v1表示RoCEv1,VER v2表示RoCEv2。

gid一般有两种,分别使用ipv6,ipv4来标识。单层交换机可以采用ipv6或者ipv4标识的gid,多层交换机一般采用ipv4,这样可以在交换机上面添加路由规则,支持多层交换机。所以按照RoCEv2 ipv4检索到的index为3,按照RoCEv2 ipv6检索到的index则为1。

RoCEv2网络测试添加gid index参数

注意:按照本指南的配置,网卡的GID INDEX列应该是有0,1,2,3,集群所有机器都应该是这样。如果出现了4,5,请务必检查配置ipv6.method 是否配置成ignore,如果GID INDEX不一致的话会影响集群功能和稳定性。

上述RoCEv2网络的测试脚本如下:

参数 -x MCCL_IB_GID_INDEX=3 标识使用index为3 的gid 流量走ipv4

参数 -x MCCL_IB_GID_INDEX=1 标识使用index为1 的gid 流量走ipv6

#!/bin/bash
MACA_PATH=/opt/maca
LIB_PATH_ENV="-x LD_LIBRARY_PATH=${MACA_PATH}/lib:/${MACA_PATH}/ompi/lib"

CARD_NUM=16 #测试GPU数量
HOST_IP=10.2.122.225:8,10.2.122.226:8 #IP:GPU数量
IP_MASK=10.2.122.0/24 #服务器ip地址对应的掩码
IB_PORT=mlx5_0,mlx5_2 #用做计算RDMA通信的IB/RoCE网卡
SOCKET_NIC=enP3s48f0,enP3s48f1 #用做socket通信的网卡,ifconfig确认好网卡名字,不同机器的网卡名不同可以用逗号隔开
BENCH_NAME=${MACA_PATH}/samples/mccl_tests/perf/tests/all_reduce_perf

#/*************RoCE参数*************/
#RoCE网络需要添加
GID_INDEX=3 #RDMA 网卡使用的RoCE gid index, 3对应ipv4,1对应ipv6
MCCL_ENV="${MCCL_ENV} -x MCCL_IB_GID_INDEX=${GID_INDEX}"
#/*************RoCE参数*************/

MCCL_ENV="${MCCL_ENV} -x MCCL_SOCKET_IFNAME=${SOCKET_NIC} -x MCCL_IB_HCA=${IB_PORT} -x MCCL_P2P_LEVEL=SYS ${LIB_PATH_ENV}"
MPI_ENV="${MPI_ENV} -mca pml ^ucx -mca btl ^openib -mca osc ^ucx -mca btl_tcp_if_include ${IP_MASK} -mca oob_tcp_if_include ${IP_MASK}"

${MACA_PATH}/ompi/bin/mpirun -n ${CARD_NUM} -host ${HOST_IP} ${MPI_ENV} ${MCCL_ENV} ${BENCH_NAME} -b 1K -e 1G -f 2

MCCL测试脚本参数解释 ​

  • mpirun -n

脚本是使用openmpi的mpirun 启动测试进程,-n 表示启动的进程数量,一般一个进程一个gpu。

  • -host 10.2.122.225:8,10.2.122.226:8

表示在机器10.2.122.225最多启动8张GPU,10.2.122.226最多启动8张GPU。

  • -mca pml ^ucx -mca btl ^openib -mca osc ^ucx

关闭openmpi的一些特性,防止其影响性能。

  • -mca btl_tcp_if_include

mpi会选择本机的ip地址对应的网卡进行mpi通信,例如下图

MCCL测试脚本参数解释

当一个机器上存在多个ip地址,可能会出现mpi通信失败的问题,这时候需要btl_tcp_if_include 指定通信用的网段,这样只会使用该网段内的网卡进行通信。

-mca btl_tcp_if_include 10.2.122.0/24 以子网掩码的方式表示网段,范围为10.2.122.0~10.2.122.255.

/24子网掩码实际就是二进制:‭11111111‬.‭11111111‬.‭11111111‬.00000000,其中数值1有24位长度,所以:/24位的子网掩码就是:255.255.255.0,和下图10.2.122.226的子网掩码相匹配。

MCCL测试脚本参数解释

当有多个网段存在是可以叠加,以10.2.122.0/24,10.2.111.0/24为例,有3种叠加方式

  • 直接把所有网段都列出来-mca btl_tcp_if_include 10.2.122.0/24,10.2.111.0/24

  • 减少子网掩码长度使网段扩容-mca btl_tcp_if_include 10.2.0.0/16

  • 使用网卡名替代网段-mca btl_tcp_if_include enx*

  • MCCL_IB_HCA

用来控制使用那些网卡来进行MCCL通信

MCCL_IB_HCA=mlx5 : 使用所有mlx5_**代表的网卡

MCCL_IB_HCA=^mlx5_1,mlx5_4 : 不使用 mlx5_1和 mlx5_4

MCCL_IB_HCA=mlx5_1,mlx5_4 : 只使用 mlx5_1和 mlx5_4

  • MCCL_IB_GID_INDEX=3

标识使用index为3 的gid,不同的集群gid值会不一样,IB网络不需要使用,RoCE网络需要用show_gids命令确认一下。

  • MCCL_P2P_LEVEL=SYS

用来控制GPU的P2P最大通信路径,路径超过该LEVEL就会关闭P2P功能。

不同值对应的含义如下。

LOC : 强制关闭PCIe P2P

MetaxLink : 当路径上有MetaxLink时才启用P2P

PIX : 当GPU位于同一PCIe switch下时,启用P2P

PXB : 当GPU位于同一PCIe RC下时,启用P2P

PHB :当GPU位于同一numa节点下时,启用P2P

SYS : 当GPU位于不同numa节点,跨UPI通信,也启用P2P

注意路径长度递增,即 MCCL_P2P_LEVEL=SYS 对于PHB、PXB、PIX等都会启用P2P, MCCL_P2P_LEVEL=PXB对于SYS、PHB不会启用P2P。

  • MCCL_NET_GDR_LEVEL=SYS

用来控制 NIC 和 GPU 通信是否使用 GPU Direct RDMA,路径控制同 MCCL_P2P_LEVEL。

  • MCCL_CROSS_NIC=1

用来控制MCCL单个channel的流量会不会跨网卡。

MCCL_CROSS_NIC=0:表示流量不会跨网卡,从同一个网卡进去,再出来

MCCL_CROSS_NIC=1:表示流量在多网卡的情况下,会跨网卡,从一个网卡进去,另一个网卡出来

MCCL_CROSS_NIC=2:(默认值)表示由MCCL代码决定流量要不要跨网卡

  • FORCE_ACTIVE_WAIT=1 为提升UMD性能的配,改中断为polling。

  • MX_TRACER_ENABLED_MCPTI=ON 可以在测试结果中展示gpu kernel的执行时间

  • -b 1K -e 1G -f 2表示测试数据为1K Bytes ~ 1G Bytes,step 按照2倍递增。

  • GIN相关的测试需要增加-R 2 -D 3选项。目前GIN只支持alltoall_perf。

R5300G6 x86 服务器common topo测试结果如下:

MCCL测试脚本参数解释

如果多机测试mccl bench的结果(红圈处的带宽数值)和上述截图差异较大,说明网络环境有问题。

topo:补充更多的机器topo 性能

ARM平台测试 ​

MaxPayload配置 ​

PCIe P2P性能问题需要配置MaxPayload>=256Byte。

PCIe的max payload配置会影响PCIe的带宽,对于通信库来说,主要影响带网卡和GPU之 间的带宽。目如果PCIe max payload为128B,则数据在超过128M之后带宽将下降。此时调整max payload为256B,带宽将继续上升接近理论带宽。

查看PCIe设备的max payload命令如下:

MaxPayload配置

如果max payload不为256B,建议修改max payload。不同服务器平台修改的方式不一样,通常是进入bios进行修改。如果找不到修改方法,建议咨询服务器厂商。

举例:ARM 同泰怡服务器的PCIe MaxPayload修改

位于bios CPU配置选项中,PEU的最大有效载荷,如果小于256B的话,需要修改为256B。重启后,需要用上面的方式确认MaxPayload是否修改成功。

MaxPayload配置

numa核心绑定 ​

当使用飞腾等ARM平台及海光CPU平台时,通信库性能受numa特性影响较大,需要绑核来进行测试。

首先通过命令mx-smi topo -m查看离GPU最近的numa核心

numa核心绑定

可以看到,GPU0、1、2、3离numa node1比较近,对应CPU核心为16-31,GPU4、5、6、7为numa node4,对应CPU核心为64-79。

编写绑核配置文件myrank,文件表示有两台机器10.2.122.115,10.2.122.116,每台机器都有8张GPU,GPU0~3绑定在CPU16-31,GPU4-7绑定在CPU64-79。rank编号随着机器递增。

numa核心绑定

绑核的测试脚本举例如下,使用--rankfile ./myrank 指定即可:

#!/bin/bash
MACA_PATH=/opt/maca
LIB_PATH_ENV="-x LD_LIBRARY_PATH=${MACA_PATH}/lib:/${MACA_PATH}/ompi/lib"

CARD_NUM=16 #测试GPU数量
HOST_IP=10.2.122.225:8,10.2.122.226:8 #IP:GPU数量
IP_MASK=10.2.122.0/24 #服务器ip地址对应的掩码
IB_PORT=mlx5_0,mlx5_2 #用做计算RDMA通信的IB/RoCE网卡
SOCKET_NIC=enP3s48f0,enP3s48f1 #用做socket通信的网卡,ifconfig确认好网卡名字,不同机器的网卡名不同可以用逗号隔开
BENCH_NAME=${MACA_PATH}/samples/mccl_tests/perf/tests/all_reduce_perf

#/*************ARM 绑核心参数*************/
NUMA_BIND_FILE=./myrank #arm 平台用来做numa绑定的文件
MPI_ENV="${MPI_ENV} --rankfile ${NUMA_BIND_FILE}"
#/*************ARM 绑核心参数*************/

MCCL_ENV="${MCCL_ENV} -x MCCL_SOCKET_IFNAME=${SOCKET_NIC} -x MCCL_IB_HCA=${IB_PORT} -x MCCL_P2P_LEVEL=SYS ${LIB_PATH_ENV}"
MPI_ENV="${MPI_ENV} -mca pml ^ucx -mca btl ^openib -mca osc ^ucx -mca btl_tcp_if_include ${IP_MASK} -mca oob_tcp_if_include ${IP_MASK}"

${MACA_PATH}/ompi/bin/mpirun -n ${CARD_NUM} -host ${HOST_IP} ${MPI_ENV} ${MCCL_ENV} ${BENCH_NAME} -b 1K -e 1G -f 2

网卡适配 ​

环境适配 ​

首先要检查网卡的MaxReadReq是不是大于256,大于256的话需要设置成256。

环境适配

PCIe MaxReadReq设置 ​

正常情况下沐曦的kmd会适配一批网卡型号,在kmd初始化阶段会设置白名单里的网卡MaxReadReq=256,但是如果网卡型号不在白名单里面,仍会出现MaxReadReq>256的情况,需要联系KMD同事张建进行适配,现有的项目可同通过下面的手段用setpci进行设置。

先setpci -s <bdf> CAP_EXP+8.w 获取当前值,然后setpci -s <bdf> CAP_EXP+8.w=1xxx, xxx保持原来的值不变

例如sudo setpci -s 33:00.0 CAP_EXP+8.w 获得4937,4对应MaxReadReq=2048

接下来执行sudo setpci -s 33:00.0 CAP_EXP+8.w=1937即可设置MaxReadReq=256

注意:计算网络用的每张网卡都需要配置MaxReadReq

CAP_EXP+8.wMaxReadReq
54096
42048
31024
2512
1256

使能dmabuf ​

在使用RDMA网卡直接访问GPU显存的场景中,需要linux内核提供的peer memory或者dmabuf机制,来支持将GPU显存注册为网卡可以访问的MR。沐曦的一系列产品也不例外。

其中,peer meemory要求网卡厂商的驱动实现类似mellanox peer meemory的功能。

maca 驱动默认是支持peer meemory机制的,因此在RDMA网卡驱动也有相关实现的情况下,就可以直接跑测试,具体参考6.4章节的多机测试。

而dmabuf机制则是未来的技术演进趋势,因此MACA软件栈也在逐步支持它。

KMD版本要求 ​

dmabuf的使用前提是操作系统的内核版本要足够新,满足网卡dmabuf的使用需求,具体可由网卡提供商来确定。

mellanox网卡测试通过的操作系统内核版本为5.15.0-58,2024年6月后的maca release版本才能支持

SDK版本要求 ​

master SDK >= 20260806-1300

release SDK: 3.8.2,及其以后的release版本

ib_perf测试 ​

当在metax GPU上使用ib_write_bw进行测试时,使能dmabuf仅需添加 --use_maca_dmabuf 选项。

server端:/opt/maca/samples/mccl_tests/ib_perf/tests/ib_write_bw -d mlx5_0 -F --use_maca=0 -a --use_maca_dmabuf

client端:/opt/maca/samples/mccl_tests/ib_perf/tests/ib_write_bw -d mlx5_1 -F --use_maca=1 -a 10.2.122.226 --use_maca_dmabuf

注意:

  • 选项“--use_maca_dmabuf”需要放置在“--use_maca=x”之后;

  • 选项“--use_maca_dmabuf”需要放置命令行的最后,且不能有空格;

当使能dmabuf功能后,在测试输出中会出现如下图中红框所示的打印提示:

ib_perf测试

mccl perf测试 ​

在多机mccl测试中,需要额外添加环境变量MCCL_DMABUF_ENABLE=1和MACA_NUMA_MEMORY_POLICY=1来使能dmabuf。

以IB网络为例的测试脚本如下:

#!/bin/bash
MACA_PATH=/opt/maca
LIB_PATH_ENV="-x LD_LIBRARY_PATH=${MACA_PATH}/lib:/${MACA_PATH}/ompi/lib"

CARD_NUM=16 #测试GPU数量
HOST_IP=10.2.122.225:8,10.2.122.226:8 #IP:GPU数量
IP_MASK=10.2.122.0/24 #服务器ip地址对应的掩码
IB_PORT=mlx5_0,mlx5_2 #用做计算RDMA通信的IB/RoCE网卡
SOCKET_NIC=enP3s48f0,enP3s48f1 #用做socket通信的网卡,ifconfig确认好网卡名字,不同机器的网卡名不同可以用逗号隔开
BENCH_NAME=${MACA_PATH}/samples/mccl_tests/perf/tests/all_reduce_perf

#/*************dmabuf 参数*************/
DMABUF_ENV="-x MACA_MXC_PATH=/opt/maca/lib/ -x MCCL_DMABUF_ENABLE=1 -x MACA_NUMA_MEMORY_POLICY=1"
MCCL_ENV="${MCCL_ENV} ${DMABUF_ENV}"
#/*************dmabuf 参数*************/

MCCL_ENV="${MCCL_ENV} -x MCCL_SOCKET_IFNAME=${SOCKET_NIC} -x MCCL_IB_HCA=${IB_PORT} -x MCCL_P2P_LEVEL=SYS ${LIB_PATH_ENV}"
MPI_ENV="${MPI_ENV} -mca pml ^ucx -mca btl ^openib -mca osc ^ucx -mca btl_tcp_if_include ${IP_MASK} -mca oob_tcp_if_include ${IP_MASK}"

${MACA_PATH}/ompi/bin/mpirun -n ${CARD_NUM} -host ${HOST_IP} ${MPI_ENV} ${MCCL_ENV} ${BENCH_NAME} -b 1K -e 1G -f 2

多机使用非RDMA协议通信 ​

在一些特殊场景,如缺少RDMA设备或者定位问题的情况下,可以禁用RDMA协议,使用普通的Socket IP协议栈进行多机通信,此时性能会非常差。

1、如果RDMA网卡是IB模式或者没有RDMA网卡,Socket通信只能通过管理网卡传输。

需设置环境变量export MCCL_IB_DISABLE=1 和 export MCCL_SOCKET_IFNAME=每个机器的管理网口,管理网口可以通过ifconfig -a得到。

2、RDMA网卡是RocE模式,Socket通信可以通过RDMA网卡TCP/UDP模式传输,也可以通过管理网卡传输。

通过RDMA网卡传输,需export MCCL_IB_DISABLE=1;如需通过管理网卡传输,和上述小节1中的配置一致。

DeepEP单机测试 ​

DeepEP包含三种算法:low latency、internode、intranode算法,internode和intranode算法默认只支持全互联拓扑,如C550,非全互联拓扑陆续支持中,具体可咨询通信库团队。low latency支持所有拓扑。

测试DeepEP前,请保证上述MCCL测试通过。

当前mxdeepep的相关测试需要依赖mxshmem,需要进行一些前置环境的准备工作。

基础环境搭建 ​

  • 确认主机的操作系统版本满足 Ubuntu 20及以上(Ubuntu18等以下版本可能无法work)

  • 确认GPU和IB网卡的硬件状态

  • 确认当前机器安装的RDMA网卡驱动(需要ofed驱动为23.10及以后,25.10及以前),如需要更新则采取以下安装步骤(或可参考本文档网卡驱动安装章节). 可使用下面命令检查当前版本:

ofed_info -s

基础环境搭建

宿主机环境搭建 ​

  • 安装最新release 的MACA SDK master版本或者release-2.32及以后版本

  • 安装MACA SDK对应的driver版本

  • 确认当前python以及torch版本,目前仅支持python3.8, python3.10, python3.12和torch2.4,torch2.6,torch2.8,torch2.10的10种排列组合

    • 安装python参考内部文档: https://repo.metax-tech.com/mirrors/index/wiki/python(推荐conda (miniForge))

    • 安装MACA SDK对应的torch

    • 需要同时安装,torch-2.xxxxxx.whl, flash_attn_xxx.whl

    • 宿主机环境搭建

    • 解压并pip install torch****以及flash_attn*****

    • 安装numpy(1.24版本)

      • pip install numpy==1.24
  • 以上1,2,3步安装可参考内部文档

宿主机环境搭建

  • 验证torch环境是否安装成功

    • 输入pip show torch 查看torch的安装版本

宿主机环境搭建

  • 输入python,进入交互界面

  • 输入import torch,可以正常返回

宿主机环境搭建

docker环境搭建 ​

  • 获取容器压缩文件:

docker环境搭建

  • 无需解压,使用 docker load -i maca-torch* 生成image

docker环境搭建

  • 使用image构建对应的docker环境
docker run -itd --device=/dev/dri --device=/dev/mxcd --device=/dev/infiniband --group-add video --device=/dev/mem --network=host --security-opt seccomp=unconfined --security-opt apparmor=unconfined --shm-size '64gb' --ulimit memlock=-1 -v /pde_ai -w /workspace --name  docker_name  image_name /bin/bash

docker环境搭建

  • 验证torch环境是否可用

进入docker中:docker exec -it 0820-test /bin/bash

输入pip show torch 查看torch的安装版本

docker环境搭建

输入python,进入交互界面

输入import torch,可以正常返回

docker环境搭建

安装mxshmem和mxdeepep ​

mxshmem获取Deepep获取
master(#20260510-924)或Release3.8.0及以后自动安装至/opt/maca
无需手动安装
SDK-PYTHON包
master(#20251225-915)或Release3.6.0及以后自动安装至/opt/maca
无需手动安装
PYTORCH包
master(#20251224-911)及Release3.5.x以前restricted包restricted包

master(#20260510-924)或Release3.8.0及以后版本 ​

mxshmem随MACA SDK发布。 安装MACA SDK时自动安装至/opt/maca/lib, /opt/maca/include/mxshmem目录。

mxdeepep由PyTorch包改到SDK-PYTHON包发布。

master(#20260510-924)或Release3.8.0及以后版本

选择对应的python版本,解压后安装对应Pytorch版本的包

master(#20260510-924)或Release3.8.0及以后版本

master(#20251225-915)或Release3.6.0及以后版本 ​

mxshmem随MACA SDK发布。 安装MACA SDK时自动安装至/opt/maca/lib, /opt/maca/include/mxshmem目录。

mxdeepep随MACA PYTORCH发布。包含MACA PYTORCH的容器环境会自动安装mxdeepep, 也可通过VDI内部构建发布页面手动下载:(devopsportal.metax-internal.com)

master(#20251225-915)或Release3.6.0及以后版本

注意与python及pytorch版本对应。

master(#20251224-911)及Release3.5.x以前版本 ​

安装mxshmem ​
  • 下载restricted包(VDI内 devopsportal.metax-internal.com )

安装mxshmem

  • 解压并安装mxshmem安装包,安装包在解压目录的restricted/deb下

  • 执行dpkg -i mxshmem_xxxxxxxx.deb

一般会安装到/opt/maca-$data/mxshmem目录下,需手动将该目录拷贝至/opt/maca下,减少后续环境变量配置;

安装deepep ​

安装deepep

  • 下载restricted的对应版本,注意与上述的(pytorch和python版本)对应

  • 执行以下命令

pip install  -i http://repo.metax-tech.com/r/pypi/simple --trusted-host repo.metax-tech.com  deep_ep-1.0.0+a350ee3-cp310-cp310-linux_x86_64.whl

环境变量设置 ​

关于MXSHMEM和DEEPEP的环境变量详细描述请参考DeepEP环境变量指南 。

注意:

master(#20251224-911)及Release3.5.x以前版本 SHMEM环境变量以NVSHMEM开头。

master(#20251225-915)或Release3.6.0及以后版本 SHMEM环境变量以MXSHMEM开头。

如NVSHMEM_HCA_LIST 对应改为 MXSHMEM_HCA_LIST。

或者可以同时写两个兼容不同版本。

LowLatency ​

需要设置的环境变量 ​
export MXSHMEM_HCA_LIST=mlx5_0:1,mlx5_1:1(可用的计算网卡网口)

从Release 3.9.0 或 MASTER 20260817-271 SDK-PYTHON 开始默认 MXLink与IBGDA混合使用

若只使用IBGDA,需要额外设置环境变量,可降低hook模式的时延但带宽会有部分下降

export MXSHMEM_DISABLE_P2P=1

Release 3.9.0 或 MASTER 20260817-271 SDK-PYTHON 之前的版本:

默认只使用IBGDA,不支持MXLink和IBGDA混合使用。

对于C500系列专家数超过256需要设置多专家支持, C600系列不能设置此环境变量否则会报错

export DEEPEP_MORE_EXPERTS=1

Internode ​

internode测试需要使用网卡,需要配置:

export MXSHMEM_HCA_LIST=mlx5_0:1,mlx5_1:1(可用的计算网卡网口)

从Release 3.9.0 或 MASTER 20260817-271 SDK-PYTHON 开始:

除网卡设置外 internode工作在不同的GPU上设置的环境变量有区别,详细设置如下:

#C600和N300
export MXDEEPEP_EXT_MAX_MXL_PEERS=4
export MACA_VISIBLE_DEVICES=0,4,8,12,1,5,9,13,6,2,10,14,7,3,11,15

#C600U
export MXDEEPEP_EXT_MAX_MXL_PEERS=8

#C500
export MXDEEPEP_EXT_MAX_MXL_PEERS=4

#C588
export MXDEEPEP_EXT_MAX_MXL_PEERS=2
export MACA_VISIBLE_DEVICES=0,1,6,7,10,11,14,15,3,2,5,4,9,8,13,12

Release 3.9.0 或 MASTER 20260817-271 SDK-PYTHON 之前版本:

除网卡设置外 在internode工作在不同的GPU上设置的环境变量有区别,具体如下

#C600和N300
export MACA_EXT_MXDEEPEP_MAX_NVL_PEERS=4
export MACA_VISIBLE_DEVICES=0,4,8,12,1,5,9,13,6,2,10,14,7,3,11,15
export MXSHMEM_DISABLE_P2P=0

#C600U
export MACA_EXT_MXDEEPEP_MAX_NVL_PEERS=8
export MXSHMEM_DISABLE_P2P=0

#C500
export MACA_EXT_MXDEEPEP_MAX_NVL_PEERS=4
export MXSHMEM_P2P_MAX_DISTANCE=pxb

#C588
export MACA_EXT_MXDEEPEP_MAX_NVL_PEERS=2
export MACA_VISIBLE_DEVICES=0,1,6,7,10,11,14,15,3,2,5,4,9,8,13,12
export MXSHMEM_P2P_MAX_DISTANCE=pxb

注:目前Internode 在 C588/C600/N300 平台尚不支持多机运行。

C600U和N300 还需要增加 sm的个数设置,运行参数中需要增加-s 18

单机internode不支持C550机型,除非将550机型当作500机型使用

Intranode ​

intranode测试不需要网卡,无需设置MXSHMEM_HCA_LIST。

从Release 3.9.0 或 MASTER 20260817-271 SDK-PYTHON 开始:

intranode工作在不同的GPU需要设置MACA_VISIBLE_DEVICES,详细设置如下:

#C600 和N300
export MACA_VISIBLE_DEVICES=0,4,8,12,1,5,9,13,6,2,10,14,7,3,11,15

#C588
export MACA_VISIBLE_DEVICES=0,6,10,14,1,7,11,15,2,4,8,12,3,5,9,13

Release 3.9.0 或 MASTER 20260817-271 SDK-PYTHON 之前版本:

intranode工作在不同的GPU设置的环境变量有区别,详细设置如下:

#C600 和N300
export MACA_EXT_MXDEEPEP_MAX_NVL_PEERS=16
export MACA_VISIBLE_DEVICES=0,4,8,12,1,5,9,13,6,2,10,14,7,3,11,15

#C588
export MACA_EXT_MXDEEPEP_MAX_NVL_PEERS=16
export MACA_VISIBLE_DEVICES=0,6,10,14,1,7,11,15,2,4,8,12,3,5,9,13

Mellanox网卡 ​

  • export MXSHMEM_HCA_LIST=mlx5_0:1,mlx5_1:1(可用的计算网卡网口)

  • export MXSHMEM_IB_TRAFFIC_CLASS=160

    • 当网卡模式为ROCE的需要进行设置。InfiniBand模式不要设置!

    • (实际值需和该章节网卡traffic_class值保持一致,/sys/class/infiniband/mlx5_1/tc/1/traffic_class)

MXRDMA网卡 ​

对于MXRDMA网卡【必须使用MACA SDK Release 3.9.0之后的版本】,额外操作

  • 需要设置额外的环境变量

  • export MXSHMEM_GDA_PROVIDER=mrdma

  • export MXSHMEM_HCA_LIST="metax_rdma_0:1,metax_rdma_1:1,metax_rdma_2:1,metax_rdma_3:1,metax_rdma_4:1,metax_rdma_5:1,metax_rdma_6:1,metax_rdma_7:1,metax_rdma_8:1,metax_rdma_9:1,metax_rdma_10:1,metax_rdma_11:1,metax_rdma_12:1,metax_rdma_13:1,metax_rdma_14:1,metax_rdma_15:1"

  • 需要配置PCIE SWITCH 【打开上行功能】

bash
sudo mxrdma_upstreamFwd -s

测试文档 ​

测试脚本当前压缩包解压缩,所有的测试脚本默认使用C500,请按照实际产品更新对应环境变量

请至钉钉文档查看附件《TestDeepep.7z》。

从Release 3.9.0 或 MASTER 20260818-1323 开始 MACA SDK 包中有deepep的测试文件和测试脚本。

相关的文件位于 /opt/maca/tools/communication/mxdeepep 中:

测试文档

测试的python文件的参数介绍:

测试文档

注意:

当前测试脚本中 rank数默认为8,测试时需要结合实际的机型和需求进行配置

例如C600的机器测试时,需要在对应的测试脚本中增加 参数 -n 16

测试文档

当前internode的测试脚本sm 默认为20,测试时需要根据实际和需求进行配置

N300或C600U的机器上,-s 需要设置为18

测试文档

执行单机LowLatency测试 ​

配置MXSHMEM_HCA_LIST变量中IB网卡的name,并保证该网卡的状态为active状态

结合产品,参考DEEPEP推荐环境变量设置修改single_node/test_low_latency.sh脚本

以C500为例,单机LowLatency测试结果:

执行单机LowLatency测试

执行单机Intranode测试 ​

intranode测试不需要网卡,需结合产品,参考DEEPEP推荐设置修改single_node/test_intranode.sh脚本

以C500为例,单机intranode测试结果:

执行单机Intranode测试

执行单机Internode测试 ​

internode测试需要使用网卡

需要配置MXSHMEM_HCA_LIST变量中网卡的name,并保证该网卡的状态为active

结合产品,参考DEEPEP推荐设置修改single_node/test_internode.sh脚本

以C500为例,单机internode测试结果:

执行单机Internode测试

DeepEP多机测试 ​

执行多机测试时,需保证每个机器的基础环境软件版本一致,都能够跑通单机测试case。

注意只有Low_latency 和internode算法支持多机测试。

参考上述MCCL测试章节及DeepEP单机测试。

环境变量 ​

从Release 3.9.0 或 MASTER 20260817-271 SDK-PYTHON 开始:

集群多机DEEPEP测试部署需要配置以下变量:

  • export MXDEEPEP_TEST_MASTER_ADDR=10.2.122.226 (多机通信中该变量保持唯一,作为master rank)

  • export MXDEEPEP_TEST_MASTER_PORT=29543 (选配)

  • export MXDEEPEP_TEST_MXDEEPEP_WORLD_SIZE=2 (机器的个数)

  • export MXDEEPEP_TEST_RANK=0 (master rank主机的环境设置为0,其他主机设置为其他rankID)

  • export MXSHMEM_BOOTSTRAP_UID_SOCK_IFNAME=enp196s0f1 (管理网卡的name)

  • export MXSHMEM_HCA_LIST=mlx5_0:1,mlx5_1:1(可用的计算网卡网口)

  • export MXSHMEM_IB_TRAFFIC_CLASS=160 (与网络配置traffic_class配置保持一致)

    • 当网卡模式为ROCE的需要进行设置。InfiniBand模式不要设置!

    • (实际值需和RoCE网卡无损参数配置网卡traffic_class值保持一致:

    • /sys/class/infiniband/mlx5_1/tc/1/traffic_class)

  • export MCCL_SOCKET_IFNAME=enp196s0f1 (管理网卡的name)

  • export MCCL_IB_HCA=mlx5_0:1,mlx5_1:1(可用的计算网卡网口)

Release 3.9.0 或 MASTER 20260817-271 SDK-PYTHON 之前版本:

集群多机DEEPEP测试部署,基于单机环境变量的设置外,还需要配置以下变量:

  • export MASTER_ADDR=10.2.122.226 (多机通信中该变量保持唯一,作为master rank)

  • export MASTER_PORT=29543 (选配)

  • export WORLD_SIZE=2 (机器的个数)

  • export RANK=0 (master rank主机的环境设置为0,其他主机设置为其他rankID)

  • export MXSHMEM_BOOTSTRAP_UID_SOCK_IFNAME=enp196s0f1 (管理网卡的name)

  • export MXSHMEM_IB_TRAFFIC_CLASS=160 (与网络配置traffic_class配置保持一致)

    • 当网卡模式为ROCE的需要进行设置。InfiniBand模式不要设置!

    • (实际值需和RoCE网卡无损参数配置网卡traffic_class值保持一致:

    • /sys/class/infiniband/mlx5_1/tc/1/traffic_class)

  • export MCCL_SOCKET_IFNAME=enp196s0f1 (管理网卡的name)

  • export MCCL_IB_HCA=mlx5_0:1,mlx5_1:1(可用的计算网卡网口)

执行多机internode测试 ​

配置MXSHMEM_HCA_LIST变量中IB网卡的name,并保证该网卡的状态为active状态

结合产品,参考DEEPEP推荐环境变量设置修改multi_node/test_internode.sh脚本

以C500为例,多机internode测试结果:

rank0机器 ​

rank0机器

rank1机器 ​

rank1机器

执行low latency多机测试 ​

配置MXSHMEM_HCA_LIST变量中IB网卡的name,并保证该网卡的状态为active状态

结合产品,参考DEEPEP推荐环境变量设置修改multi_node/test_low_latency.sh脚本

以C500为例,多机LowLatency测试结果:

rank0 ​

rank0

rank1 ​

rank1

使用mpi执行low latency多机测试 ​

配置MXSHMEM_HCA_LIST变量中IB网卡的name,并保证该网卡的状态为active状态

结合产品,参考DEEPEP推荐环境变量设置修改multi_node/cluster_mpi.sh脚本

使用MPI进行测试时,两机之间需要设置免密,参考MCCL多机测试

另外需要注意,若使用mpi进行多机测试时,需要保证deepep安装的位置相同

以C500为例,多机LowLatency测试结果:

使用mpi执行low latency多机测试

MXMesh 单元测试 ​

MXMesh 包含两种算法:low latency、normal算法,当前仅支持low latency算法,normal算法(internode、intranode)暂未支持。MxMesh默认只支持超节点(如shanghai Cube,C588超节点)、单机(如C600U)拓扑,具体可咨询通信库团队。

测试MXMesh前,请保证上述MCCL测试通过,以保证机器或集群为可用状态。

基础环境搭建 ​

基本环境配置及安装包获取,与deep_ep 配置和安装一样,参考deep_ep相关内容。需要注意的是:

deep_ep 与 mxmesh 当前是独立互斥的, 两者不能混合使用。安装mxmesh之前要先卸载deep_ep,安装deep_ep 之前要先卸载mxmesh.

与deep_ep区别及使用方法 ​

python import模块名称还是一样的:import deep_ep

区别在low_latency_dispatch接口上,mxmesh比deep_ep多一个topk_weights 参数

与deep_ep区别及使用方法

mxmesh 单元测试 ​

请至钉钉文档查看附件《utils.py》。

请至钉钉文档查看附件《test_ll_mxmesh.py》。

与deep_ep测试脚本一样,下载附件py两个文件,可参考如下测试脚本修改测试:

#!/bin/bash

pip uninstall deep_ep -y

export MACA_PATH=/opt/maca/

# NOTE: check your folder name
export LD_LIBRARY_PATH=${MACA_PATH}/mxgdrcopy/lib/:${MACA_PATH}/lib:${MACA_PATH}/ompi/lib:${MACA_PATH}/mxgpu_llvm/lib

# Run test cases
# NOTES: you may modify the `init_dist` function in `tests/utils.py`
# according to your own cluster settings, and launch into multiple nodes
# master主机地址保持唯一
export MASTER_ADDR=10.0.82.169
export MASTER_PORT=29568
export WORLD_SIZE=1
# master设置为0,其他主机设置为其他rankID eg:1,2,3
export RANK=0

ifname=$(ip route show default | awk '/default/ {print $5; exit}')
export MCCL_SOCKET_IFNAME=${ifname}
echo "Node $RANK, socket: ${MCCL_SOCKET_IFNAME}"

export MACA_DIRECT_DISPATCH=1
export MXMESH_TIMEOUT_PRINT=1
#export MACA_KERNEL_TIMEOUT=60000

python3 test_ll_mxmesh.py -e 256 -t 128 -n 32  #--enable-fp8

mxmesh 支持情况 ​

mxmesh LL当前使用限制见附录MXMesh支持情况章节。

MPI 测试 ​

MPI测试通常使用OSU Micro-Benchmarks进行测试,OSU bench来源于开源社区,通过对其适配并集成发布到了maca包中(release 3.8.3之后版本)。

文件目录/opt/maca/tools/communication/mpi/osu_benchmark,单机测试使用single.sh,多机测试使用cluster.sh。

注:osu gather测试目前仍有遗留问题,可不测试。