mc2_test:基于昇腾NPU与HCCL的融合算子测试项目

可用于华为昇腾NPU上MC2系列融合算子的精度验证、性能对比及DFX异常测试等。支持多场景测试,含精度、性能、DFX与确定性测试,可通过命令行参数灵活控制,覆盖多种融合算子及跨server场景。【此简介由AI生成】

分支1Tags0

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. 单算子精度测试

# 8卡运行,测试 aclnnMatmulAllReduce.xlsx 的 Sheet1 中第3个用例
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场景

# server 0 上执行
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>

# server 1 上执行
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

测试流程

  1. 解析Excel用例:从xlsx文件中读取用例参数(shape、dtype、range等)
  2. 初始化通信:创建HCCL通信域(支持单域和EP/TP双域)
  3. 生成输入数据:根据参数生成随机tensor
  4. 构造Golden:通过小算子级联(mm + hccl通信)得到参考结果
  5. 执行MC2算子:调用融合算子(单算子模式或图模式)
  6. 精度对比:对比MC2输出与Golden,记录PASS/FAIL到CSV
  7. 输出结果:结果保存至 {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 已执行用例名列表

项目介绍

可用于华为昇腾NPU上MC2系列融合算子的精度验证、性能对比及DFX异常测试等。支持多场景测试,含精度、性能、DFX与确定性测试,可通过命令行参数灵活控制,覆盖多种融合算子及跨server场景。【此简介由AI生成】

定制我的领域