算子矩阵相关冒烟、功能、回归、性能的不同阶段测试点

一、冒烟测试(Smoke Test)

目标:验证最基础功能是否能跑通,确保版本"不崩",可进入后续测试。

原则:快、准、少 ------ 5~10个用例,10分钟内完成。

冒烟通过标准:7个用例全部通过,无崩溃、无NaN、无维度错误。

|------------------------|----------------------------|-----------------------------------|--------------------------|
| 测试点 | 说明 | 典型参数(示例) | 预期结果 |
| 1. 基础矩阵乘法能执行 | 最简 M=1, K=1, N=1, E=1 | M=1, K=1, N=1, E=1, dtype=fp16 | 程序不崩溃,输出非空 tensor |
| 2. 默认数据类型能运行 | 使用最常用类型(fp16/bf16) | dtype=fp16, quant=0, group_type=0 | 成功输出,数值合理(非NaN/Inf) |
| 3. 非量化模式能跑 | 关闭所有量化 | quant=0, a8w8=0 | 输出与参考实现(如numpy)基本一致 |
| 4. 基础分组(E=2)能处理 | 多专家场景基础验证 | E=2, M=64, K=128, N=128 | 输出维度正确([2,64,128]),无越界 |
| 5. 输入输出dtype匹配 | 输入fp16,输出fp16 | dtype=fp16, out_dtype=fp16 | 无类型转换错误,精度无异常损失 |
| 6. 无转置(trans_flag=0)正常 | 最简单配置 | trans_flag=0 | 计算逻辑正确(A @ B) |
| 7. CSV用例能被加载 | 用你生成的 poc_input_sample.csv | 加载任意一行 | 算子能读取并执行,不报错 |

二、功能测试(Functional Test)

目标 :验证所有功能点是否按需求正确实现 ,覆盖参数组合、边界、异常、数据类型、分组模式等。
原则:全面、有覆盖、可验证。

功能测试通过标准

所有功能点覆盖,无逻辑错误、无崩溃、无维度错误、数值误差在可接受范围(如 fp16 误差≤1e-3)。

1. 数据类型与量化支持

|-------------|------------------------------------|------------------------------------|
| 测试点 | 参数组合 | 验证内容 |
| 支持 fp4 量化 | dtype=fp4, quant=3, K%2==0, N%2==0 | 输入/输出精度是否符合4bit量化规范,反量化后误差可控 |
| 支持 fp8 量化 | dtype=fp8, quant=2/3/4 | 不同量化模式(如E4M3/E5M2)是否生效,scale是否正确应用 |
| 支持 hifloat4 | dtype=hifloat4, quant=6 | 是否启用自定义浮点格式,与fp16对比误差 < 1e-3 |
| 支持 hifloat8 | dtype=hifloat8, quant=2/4 | 与fp16/bf16对比,保留高精度范围 |
| 支持 int8 量化 | dtype=int8, quant=2 | 有无溢出?scale是否合理?反量化后是否可还原? |
| 混合dtype | dtype=fp8, out_dtype=bf16 | 输出类型转换是否正确,无截断或溢出 |

2. 分组与布局(Group & Layout)

|---------------------|--------------------------------------|--------------------------------|
| 测试点 | 参数组合 | 验证内容 |
| group_type=0(M轴分组) | E=4, M=[50,60,70,80], K=128, N=128 | 每组独立计算,输出维度为 [E, Mi, N],总和正确 |
| group_type=2(K轴分组) | E=3, K=[64,128,256], M=64, N=128 | 每组K不同,是否正确拼接?输出是否为 [E, M, N] |
| group_list 非均匀 | group_list=[1,3,2], E=6 | 是否按group_list分组?每组实际E数是否匹配? |
| group_list_type=0/1 | group_list_type=0(累积) vs =1(原始) | 是否按指定方式解析分组?输出是否一致? |
| trans_flag=1/2 | trans_flag=1(B转置)或 =2(A转置) | 矩阵乘法是否正确转置?结果与numpy对齐 |

3. 特殊参数与边界

|-------------|----------------------------|--------------------------|
| 测试点 | 参数组合 | 验证内容 |
| M=1(单token) | M=1, K=4096, N=4096, E=128 | 解码阶段核心场景,是否支持超大E?内存是否爆? |
| K=1(极小维度) | K=1, M=1024, N=1024 | 是否能处理"退化"矩阵?数值是否稳定? |
| N=1(输出为向量) | N=1, E=16 | 输出是否为列向量?是否支持? |
| E=0 | E=0 | 是否安全返回空tensor?不崩溃 |
| 超大E(>100) | E=160, M=64, K=128 | MoE模型极限场景,调度是否正常?显存是否可控? |
| 非对齐K/N(关键!) | K=1811, N=220 | 昇腾NPU对齐敏感,是否自动填充?性能是否骤降? |
| bias=1(支持时) | bias_flag=1, dtype=fp16 | bias是否正确广播加到输出?数值是否对齐? |

4. SwiGLU 与 InplaceAdd 特殊算子

|---------------------|----------------------------|---------------------------|
| 测试点 | 参数组合 | 验证内容 |
| SwiGLU 输出维度 | E=4, M=128, K=2048, N=2048 | 是否先乘后激活?输出是否为 2*N? |
| SwiGLU 量化兼容 | dtype=fp8, quant_mode=1 | 量化后激活函数是否正确?输出精度是否可接受? |
| InplaceAdd 输入输出重叠 | E=2, M=64, K=128, N=128 | 是否真正在原地加?内存地址是否一致?结果是否正确? |
| InplaceAdd 与 GMM 拼接 | 同时调用 GMM + InplaceAdd | 是否能顺序执行?中间结果是否保留? |

5. 异常与容错

|------------------|-------------------------|------------------|
| 测试点 | 输入 | 预期行为 |
| 输入为NaN | A[i] = np.nan | 算子不崩溃,输出含NaN(合理) |
| 输入为Inf | B[j] = np.inf | 不崩溃,输出含Inf |
| scale为0 | scale=0 | 是否导致输出全0?是否合理? |
| group_list长度 ≠ E | group_list=[1,1], E=3 | 是否报错?是否安全忽略? |
| dtype不支持 | dtype="int4" | 是否提示"不支持类型"?不崩溃 |

6.功能测试整理

|-----------------------|---------------------|-----------------------------------|------------------------------------|
| 功能测试 | 测试点 | 参数组合 | 验证内容 |
| 数据类型与量化支持 | 支持fp4量化 | dtype=fp4,quant=3,K%2==0,N%2==0 | 输入/输出精度是否符合4bit量化规范,反量化后误差可控 |
| 数据类型与量化支持 | 支持fp8量化 | dtype=fp8,quant=2/3/4 | 不同量化模式(如E4M3/E5M2)是否生效,scale是否正确应用 |
| 数据类型与量化支持 | 支持hifloat4 | dtype=hifloat4,quant=6 | 是否启用自定义浮点格式,与fp16对比误差<1e-3 |
| 数据类型与量化支持 | 支持hifloat8 | dtype=hifloat8,quant=2/4 | 与fp16/bf16对比,保留高精度范围 |
| 数据类型与量化支持 | 支持int8量化 | dtype=int8,quant=2 | 有无溢出?scale是否合理?反量化后是否可还原? |
| 数据类型与量化支持 | 混合dtype | dtype=fp8,out_dtype=bf16 | 输出类型转换是否正确,无截断或溢出 |
| 分组与布局 | group_type=0(M轴分组) | E=4,M=[50,60,70,80],K=128,N=128 | 每组独立计算,输出维度为 [E,Mi,N],总和正确 |
| 分组与布局 | group_type=2(K轴分组) | E=3,K=[64,128,256],M=64,N=128 | 每组K不同,是否正确拼接?输出是否为 [E,M,N] |
| 分组与布局 | group_list 非均匀 | group_list=[1,3,2],E=6 | 是否按group_list分组?每组实际E数是否匹配? |
| 分组与布局 | group_list_type=0/1 | group_list_type=0(累积)vs =1(原始) | 是否按指定方式解析分组?输出是否一致? |
| 分组与布局 | trans_flag=1/2 | trans_flag=1(B转置)或 =2(A转置) | 矩阵乘法是否正确转置?结果与numpy对齐 |
| 特殊参数与边界 | M=1(单token) | M=1,K=4096,N=4096,E=128 | 解码阶段核心场景,是否支持超大E?内存是否爆? |
| 特殊参数与边界 | K=1(极小维度) | K=1,M=1024,N=1024 | 是否能处理"退化"矩阵?数值是否稳定? |
| 特殊参数与边界 | N=1(输出为向量) | N=1,E=16 | 输出是否为列向量?是否支持? |
| 特殊参数与边界 | E=0 | E=0 | 是否安全返回空tensor?不崩溃 |
| 特殊参数与边界 | 超大E(>100) | E=160,M=64,K=128 | MoE模型极限场景,调度是否正常?显存是否可控? |
| 特殊参数与边界 | 非对齐K/N(关键!) | K=1811,N=220 | 昇腾NPU对齐敏感,是否自动填充?性能是否骤降? |
| 特殊参数与边界 | bias=1(支持时) | bias_flag=1,dtype=fp16 | bias是否正确广播加到输出?数值是否对齐? |
| SwiGLU与InplaceAdd特殊算子 | SwiGLU 输出维度 | E=4,M=128,K=2048,N=2048 | 是否先乘后激活?输出是否为 2*N? |
| SwiGLU与InplaceAdd特殊算子 | SwiGLU 量化兼容 | dtype=fp8,quant_mode=1 | 量化后激活函数是否正确?输出精度是否可接受? |
| SwiGLU与InplaceAdd特殊算子 | InplaceAdd 输入输出重叠 | E=2,M=64,K=128,N=128 | 是否真正在原地加?内存地址是否一致?结果是否正确? |
| SwiGLU与InplaceAdd特殊算子 | InplaceAdd 与GMM拼接 | 同时调用GMM+InplaceAdd | 是否能顺序执行?中间结果是否保留? |
| 异常与容错 | 输入为NaN | A[i]=np.nan | 算子不崩溃,输出含NaN(合理) |
| 异常与容错 | 输入为Inf | B[j]=np.inf | 不崩溃,输出含Inf |
| 异常与容错 | scale为0 | scale=0 | 是否导致输出全0?是否合理? |
| 异常与容错 | group_list长度≠E | group_list=[1,1],E=3 | 是否报错?是否安全忽略? |
| 异常与容错 | dtype不支持 | dtype="int4" | 是否提示"不支持类型"?不崩溃 |

三、回归测试(Regression Test)

目标 :验证新版本是否破坏了旧功能 ,确保"修一个bug,不引入十个新bug"。
原则:自动化、全量、可复现。

回归测试通过标准
100% 历史用例通过,新版本输出与旧版本差异在允许范围内,无新增回归缺陷。

|-----------------|------------------------------------------------------|
| 测试点 | 说明 |
| 1. 历史用例全量回归 | 使用过去已验证通过的 500+ 个CSV用例(来自上一版本),全部重新跑一遍 |
| 2. 关键模型复现 | 用真实模型参数(如 Llama3-8B 的 FFN 层)生成用例,对比历史输出 |
| 3. 修复缺陷的再验证 | 针对上一版本已修复的Bug(如:hifloat4 + trans_flag=2 导致输出错位),重新测试 |
| 4. 多版本对比 | 用同一组输入,在 v1.0、v1.1、v1.2 三个版本上跑,输出差异 < 1e-5 |
| 5. 环境一致性验证 | 在不同CANN版本(7.0 vs 7.1)、不同芯片(910B vs 910C)上,输出是否一致? |
| 6. 与参考实现比对 | 用 numpy / PyTorch 实现相同逻辑,对比输出(允许小误差) |

四、性能测试(Performance Test)

目标 :评估算子在真实负载下的吞吐、延迟、显存占用、资源利用率
原则:量化指标、压测、对比基线。

性能测试通过标准

所有指标 优于或等于基线版本非对齐性能衰减可控量化加速比达标无显存泄漏或资源竞争

|------------------------|------------------------------------------|----------------------------------|--------------------------------------|
| 测试点 | 测试方法 | 指标 | 目标 |
| 1. 吞吐量(Throughput) | 固定 M=1024, K=4096, N=4096, E=8,循环执行1000次 | Tokens/sec 或 GFLOPS | ≥ 基线版本 1.2x(如从 500 → 600 tokens/sec) |
| 2. 延迟(Latency) | 单次执行时间(ms) | 平均延迟、P99延迟 | P99 ≤ 5ms(解码场景) |
| 3. 显存占用 | 使用 nvidia-smi 或 ascend-dmi 监控 | 峰值显存(MB) | 不高于参考实现 10% |
| 4. 非对齐性能衰减 | 对比 K=2048(对齐) vs K=2049(非对齐) | 性能下降比例 | ≤ 15%(昇腾NPU对齐敏感,目标是控制衰减) |
| 5. 大E扩展性 | E=16, 32, 64, 128, 160,固定 M=64, K=128 | 吞吐随E增长曲线 | 是否线性扩展?是否出现调度瓶颈? |
| 6. 多流并发 | 同时启动 4 个算子实例 | 总吞吐是否叠加 | 是否支持多流并行?有无锁竞争? |
| 7. 量化加速比 | fp16 vs fp8 vs fp4 | 加速比 = fp16_time / quant_time | fp8 ≥ 1.5x,fp4 ≥ 2.0x |
| 8. 内存带宽利用率 | 使用 Profiler(如 CANN Profiler) | DDR带宽利用率 % | ≥ 70%(说明未被计算瓶颈卡住) |
| 9. CPU/GPU 占用 | 监控Host端CPU占用 | CPU占用率 % | ≤ 10%(避免Host成为瓶颈) |

五.不同维度张量范围映射表

|--------|-------------------------|---------------------------------|-----------------------------------------------------------------------|------------------------------|
| 维度 | 形状特征 | 可能语义 | 推测数值范围 | 关键判断依据 |
| 1D | (N,) 或 (1,N) | 序列、tokenID、概率、mask、嵌入向量 | [0,1](概率) {0,1}(mask) [0,N-1](tokenID) [-1,1](embedding) | 是否经过softmax? 是否为整数? 是否是mask? |
| 2D | (H,W) 或 (N,C) | 空间图(如特征图、mask)、类别分布、embedding矩阵 | [0,1](归一化特征图) {0,1}(binarymask) [0,255](原始像素) [-1,1](embedding) | 是否为图像相关? 是否是注意力图? |
| 3D | (H,W,C) 或 (N,H,W) | 特征图、图像块、时间序列特征 | [0,1](归一化) [0,255](原始) [-1,1](经过tanh) [0,∞)(ReLU激活) | 是否是CNN输出? 是否经过BN? 是否是注意力权重? |
| 4D | (B,C,H,W) 或 (B,N,H,W) | 批量图像、批量特征图、多头注意力输出 | [0,1](归一化) [0,255](原始) [-1,1](embedding) [0,∞)(ReLU) | 是否是输入或中间特征? 是否是注意力头输出? |
| 5D | (B,T,H,W,C) 或 (B,N,N,C) | 3D视频帧、图神经网络特征、多尺度特征 | [0,1](归一化) [0,255](原始) [-1,1](embedding) | 是否是视频或图数据? 是否是多头注意力? |

整理不易,诚望各位看官点赞 收藏 评论 予以支持,这将成为我持续更新的动力源泉。若您在阅览时存有异议或建议,敬请留言指正批评,让我们携手共同学习,共同进取,吾辈自当相互勉励!

相关推荐
短视频矩阵源码定制19 小时前
矩阵系统源头厂家
大数据·人工智能·矩阵
短视频矩阵源码定制21 小时前
好用的矩阵系统机构
大数据·人工智能·矩阵
短视频矩阵源码定制21 小时前
专业的矩阵系统哪个公司好
大数据·人工智能·矩阵
AI科技星1 天前
张祥前统一场论电荷定义方程分析报告
开发语言·经验分享·线性代数·算法·数学建模
Nox聚星.1 天前
海外网红营销的下一次进化:2026纳米网红矩阵与品牌韧性建设
矩阵·品牌出海·海外网红营销
Tisfy1 天前
LeetCode 756.金字塔转换矩阵:深度优先搜索
leetcode·矩阵·深度优先
闻缺陷则喜何志丹1 天前
【2025博客之星】求职总结
线性代数·数学·计算几何·objectarx·cad·高度数学
LeonIter1 天前
用回归分析为短剧APP“号脉”:我们如何找到留存的关键驱动力与产品迭代优先级?
人工智能·数据挖掘·回归
F_D_Z2 天前
岭回归(Ridge Regression)辨析
回归·kotlin·l2正则