MC2 Test
MC2融合算子测试框架,用于华为昇腾NPU上MC2(Matmul+Communication融合)系列算子的精度验证、性能对比、DFX异常测试等。
项目结构
mc2_test/
├── mc2_test.py # 主入口,命令行参数解析与场景调度
├── upload_result.py # 测试结果上传至数据库
├── op_class/ # 各算子实现类(继承 MC2_OP 基类)
│ ├── common.py # MC2_OP 抽象基类,定义通用方法
│ ├── registry.py # 算子注册装饰器
│ └── aclnn*.py # 各融合算子具体实现
├── script/
│ ├── func.py # 工具函数(通信初始化、数据生成、profiling等)
│ └── get_case_name.py # 从Excel获取用例名
├── excel/ # 测试用例表(xlsx格式)
├── david_excel/ # David模式测试用例表
├── cpp/ # C++层面的golden计算实现
├── bin_path/ # 运行时生成的bin数据文件
├── requirement.txt # Python依赖
└── OAT.xml # 开源合规扫描配置
环境依赖
- 见
requirement.txt:numpy, pandas, openpyxl, psutil, decorator, scipy, attrs, protobuf, en_dtypes
主入口调用方法
主入口为 mc2_test.py,通过命令行参数控制运行场景:
python mc2_test.py --xlsx <xlsx_path> --sheet <sheet_name> --num <case_num> --scene <scene> [options]
必选参数
| 参数 |
说明 |
--xlsx |
测试用例Excel文件路径,支持传入多个文件混跑,如 --xlsx a.xlsx b.xlsx |
--sheet |
Excel中的Sheet页名称 |
--num |
用例编号。单个编号测试该用例,如 --num 1;两个编号测试范围,如 --num 1 10(仅限one_hccl场景) |
--scene |
运行场景,见下方场景说明 |
可选参数
| 参数 |
默认值 |
说明 |
--world_size |
8 |
通信域卡数(one_hccl场景必选) |
--soc |
910B |
芯片型号:910B / 910C / 910D(自动检测) |
--weight_same |
0 |
设为1时各卡权重一致,用于校验allgather的md5一致性 |
--ep |
0 |
EP通信域大小(双通信域场景) |
--tp |
0 |
TP通信域大小(双通信域场景) |
--master_ip |
127.0.0.1 |
主节点IP(跨server场景) |
--master_port |
50001 |
主节点端口(跨server场景) |
--server_num |
1 |
server数量(跨server场景) |
--server_index |
0 |
当前server序号(跨server场景) |
--dev_num |
0 |
每server使用device数量(跨server场景) |
--mix |
0 |
是否混跑不同算子(传入多个xlsx时自动开启) |
支持的运行场景(--scene)
精度测试场景
| 场景 |
说明 |
npu |
单算子模式:构造golden数据(hccl+mm小算子级联),执行MC2融合算子,对比精度 |
graph |
图模式:同上,但以torch.compile入图方式执行MC2算子 |
cpu |
CPU模式:使用gloo后端在CPU上计算golden并对比 |
aclnn |
aclnn模式:从已保存的bin文件读取golden和npu结果进行精度对比 |
aclnn_golden |
生成golden数据:仅执行hccl+mm小算子级联,保存结果到bin文件 |
性能测试场景
| 场景 |
说明 |
performance |
单卡性能测试:分别profiling小算子级联和MC2融合算子,采集内存和耗时数据 |
one_hccl场景(多卡共享通信域)
| 场景 |
说明 |
one_hccl |
one_hccl性能测试:一次初始化HCCL后批量跑多个用例 |
one_hccl_npu |
one_hccl精度测试(单算子模式) |
one_hccl_graph |
one_hccl精度测试(图模式) |
one_hccl_cpu |
one_hccl CPU精度测试 |
one_hccl_dfx |
one_hccl DFX异常测试 |
one_hccl_aclnn_golden |
one_hccl生成golden数据 |
one_hccl_mc2_save_npu |
one_hccl保存npu的golden和mc2输出 |
one_hccl_mc2_save_graph |
one_hccl图模式下保存输出 |
one_hccl_determin |
one_hccl确定性计算测试 |
one_hccl_determin_graph |
one_hccl图模式确定性计算测试 |
DFX与确定性测试
| 场景 |
说明 |
dfx |
DFX异常测试:捕获plog和device日志中的ERROR信息 |
dfx_graph |
DFX异常测试(图模式) |
determin |
确定性计算测试:同一算子执行两次,校验md5一致性 |
determin_graph |
确定性计算测试(图模式) |
典型调用示例
1. 单算子精度测试
torchrun --nproc_per_node=8 mc2_test.py \
--xlsx excel/aclnnMatmulAllReduce.xlsx \
--sheet Sheet1 \
--num 3 \
--scene npu
2. 图模式精度测试
torchrun --nproc_per_node=8 mc2_test.py \
--xlsx excel/aclnnMatmulAllReduce.xlsx \
--sheet Sheet1 \
--num 3 \
--scene graph
3. one_hccl批跑精度
torchrun --nproc_per_node=8 mc2_test.py \
--xlsx excel/aclnnMatmulAllReduce.xlsx \
--sheet Sheet1 \
--num 1 50 \
--scene one_hccl_npu \
--world_size 8
4. 性能测试
torchrun --nproc_per_node=8 mc2_test.py \
--xlsx excel/aclnnMatmulAllReduce.xlsx \
--sheet Sheet1 \
--num 3 \
--scene performance
5. CPU精度测试
torchrun --nproc_per_node=8 mc2_test.py \
--xlsx excel/aclnnMatmulAllReduce.xlsx \
--sheet Sheet1 \
--num 3 \
--scene cpu
6. DFX异常测试
torchrun --nproc_per_node=8 mc2_test.py \
--xlsx excel/aclnnMatmulAllReduce.xlsx \
--sheet Sheet1 \
--num 3 \
--scene dfx
7. 确定性计算测试
torchrun --nproc_per_node=8 mc2_test.py \
--xlsx excel/aclnnMatmulAllReduce.xlsx \
--sheet Sheet1 \
--num 3 \
--scene determin
8. 双通信域(EP+TP)测试
torchrun --nproc_per_node=16 mc2_test.py \
--xlsx excel/aclnnGroupedMatMulAlltoAllv.xlsx \
--sheet Sheet1 \
--num 1 10 \
--scene one_hccl_npu \
--world_size 16 \
--ep 8 \
--tp 2
9. 跨server场景
torchrun --nproc_per_node=8 mc2_test.py \
--xlsx excel/aclnnMatmulAllReduce.xlsx \
--sheet Sheet1 \
--num 1 \
--scene npu \
--server_num 2 \
--server_index 0 \
--dev_num 8 \
--master_ip <server0_ip>
torchrun --nproc_per_node=8 mc2_test.py \
--xlsx excel/aclnnMatmulAllReduce.xlsx \
--sheet Sheet1 \
--num 1 \
--scene npu \
--server_num 2 \
--server_index 1 \
--dev_num 8 \
--master_ip <server0_ip>
10. 生成golden数据(aclnn_golden场景)
torchrun --nproc_per_node=8 mc2_test.py \
--xlsx excel/aclnnMatmulAllReduce.xlsx \
--sheet Sheet1 \
--num 3 \
--scene aclnn_golden
11. 混跑多个算子
torchrun --nproc_per_node=8 mc2_test.py \
--xlsx excel/aclnnMatmulAllReduce.xlsx excel/aclnnMatmulReduceScatter.xlsx \
--sheet Sheet1 \
--num 1 20 \
--scene one_hccl_npu \
--world_size 8
支持的融合算子
通过 op_class/ 下的注册机制,当前支持以下算子:
| 算子名 |
说明 |
aclnnAllGatherMatmul |
AllGather + Matmul 融合 |
aclnnAllGatherMatmulV2 |
AllGather + Matmul V2 |
aclnnAllGatherQuantBatchMatMul |
AllGather + 量化BatchMatMul |
aclnnAlltoAllAllGatherBatchMatMul |
AlltoAll + AllGather + BatchMatMul |
aclnnAlltoAllvGroupedMatMul |
AlltoAllv + GroupedMatMul |
aclnnGroupedMatMulAllReduce |
GroupedMatMul + AllReduce |
aclnnGroupedMatMulAlltoAllv |
GroupedMatMul + AlltoAllv |
aclnnMatmulAllReduce |
Matmul + AllReduce 融合 |
aclnnMatmulAllReduceV2 |
Matmul + AllReduce V2 |
aclnnMatmulReduceScatter |
Matmul + ReduceScatter 融合 |
aclnnMatmulReduceScatterV2 |
Matmul + ReduceScatter V2 |
aclnnQuantMatmulAllReduce |
量化Matmul + AllReduce |
aclnnQuantMatmulAllReduceV2 |
量化Matmul + AllReduce V2 |
aclnnQuantMatmulAllReduceV3 |
量化Matmul + AllReduce V3 |
aclnnQuantMatmulAllReduceV4 |
量化Matmul + AllReduce V4 |
aclnnWeightQuantMatmulAllReduce |
权重量化Matmul + AllReduce |
aclnnQuantReduceScatter |
量化ReduceScatter |
aclnnQuantAllReduce |
量化AllReduce |
测试流程
- 解析Excel用例:从xlsx文件中读取用例参数(shape、dtype、range等)
- 初始化通信:创建HCCL通信域(支持单域和EP/TP双域)
- 生成输入数据:根据参数生成随机tensor
- 构造Golden:通过小算子级联(mm + hccl通信)得到参考结果
- 执行MC2算子:调用融合算子(单算子模式或图模式)
- 精度对比:对比MC2输出与Golden,记录PASS/FAIL到CSV
- 输出结果:结果保存至
{op_name}_result.csv,性能数据保存至 {op_name}_performance_result.csv
输出文件说明
| 文件 |
说明 |
{op_name}_result.csv |
精度测试结果(case_name, rank, PASS/FAIL) |
{op_name}_performance_result.csv |
性能对比结果(内存、耗时、覆盖率) |
dfx_{op_name}_result.csv |
DFX异常日志信息 |
{op_name}_determin.csv |
确定性计算md5对比结果 |
bin_path/{case_name}/ |
各用例的输入/输出bin数据 |
Profiling_Result_* |
Profiling采集数据 |
case_name.csv |
已执行用例名列表 |