已关闭
[Requirement|需求建议]: 支持 Ascend950 FP4/FP8 epilogue 量化 Matmul experimental 样例与测试 #283
Chen_HaoWen创建于  7月1日关闭于  17 天前
Chen_HaoWen成员
7月1日 创建

背景

补齐 Ascend950 上 FP4/FP8 epilogue 量化 Matmul 的样例、CATLASS kernel 能力、optest 覆盖和 Python 调用入口。样例交付在 experimental/matmul/ 分类目录下;使用前按 README 将样例目录拷回 examples/ 并注册 CMake 目标。

交付范围

Ascend950 FP4 MX Quant Matmul

  • 样例目录:experimental/matmul/ascend950_fp4_mx_quant_matmul/。
  • 构建目标:ascend950_fp4_mx_quant_matmul。
  • 测试件:上述目录内的 test_85_ascend950_fp4_mx_quant_matmul.py。
  • A、B 为 float4_e2m1x2_t,MX scale 为 float8_e8m0_t,per-token/per-channel scale 为 float8_e4m3_t,输出为 FP32;独立样例中的 MX scale 固定为 1.0,torch 接口支持分组 MX scale。
  • 在 FP4 MX Matmul 结果上应用 per-token/per-channel epilogue scale,提供数据生成、golden reference、JIT kernel、optest 和 torch_catlass API。

Ascend950 FP8 E4M3 Quant Matmul

  • 样例目录:experimental/matmul/ascend950_fp8_e4m3_quant_matmul/。
  • 构建目标:ascend950_fp8_e4m3_quant_matmul。
  • 测试件:上述目录内的 test_86_ascend950_fp8_e4m3_quant_matmul.py。
  • A、B 和 per-token/per-channel scale 使用 float8_e4m3_t,输出为 FP32,在 epilogue 阶段完成缩放。
  • 提供数据生成、golden reference、JIT kernel、optest 和 torch_catlass API。

目录与编号约定

对象 最终约定
experimental 样例目录、构建目标和可执行文件 去掉 85/86 数字前缀
optest Python 测试件 随样例迁移,保留 test_85_...py、test_86_...py 文件名
tests/optest/kernels/ 内的两个 JIT 目录 保留 85_ascend950_fp4_mx_quant_matmul、86_ascend950_fp8_e4m3_quant_matmul
测试脚本仓的 ATK 目录 保留上述 85/86 名称,每个目录仅 YAML、generator、execute、node.yaml 四件套

examples/CMakeLists.txt 不再默认注册这两个 experimental 样例,tests/test_example.py 中对应的常规样例测试入口已移除。迁移后的 optest 执行命令见各样例 README;文档链接按 experimental 实际位置解析,生成数据及独立样例执行路径按拷回后的 examples/<无编号名称>/ 解析。

框架能力与修复

  • 提供 Ascend950 per-token/per-channel quant epilogue、GEMM kernel 和 pingpong preload TLA block MMAD 等所需能力。
  • epilogue 文件:block_epilogue_per_token_dequant_fp8_regbase_l0c2ub.hpp、block_epilogue_per_token_dequant_fp8_regbase.hpp。
  • 修复输入 storage offset、MX B scale 布局以及 FP8 单行/末尾单行 tile 同步问题,补充异常参数检查和失败返回码。

验收标准

  • 两个样例按 README 拷回 examples 后均可构建、安装、生成数据并运行成功;迁移后的 optest 可执行,保留形状、scale、storage offset、空输入和单行回归覆盖。
  • 仓内 optest 沿用现有 check_quant_result:abs(result - expected) <= (1 / 256) * max(abs(expected), 1),同时检查形状、FP32 输出及有限值。
  • 正式 ATK 精度按已确认的原生 mixed_tolerance_bm: {} 执行,每个算子不少于 200 个常规模型用例,无自定义精度阈值;每个算子 100 个不同形状×均匀/正态两种分布,范围 M≤4097、K≤2048、N≤4096。
  • 内存每个算子不少于 20 例;验证适用的特殊值场景和确定性,保留测试证据及适用范围。
  • 不残留失效的旧 examples 路径及旧 optest 文件路径;源码 PR 与 ATK 后续修正 PR 各保留一个 commit,源码 PR 当前提交流水线通过。

原各 100 例测试及其中 FP4 的逐位一致结果属于此前特定输入集的历史记录;当前 ATK 结论以各 200 例正式报告为准,不将旧输入集的 bit-exact 结果推广为全部场景保证。

当前验证结论

  • 被测源码:2e05d8bb0e1dcebb970df0320b38a4290289e75f,分支 master_migrate,PR #791 保持一个 commit。
  • 2026-09-11,A5 / Ascend950、CANN 9.1.0、ATK 26.9.8、torch 2.10.0、torch_npu 2.10.0:两个样例按 README 拷回后构建运行通过,迁移后的 226 项 optest、1 项单行专用回归和 4 项异常退出检查通过;226 项 optest 和单行回归无跳过。
  • 为本提交重新构建并安装 torch_catlass wheel,FP4 200/200、FP8 200/200 ATK 默认精度通过。生成结果与固定快照逐字节一致,逐例核对正式报告及 CPU/NPU 保存输出。
  • 既有内存各 20/20、确定性各 20 例×3 次、特殊值 FP4 14/14、FP8 12/12 通过。内存验证使用包含原 JIT C++ 模板的独立 ACL 驱动及 mssanitizer;本轮目录迁移未改数值实现,这些专项结果沿用源码 ba2d303a 的实测证据,本轮未重复执行。性能专项不涉及。
  • 常规模型集外的历史长 K 场景有 20 例 ATK 默认超限;独立 AscendC Mmad、整数精确内积及逐组 FP32 参考核查未发现导致该批误差的 CATLASS 实现 bug,dev 等价不作为正确性依据。原始失败输入和诊断保留本地,不计入常规 200 例分母。
  • 当前提交 2e05d8bb 的 PR-pipeline_catlass #3418 全部启用任务通过,包含编译、静态检查和 ARM/IR/lit 测试。
  • ATK 用例已由 PR #83 合入;PR #89 仅修正 4 处源码路径说明,未新增 stress、reports、文档或专项 tools。两个 ATK 目录与本轮实测脚本内容一致。

关联 Pull Request

likedislike
longjihuilongjihui成员
7月2日 将 Chen_HaoWen 设为负责人
longjihuilongjihui成员
7月21日 添加了label:requirement
longjihuilongjihui成员
7月21日 issue类型由 任务 改变为 需求
longjihuilongjihui成员
7月22日 修改标题为 “[Requirement|需求建议]: 支持 Ascend950 FP4/FP8 epilogue 量化 Matmul 示例与测试”,原标题为“【example74、75功能合入】支持 Ascend950 FP4/FP8 epilogue 量化 Matmul 示例与测试”
CChen_HaoWen成员
8月8日 修改了issue 的描述
CChen_HaoWen成员
8月8日 修改了issue 的描述
CChen_HaoWen成员
8月8日 修改了issue 的描述
CChen_HaoWen成员
8月8日 修改了issue 的描述
CChen_HaoWen成员
8月8日 修改了issue 的描述
CChen_HaoWen成员
8月17日 修改了issue 的描述
CChen_HaoWen成员
8月17日 修改了issue 的描述
CChen_HaoWen成员
8月17日 修改了issue 的描述
CChen_HaoWen成员
8月18日 修改了issue 的描述
CChen_HaoWen成员
20 天前 修改了issue 的描述
CChen_HaoWen成员
20 天前 修改了issue 的描述
CChen_HaoWen成员
20 天前 修改标题为 “[Requirement|需求建议]: 支持 Ascend950 FP4/FP8 epilogue 量化 Matmul experimental 样例与测试”,原标题为“[Requirement|需求建议]: 支持 Ascend950 FP4/FP8 epilogue 量化 Matmul 示例与测试”
CChen_HaoWen成员
20 天前 修改了issue 的描述
CANN-robotCANN-robot成员
17 天前 关闭了 issue
CANN-robotCANN-robot成员
17 天前 添加了label:resolved