已关闭
[RFC]: PTA 层Matmul Checksum校验加速(V-ABFT 算子接入) #4730
wuyouqi1创建于 17 天前关闭于 11 天前
17 天前 添加了label:rfc
17 天前 添加了label:triage-review
TorchNPU-Bot
17 天前 评论:
17 天前 评论:
issue待分派,添加triage-review标签


17 天前 修改了issue 的描述
17 天前 修改标题为 “[RFC]: PTA 层Matmul Checksum校验加速(V-ABFT 算子接入)”,原标题为“[RFC]: ”
17 天前 将 wuyouqi1 设为负责人
17 天前 关联了里程碑:v26.2.0
17 天前 添加了label:bot-triaged
TorchNPU-Bot
17 天前 评论:
17 天前 评论:
检测到当前 issue 已关联 PR,自动添加标签:bot-triaged


11 天前 关闭了 issue
11 天前 issue状态由 TODO 改变为 DONE
11 天前 添加了label:resolved
11 天前 关联了pull request:[sync] PR-38861: feat(asd): dispatch matmul_checksum to V-ABFT op and extend dtype support to bf16/fp32
11 天前 关联了pull request:[sync] PR-38861: feat(asd): dispatch matmul_checksum to V-ABFT op and extend dtype support to bf16/fp32
11 天前 关联了pull request:[sync] PR-38861: feat(asd): dispatch matmul_checksum to V-ABFT op and extend dtype support to bf16/fp32
11 天前 关联了pull request:[sync] PR-38861: feat(asd): dispatch matmul_checksum to V-ABFT op and extend dtype support to bf16/fp32
11 天前 关联了pull request:[sync] PR-38861: feat(asd): dispatch matmul_checksum to V-ABFT op and extend dtype support to bf16/fp32
11 天前 关联了pull request:[sync] PR-38861: feat(asd): dispatch matmul_checksum to V-ABFT op and extend dtype support to bf16/fp32
11 天前 关联了pull request:[sync] PR-38861: feat(asd): dispatch matmul_checksum to V-ABFT op and extend dtype support to bf16/fp32
11 天前 关联了pull request:[sync] PR-38861: feat(asd): dispatch matmul_checksum to V-ABFT op and extend dtype support to bf16/fp32
11 天前 关联了pull request:[sync] PR-38861: feat(asd): dispatch matmul_checksum to V-ABFT op and extend dtype support to bf16/fp32
11 天前 关联了pull request:[sync] PR-38861: feat(asd): dispatch matmul_checksum to V-ABFT op and extend dtype support to bf16/fp32
状态(Status): Draft
作者(Authors): @wuyouqi1
创建日期(Created): 2026-09-10
更新日期(Updated): 2026-09-10
相关 Issue/PR: Ascend/op-plugin MR !5853(算子接入);Ascend/pytorch MR !38861(ASD 分发改造)
1. 概述
1.1 简介
本提案在 torch_npu(PTA)层接入基于 V-ABFT(方差估计自适应门限) 的 GEMM 容错校验算子
_npu_matmul_abft_verify(aclnn 层为aclnnMatmulAbftVerify),替代torch_npu.matmul_checksum现有的纯 PyTorch 校验实现。对外接口torch_npu.matmul_checksum(a, b, c) -> bool的签名、返回值与 ASD 自动触发链保持完全不变;内部按"算子可用性 + 输入契约"两级分发:满足条件走 V-ABFT 算子路径,否则自动回退原纯 PyTorch 路径,stock CANN 环境零感知。核心价值:将 matmul 静默数据损坏(SDC)校验从"经验阈值 + 行和重算"升级为"方差自适应阈值 + 分块校验和位流",在实测中实现误检率 0、检出率 100%、大中规模 shape 开销从 ~600-880% 降至 ~16-47%。
1.2 动机
大模型长稳训练中,硬件级 SDC(静默数据损坏,如粒子翻转导致的计算错误)不报错、不崩溃,只会悄悄污染 checkpoint。ASD(Ascend Silent Detection)框架通过
NPU_ASD_CONFIG=enable:true,with_checksum:true在梯度异常后对后续 matmul 附加校验,当前实现存在三个痛点:5×累积舍入误差经验阈值,且阈值由 C(待校验结果)自身统计推导——C 被污染时阈值跟着偏移。多模态模型特定激活分布下频繁误检,训练被迫中断。CANN 侧已交付 V-ABFT 算子(方差自适应阈值由 A、B 局部统计估计,不依赖 C;方阵规模下校验计算量 8a² vs 重算 2a³),本提案完成其 PTA 层接入。
1.3 目标
目标
torch_npu.matmul_checksum对外契约零变更;算子符号缺失环境自动回退,行为不劣于现状非目标(边界)
asd.pyhook / TCP 状态机 /NPU_ASD_CONFIG语义)2. 用例分析
场景:LLM 训练中的 matmul SDC 检测
torch_npu.matmul_checksum(a, b, c)comp_row位流;API 层归约为单 bool3. 方案设计
3.1 总体方案
入口与返回契约不变,内部改为两级分发(torch_npu 侧改动收敛在
torch_npu/asd/checksum.py单文件):算子路径语义桥接:
c.to(torch.float32):真实 matmul 输出转型满足算子契约checksum_weight= 全 1 向量(对应普通分块行校验和),按(N, dtype, device)缓存e_max按 dtype 取推荐值(bf16=0.001,fp32=2e-5)a/b/c .contiguous():容忍非连续输入(如转置权重)comp_row布局为byte[seg*ceil(M/8)+rg]、bit=r%8 LSB-first(seg-major);M%8≠0 时 padding bit 取值未定义,必须以缓存掩码屏蔽后判!=255,否则误检op-plugin 侧(MR !5853):YAML 注册(
custom段,op_api: all_version,内部算子不 exposed)+ C++ 内核(fail-fast TORCH_CHECK +EXEC_NPU_CMD运行期 dlsym)+ meta kernel(FakeTensor shape 推断)+ UT/FakeTensor 测试。前置条件说明:算子符号
aclnnMatmulAbftVerify当前由 CANN 9.2.0+ 的 vendors 算子包提供(libcust_opapi.so);stock CANN 主线libopapi.so暂不含该符号——这正是回退机制存在的原因。3.2 技术选型
DO_COMPATIBILITY+ 哨兵返回阈值算法选型:V-ABFT 方差自适应(由 A、B 局部统计估计,不依赖 C)替代原
5×error_total经验公式(由 C 统计推导,C 被污染时阈值跟着偏)——这是误检归零的根因。3.3 功能与性能设计
与原实现的行为差异(对直接调用方可见)
性能实测(Atlas A2 / 910B2,CANN 9.2.0 + vendors 包,中位数计时):
瓶颈定位:算子本体存在 ~0.2-0.3ms 近固定开销(executor/tiling/16MiB workspace/launch + B 全量读取),M 从 128→4096 几乎不变。验收 shape 集(M≤64 decode 微批,matmul 本身仅 ~0.1ms)在该固定开销下结构性不可达(平均 BF16 309.5% / FP32 186.2%);FP32 在 prefill 规模(M≥1024)已达标。
3.4 安全隐私与DFX设计
torch_npu.matmul_checksum契约零变更(签名/返回/懒加载导出/ASD hook 全不动)_npu_matmul_abft_verify前缀下划线,不进torch_npu.__all__、不暴露公开别名),避免公开 API 兼容性承诺3.5 编程与调用设计
3.5.1 编程模型基本设计
aclnnMatmulAbftVerify符号);PyTorch 2.1+ / torch_npu 配套版本3.5.2 接口定义与设计
公开 API 契约不变,详见官方文档
torch_npu.matmul_checksum。内部算子定义如下(不对外暴露,仅供算子开发者参考)。3.5.2.1
torch_npu._npu_matmul_abft_verify(内部算子)接口描述:V-ABFT GEMM 容错校验。接收矩阵 A、B 与预计算的 matmul 结果 C,做分块行校验和校验,输出行级检错位流。
接口原型:
torch_npu._npu_matmul_abft_verify(a, b, c, checksum_weight, *, e_max=0.001) -> Tensor输入/输出参数:
npu_matmul_abft_verify公开名评审,按社区意见改为内部算子(_前缀 + 不 exposed),对外统一走torch_npu.matmul_checksumimport torch import torch_npu a = torch.randn(64, 128, dtype=torch.bfloat16, device="npu") b = torch.randn(128, 256, dtype=torch.bfloat16, device="npu") c = torch.matmul(a, b) # 待校验的 matmul 结果 # 推荐用法:公开 API(自动分发 + 自动回退) flag = torch_npu.matmul_checksum(a, b, c) # bool 标量张量,True = 检出异常3.5.3 编程手册设计
在既有
docs/zh/custom_APIs/torch_npu/torch_npu-matmul_checksum.md中补充:V-ABFT 路径生效条件(CANN ≥ 9.2.0 + vendors 包)、回退行为说明、性能适用规模建议(M≥512 走算子路径收益显著)、NPU_ASD_CONFIG联动的 dtype 支持说明(bf16/fp32)。内部算子不出公开文档。4. 测试设计
test_npu_matmul_abft_verify.pytest_fake_tensor.pytest_dispatch_abft.pytest_false_positive.pytest_detection_rate.pytest_performance.py+scaling_bench.py/profile_checksum.py断言设计要点:利用位流语义做与 bit 序无关的断言——正确 C → 完整字节全 255;破坏行 → 对应字节全 0;padding 字节仅断言有效位(取值未定义);参考 C 由 float64 金标准矩阵乘生成,避免参考值自身舍入误差造成假失败。
5. 缺点和风险
6. 现有技术
7. 未解决问题
asd.py)的 dtype 门控从 bf16 集合扩至 {bf16, fp32} 的收尾改动是否随本 MR 合入(当前 FP32 需手动调用 API 保护)。aclnnMatmulAbftVerify是否/何时从 vendors 包进入主线libopapi.so(影响默认环境的算子路径命中率)。附录
NPU_ASD_CONFIG)torch_npu.matmul_checksumAPI 文档:补充 V-ABFT 路径生效条件与回退说明(随 MR !38861)NPU_ASD_CONFIG环境变量文档:checksum 联动 dtype 支持说明更新(bf16 → bf16/fp32)欢迎加入社区,感谢您对社区的贡献 🎉!