本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
kirin smoke任务新增增量执行用例功能 Co-authored-by: weixin_46515057<lidaoshuai@h-partners.com> # message auto-generated for no-merge-commit merge: !12823 merge master into master kirin smoke任务新增增量执行用例功能 Created-by: weixin_46515057 Commit-by: weixin_46515057 Merged-by: cann-robot Description: kirin smoke任务新增增量执行用例功能 See merge request: cann/ops-transformer!12823 | 2 天前 | |
refactor(compressor_grad): 形参加前缀换名消除参数镜像重复 Co-authored-by: myy268<moyunyang@huawei.com> # message auto-generated for no-merge-commit merge: !12871 merge cpg_cleancode into master refactor(compressor_grad): 形参加前缀换名消除参数镜像重复 Created-by: myy268 Commit-by: myy268 Merged-by: cann-robot Description: ## 描述 本 PR 对 compressor_grad 的 PyPTO kernel(op_kernel/compressor_grad.py)做 cleancode 整改: 1. 回退 PR #12106 中 compressor_grad.py 的 pl.make_tuple 用法(pypto 新特性,与旧 CANN 包不兼容) 2. 对 24 个透传参数函数形参加独特前缀(如 dx_/dw_/m2c_),打破形参列表与调用实参列表的文本镜像重复 3. 重复代码(≥10 行块):68 块/750 行 → 12 块/186 行 仅重构与清理,算子逻辑、计算顺序与数值结果不变。 ## 关联的Issue 关联 Issue #5645 ## 测试 ## 文档更新 无 ## 类型标签 - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [x] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!12871 | 1 天前 | |
mc2 fusion pass from canndev to transformer Co-authored-by: chenyifan<chenyifan66@h-partners.com> # message auto-generated for no-merge-commit merge: !10939 merge fusion into master mc2 fusion pass from canndev to transformer Created-by: mutex_lock Commit-by: chenyifan Merged-by: cann-robot Description: ## 描述 将 canndev 中 MC2 相关 Graph Fusion Pass 迁移到 ops-transformer,基于 ES PatternFusionPass(Patterns → MeetRequirements → Replacement)实现,融合效果对齐 canndev。 对应提交:fc69a3629(mc2 a5 fusion pass from canndev to transformer)。 ### 背景与目标 - **来源**:canndev ops/built-in/fusion_pass/graph_fusion/ai_core/ - **目标框架**:ops-transformer ES Graph Fusion(REG_FUSION_PASS + Pattern 构图) - **编译门禁**:GRAPH_FUSION_SUPPORT_VERSION=90000000(ge_compiler 版本不足则拒融) - **平台常量**(mc2/common/utils/mc2_platform_info.h): | 常量 | NpuArch | 用途 | |---|---|---| | NPUARCH_A5 | DAV_3510 | 多数 Transpose A5 Pass | | NPUARCH_310P | DAV_2002 | **本提交新增**;MatmulAllReduceTransposeFusionPass 排除 310P | ### 本次迁入清单 | # | Pass 类名 | 路径(简) | 平台 | 融合目标 | |---|---|---|---|---| | 1 | AllToAllMatmulTransposeA5FusionPass | allto_all_matmul/... | A5 | 吸 x2 上 Transpose(±Bitcast) | | 2 | MatmulAllToAllTransposeA5FusionPass | matmul_allto_all/... | A5 | 同上(attr 行为不同;本提交重构既有实现) | | 3 | AllGatherMatmulV2TransposeA5FusionPass | all_gather_matmul_v2/... | A5 | 吸 x2[/x2_scale] Transpose(±Bitcast) | | 4 | MatmulReduceScatterV2TransposeA5FusionPass | matmul_reduce_scatter_v2/... | A5 | 同上 | | 5 | MatmulAllReduceTransposeA5FusionPass | matmul_all_reduce/... | A5 | 吸 x2/antiquant/dequant Transpose(dequant±Bitcast) | | 6 | MatmulAllReduceTransposeFusionPass | matmul_all_reduce/... | 非310P | 吸 x2/antiquant Transpose;覆盖 MAR/ARN/InplaceARN | | 7 | AlltoAllvQuantGroupedMatMulTransposeFusionPass | allto_allv_quant_grouped_mat_mul/... | A5 | 吸 gmm/mm weight[/scale] Transpose | | 8 | QuantGroupedMatMulAlltoAllvTransposeFusionPass | quant_grouped_mat_mul_allto_allv/... | A5 | 同上(attr 置 true) | ### 本批明确不下迁 | 项 | 说明 | |---|---| | MatmulAllReduceTransposeFusion310PPass | 不下迁;base Pass 对 310P 直接拒融 | | MatmulAllReduceAddRmsNormFusionPass | 不下迁; | | AddRmsNorm / InplaceAddRmsNorm 打桩(es_nn) | 不下迁;stub 仅保留 math | ### 附带改动 - **构建门禁**(cmake/obj_func.cmake):仅 ENABLE_BUILT_IN 时 GLOB 并编译 fusion_pass/*fusion_pass*.cpp;自定义包 / 分组 kernel 构建不编 fusion(仍收集 *_proto*.h 供 updateproto / ES) - **外部算子 stub**:common/stub/op_graph/math_proto_stub.cpp 提供 Transpose / Bitcast(proto_math → es_math);CMake 改为只编该文件(不再 GLOB) - 删除 mc2/matmul_allto_all/op_graph/transpose_d_proto.h;pattern **统一走 Transpose**(不再枚举 TransposeD) - Replacement 统一 return replaceGraph;(去掉 std::move,避免 NRVO 告警) - ES 依赖:除 #6 外各 Pass 仅依赖**本算子** es_Xxx + es_math;#6 额外依赖本仓 es_MatmulAllReduceAddRmsNorm / es_InplaceMatmulAllReduceAddRmsNorm(故分组只编 MAR 时若强行编 fusion 会缺头——由 built-in 门禁规避) --- ## Patterns / Meet / Replace 详细特性 > 通用约定:T = Transpose(perm 从 const 输入读,int32/int64)。本批 **不再** 枚举 TransposeD。 ### 1. AllToAllMatmulTransposeA5FusionPass **拓扑**:x2 → T → [Bitcast?] → AlltoAllMatmul.x2;x1 / x1_scale / x2_scale 直连;bias 可选。 | 阶段 | 详细内容 | |---|---| | **Patterns** | MX:x1_scale/x2_scale **固定进 pattern**;comm_scale / x1_offset / x2_offset 固定 nullptr。输出 {y, all2all_out}。Capture:0=MC2,1=Transpose。组合:hasBias × hasBitcast → **4 种**。Bitcast dtype 占位 DT_HIFLOAT8。 | | **Meet** | ① ge_compiler ≥ 9.0;② NPUARCH_A5;③ x1_quant_mode == x2_quant_mode == 6(MX);④ x2 perm size∈{2,3},**最后两维互换**(2D [1,0] / 3D [0,2,1]);⑤ subgraph 输入数 = 4(无 bias)或 5(有 bias)。 | | **Replace** | 吸掉 x2 上 Transpose;若有 Bitcast 则**保留**(dtype 取原 MC2 x2 输入 desc,失败回退 HIFLOAT8)。新建 AlltoAllMatmul,拷贝 group/world_size/all2all_axes/y_dtype/x1\|x2\|comm_quant_mode/x1_quant_dtype/comm_quant_dtype/transpose_x1/group_size/comm_mode/alltoall_out_flag。**transpose_x2 强制 true**(MX tiling 要求)。输出 {y, all2all_out} + InferShape。 | ### 2. MatmulAllToAllTransposeA5FusionPass **拓扑**:与 #1 同构,算子为 MatmulAlltoAll;单输出。 | 阶段 | 详细内容 | |---|---| | **Patterns** | x2 → T → [Bitcast?] → MatmulAlltoAll.x2;MX scale 固定进图;comm/offset 不进。组合:**4 种**(bias × Bitcast)。输出 {mc2}。 | | **Meet** | 与 #1 相同:版本 / A5 / MX(==6) / perm 末两维互换 / 输入数 4 或 5。 | | **Replace** | 吸 Transpose,可选保留 Bitcast(逻辑同 #1)。拷贝 group/world_size/all2all_axes/y_dtype/x1\|x2\|comm_quant_mode/comm_quant_dtype/transpose_x1/group_size/comm_mode(无 x1_quant_dtype、alltoall_out_flag)。**关键差异**:transpose_x2 = !transpose_x2(**flip**,非 set-true)。 | ### 3. AllGatherMatmulV2TransposeA5FusionPass **拓扑**:x2 必有 T(±Bitcast);可选 bias;可选成对 x1_scale/x2_scale,且 x2_scale 可再挂 T(±Bitcast)。 | 阶段 | 详细内容 | |---|---| | **Patterns** | quant_scale 恒 nullptr。输出 {y, gather_out, amax_out}。Capture:0=MC2,1=x2T,若有 x2_scale T 则 2=x2ScaleT。组合:**16 种**——仅 x2 T:hasBias×hasScale×x2Bitcast=8;双 T:hasBias×x2Bitcast×x2ScaleBitcast=8(双 T 时强制 hasScale)。 | | **Meet** | ① 版本;② A5;③ **x2 perm**:size∈{2,3},末两维互换;④ **x2_scale perm**(若有):size≥2 且前两维 [1,0];⑤ 有 scale 但无 x2_scale T 时,若 x2_scale dim>1 → **拒融**;⑥ 输入数 2/3/4/5(无 bias+无 scale / bias / scale / bias+scale)。 | | **Replace** | 吸 x2(及可选 x2_scale)Transpose;对应 Bitcast **保留**。拷贝 group/is_trans_a/gather_index/comm_turn/rank_size/block_size/group_size/is_gather_out/is_amax_out/y_dtype/comm_mode。**is_trans_b = !is_trans_b**(仅因吸 x2 T 而 flip,scale 不改 attr)。输出三路 + InferShape。 | ### 4. MatmulReduceScatterV2TransposeA5FusionPass **拓扑**:与 #3 同构(bias / scale / x2_scale T / Bitcast),算子 MatmulReduceScatterV2。 | 阶段 | 详细内容 | |---|---| | **Patterns** | 输出 {y, amax_out}(无 gather_out)。组合 **16 种**,规则同 #3。 | | **Meet** | 与 #3 相同:版本 / A5 / 双路 perm / x2_scale dim>1 须有 T / 输入个数。 | | **Replace** | 吸 T、保留 Bitcast;**is_trans_b flip**。额外拷贝 reduce_op;无 gather_index / is_gather_out。输出 {y, amax_out}。 | ### 5. MatmulAllReduceTransposeA5FusionPass **拓扑**:x2 必挂 T(**无 Bitcast**);可选 bias / antiquant_scale / antiquant_offset / dequant_scale;scale/offset 可挂 T;**仅 dequant 支持 T→Bitcast→MC2**。 | 阶段 | 详细内容 | |---|---| | **Patterns** | x3/pertoken/comm_quant 固定 nullptr。Capture:0=MC2,其后按 **x2 → scaleT → offsetT → dequantT** 追加。合法约束下 **72 种**(bias×scale×offset×dequant × 条件化的 scaleT/offsetT/dequantT/dequantBitcast)。 | | **Meet** | ① 版本;② A5;③ 输入数匹配;④ **x2/scale/offset perm**:size∈{2,3},末两维互换;⑤ **dequant perm**:size∈{2,3},且 **前两维 [1,0]**;⑥ antiquant:scale dim>1 时,有 scale 必须有 ScaleT,有 offset 必须有 OffsetT(门控用 scale 的 dim);⑦ dequant dim>1 且无 DequantT → 拒。 | | **Replace** | 吸各口 Transpose;仅 dequant Bitcast 可保留。拷贝 group/reduce_op/is_trans_a/comm_turn/antiquant_group_size/group_size/y_dtype/comm_quant_mode/comm_mode。**is_trans_b flip**。单输出 {y}。 | ### 6. MatmulAllReduceTransposeFusionPass **说明**:非 A5 通用 Transpose 吸收;**拒绝 NPUARCH_310P**(310P 专用 Pass 本批不下迁)。 | 阶段 | 详细内容 | |---|---| | **Patterns** | 覆盖三种算子:MatmulAllReduce / MatmulAllReduceAddRmsNorm / InplaceMatmulAllReduceAddRmsNorm。x2 必挂 T;可选 bias、scale、offset、**dequant(仅拓扑匹配,不吸 dequant T)**;scale/offset 可挂 T;**无 Bitcast、无 dequant Transpose**。ARN 类额外必选 residual/gamma。输出:Mar→{y};Arn→{y, norm_out};InplaceArn→{ref_residual, norm_out}。组合 **108 种**(3 opKind × bias/scale/offset/dequant × 条件化 scaleT/offsetT)。 | | **Meet** | ① 版本;② **拒绝 NPUARCH_310P**;③ 输入数匹配;④ 所有 Capture 到的 T:perm 末两维互换(size 2/3);⑤ antiquant dim>1:须对应 ScaleT/OffsetT(ARN 用 K_SCALE 索引,Mar 用 Mar 索引);⑥ dequant 是否存在须与 pattern 一致(直连透传,不吸 T)。 | | **Replace** | 吸 x2/scale/offset 上 Transpose;dequant **原样透传**(不吸 T)。**is_trans_b flip 一次**。Mar:拷贝完整 MAR attr(含 group_size/y_dtype/comm_quant_mode/comm_mode)。Arn/InplaceArn:从 MC2 读 group/reduce_op/is_trans_*/comm_turn/antiquant_group_size,从节点读 epsilon(缺省 1e-6);输出分别为 {y,norm_out} / {ref_residual,norm_out}。 | ### 7. AlltoAllvQuantGroupedMatMulTransposeFusionPass **拓扑**:必选 gmm_x/gmm_weight/gmm_x_scale/gmm_weight_scale;可选整组 mm 四路(HasMm)。四口可挂 T(**至少一路**):gmm_weight / gmm_weight_scale / mm_weight / mm_weight_scale;各口可 T→Bitcast。 | 阶段 | 详细内容 | |---|---| | **Patterns** | send/recv_counts_tensor 不进 pattern。输出 {gmm_y, mm_y, permute_out}。Capture:0=MC2,其后按 gmm_w→gmm_ws→mm_w→mm_ws 追加存在的 T。合法组合 **88 种**(hasMm × 四路 T × Bitcast;无 mm 时禁 mm 侧 T;Bitcast 仅当该口有 T 时可开;至少一路 T)。 | | **Meet** | ① 版本;② A5;③ 输入数 4 或 8;④ **weight(gmm/mm)perm**:size∈{2,3,4},末两维互换;⑤ **gmm_weight_scale perm**:size≥3,且 perm[1]==2 && perm[2]==1;⑥ **mm_weight_scale perm**:size≥2,且前两维 [1,0]。 | | **Replace** | 吸对应口 Transpose,Bitcast 保留(IR 口:1/3/7/9)。拷贝 group/ep_world_size/send_counts/recv_counts/gmm_*_quant_mode/permute_out_flag/mm_*_quant_mode/group_size/y_dtype/mm_dtype/comm_mode。有对应 Weight T 时 **trans_gmm_weight / trans_mm_weight flip(!)**;scale 口不改 attr。输出三路。 | ### 8. QuantGroupedMatMulAlltoAllvTransposeFusionPass **拓扑**:与 #7 几乎相同;算子 QuantGroupedMatMulAlltoAllv;send/recv/comm_quant_scale 固定 nullptr。 | 阶段 | 详细内容 | |---|---| | **Patterns** | 输出 {y, mm_y}(**无 permute_out**)。组合数同 **88**。 | | **Meet** | 与 #7 相同:版本 / A5 / 输入数 / 三类 perm 规则。 | | **Replace** | 吸 T、保留 Bitcast;拷贝含 comm_quant_mode/comm_quant_dtype 等(无 permute_out_flag)。**关键差异 vs #7**:有 gmm/mm weight T 时,**trans_gmm_weight/trans_mm_weight 强制 = true(set true,非 flip)**。输出 {y, mm_y}。 | --- ### 总览对照表 | Pass | Patterns 要点 | Meet 要点 | Replace 要点 / Attr 行为 | |---|---|---|---| | AllToAllMatmul T-A5 | x2 T±Bitcast × bias;MX scale 固定;4 种 | A5 + MX(=6) + perm 末两维 | 吸 T 留 Bitcast;**transpose_x2=true** | | MatmulAllToAll T-A5 | 同上;4 种 | 同左 | 吸 T 留 Bitcast;**transpose_x2 flip** | | AGMMV2 T-A5 | x2[/scale] T±Bitcast × bias;16 种 | A5;分口 perm;scale dim 门控 | 留 Bitcast;**is_trans_b flip** | | MRSV2 T-A5 | 同 AGMMV2;输出无 gather | 同 AGMMV2 | 同 AGMMV2 + 拷 reduce_op | | MAR T-A5 | x2+antiquant+dequant(±Bitcast);72 种 | A5;分口 perm;dim>1 门控 | 吸 T;dequant 可留 Bitcast;**flip is_trans_b** | | MAR T(非310P) | MAR/ARN/Inplace;x2+antiquant;108 种 | 拒 310P;perm;dim 门控;不吸 dequant T | 吸 T;dequant 透传;**flip is_trans_b** | | AlltoAllvQuantGMM T | hasMm × 四路 weight/scale T±Bitcast;88 种 | A5;三类分口 perm | **flip** trans_gmm/mm_weight | | QuantGMMAlltoAllv T | 同上;无 permute_out | 同上 | **set true** trans_gmm/mm_weight | ### 易混对照(迁移对齐要点) | 对比项 | 差异 | |---|---| | All2AllMM vs MatmulAll2All | transpose_x2:**set true** vs **flip** | | AlltoAllvQuantGMM vs QuantGMM-AlltoAllv | weight tran See merge request: cann/ops-transformer!10939 | 3 天前 | |
mc2 fusion pass from canndev to transformer Co-authored-by: chenyifan<chenyifan66@h-partners.com> # message auto-generated for no-merge-commit merge: !10939 merge fusion into master mc2 fusion pass from canndev to transformer Created-by: mutex_lock Commit-by: chenyifan Merged-by: cann-robot Description: ## 描述 将 canndev 中 MC2 相关 Graph Fusion Pass 迁移到 ops-transformer,基于 ES PatternFusionPass(Patterns → MeetRequirements → Replacement)实现,融合效果对齐 canndev。 对应提交:fc69a3629(mc2 a5 fusion pass from canndev to transformer)。 ### 背景与目标 - **来源**:canndev ops/built-in/fusion_pass/graph_fusion/ai_core/ - **目标框架**:ops-transformer ES Graph Fusion(REG_FUSION_PASS + Pattern 构图) - **编译门禁**:GRAPH_FUSION_SUPPORT_VERSION=90000000(ge_compiler 版本不足则拒融) - **平台常量**(mc2/common/utils/mc2_platform_info.h): | 常量 | NpuArch | 用途 | |---|---|---| | NPUARCH_A5 | DAV_3510 | 多数 Transpose A5 Pass | | NPUARCH_310P | DAV_2002 | **本提交新增**;MatmulAllReduceTransposeFusionPass 排除 310P | ### 本次迁入清单 | # | Pass 类名 | 路径(简) | 平台 | 融合目标 | |---|---|---|---|---| | 1 | AllToAllMatmulTransposeA5FusionPass | allto_all_matmul/... | A5 | 吸 x2 上 Transpose(±Bitcast) | | 2 | MatmulAllToAllTransposeA5FusionPass | matmul_allto_all/... | A5 | 同上(attr 行为不同;本提交重构既有实现) | | 3 | AllGatherMatmulV2TransposeA5FusionPass | all_gather_matmul_v2/... | A5 | 吸 x2[/x2_scale] Transpose(±Bitcast) | | 4 | MatmulReduceScatterV2TransposeA5FusionPass | matmul_reduce_scatter_v2/... | A5 | 同上 | | 5 | MatmulAllReduceTransposeA5FusionPass | matmul_all_reduce/... | A5 | 吸 x2/antiquant/dequant Transpose(dequant±Bitcast) | | 6 | MatmulAllReduceTransposeFusionPass | matmul_all_reduce/... | 非310P | 吸 x2/antiquant Transpose;覆盖 MAR/ARN/InplaceARN | | 7 | AlltoAllvQuantGroupedMatMulTransposeFusionPass | allto_allv_quant_grouped_mat_mul/... | A5 | 吸 gmm/mm weight[/scale] Transpose | | 8 | QuantGroupedMatMulAlltoAllvTransposeFusionPass | quant_grouped_mat_mul_allto_allv/... | A5 | 同上(attr 置 true) | ### 本批明确不下迁 | 项 | 说明 | |---|---| | MatmulAllReduceTransposeFusion310PPass | 不下迁;base Pass 对 310P 直接拒融 | | MatmulAllReduceAddRmsNormFusionPass | 不下迁; | | AddRmsNorm / InplaceAddRmsNorm 打桩(es_nn) | 不下迁;stub 仅保留 math | ### 附带改动 - **构建门禁**(cmake/obj_func.cmake):仅 ENABLE_BUILT_IN 时 GLOB 并编译 fusion_pass/*fusion_pass*.cpp;自定义包 / 分组 kernel 构建不编 fusion(仍收集 *_proto*.h 供 updateproto / ES) - **外部算子 stub**:common/stub/op_graph/math_proto_stub.cpp 提供 Transpose / Bitcast(proto_math → es_math);CMake 改为只编该文件(不再 GLOB) - 删除 mc2/matmul_allto_all/op_graph/transpose_d_proto.h;pattern **统一走 Transpose**(不再枚举 TransposeD) - Replacement 统一 return replaceGraph;(去掉 std::move,避免 NRVO 告警) - ES 依赖:除 #6 外各 Pass 仅依赖**本算子** es_Xxx + es_math;#6 额外依赖本仓 es_MatmulAllReduceAddRmsNorm / es_InplaceMatmulAllReduceAddRmsNorm(故分组只编 MAR 时若强行编 fusion 会缺头——由 built-in 门禁规避) --- ## Patterns / Meet / Replace 详细特性 > 通用约定:T = Transpose(perm 从 const 输入读,int32/int64)。本批 **不再** 枚举 TransposeD。 ### 1. AllToAllMatmulTransposeA5FusionPass **拓扑**:x2 → T → [Bitcast?] → AlltoAllMatmul.x2;x1 / x1_scale / x2_scale 直连;bias 可选。 | 阶段 | 详细内容 | |---|---| | **Patterns** | MX:x1_scale/x2_scale **固定进 pattern**;comm_scale / x1_offset / x2_offset 固定 nullptr。输出 {y, all2all_out}。Capture:0=MC2,1=Transpose。组合:hasBias × hasBitcast → **4 种**。Bitcast dtype 占位 DT_HIFLOAT8。 | | **Meet** | ① ge_compiler ≥ 9.0;② NPUARCH_A5;③ x1_quant_mode == x2_quant_mode == 6(MX);④ x2 perm size∈{2,3},**最后两维互换**(2D [1,0] / 3D [0,2,1]);⑤ subgraph 输入数 = 4(无 bias)或 5(有 bias)。 | | **Replace** | 吸掉 x2 上 Transpose;若有 Bitcast 则**保留**(dtype 取原 MC2 x2 输入 desc,失败回退 HIFLOAT8)。新建 AlltoAllMatmul,拷贝 group/world_size/all2all_axes/y_dtype/x1\|x2\|comm_quant_mode/x1_quant_dtype/comm_quant_dtype/transpose_x1/group_size/comm_mode/alltoall_out_flag。**transpose_x2 强制 true**(MX tiling 要求)。输出 {y, all2all_out} + InferShape。 | ### 2. MatmulAllToAllTransposeA5FusionPass **拓扑**:与 #1 同构,算子为 MatmulAlltoAll;单输出。 | 阶段 | 详细内容 | |---|---| | **Patterns** | x2 → T → [Bitcast?] → MatmulAlltoAll.x2;MX scale 固定进图;comm/offset 不进。组合:**4 种**(bias × Bitcast)。输出 {mc2}。 | | **Meet** | 与 #1 相同:版本 / A5 / MX(==6) / perm 末两维互换 / 输入数 4 或 5。 | | **Replace** | 吸 Transpose,可选保留 Bitcast(逻辑同 #1)。拷贝 group/world_size/all2all_axes/y_dtype/x1\|x2\|comm_quant_mode/comm_quant_dtype/transpose_x1/group_size/comm_mode(无 x1_quant_dtype、alltoall_out_flag)。**关键差异**:transpose_x2 = !transpose_x2(**flip**,非 set-true)。 | ### 3. AllGatherMatmulV2TransposeA5FusionPass **拓扑**:x2 必有 T(±Bitcast);可选 bias;可选成对 x1_scale/x2_scale,且 x2_scale 可再挂 T(±Bitcast)。 | 阶段 | 详细内容 | |---|---| | **Patterns** | quant_scale 恒 nullptr。输出 {y, gather_out, amax_out}。Capture:0=MC2,1=x2T,若有 x2_scale T 则 2=x2ScaleT。组合:**16 种**——仅 x2 T:hasBias×hasScale×x2Bitcast=8;双 T:hasBias×x2Bitcast×x2ScaleBitcast=8(双 T 时强制 hasScale)。 | | **Meet** | ① 版本;② A5;③ **x2 perm**:size∈{2,3},末两维互换;④ **x2_scale perm**(若有):size≥2 且前两维 [1,0];⑤ 有 scale 但无 x2_scale T 时,若 x2_scale dim>1 → **拒融**;⑥ 输入数 2/3/4/5(无 bias+无 scale / bias / scale / bias+scale)。 | | **Replace** | 吸 x2(及可选 x2_scale)Transpose;对应 Bitcast **保留**。拷贝 group/is_trans_a/gather_index/comm_turn/rank_size/block_size/group_size/is_gather_out/is_amax_out/y_dtype/comm_mode。**is_trans_b = !is_trans_b**(仅因吸 x2 T 而 flip,scale 不改 attr)。输出三路 + InferShape。 | ### 4. MatmulReduceScatterV2TransposeA5FusionPass **拓扑**:与 #3 同构(bias / scale / x2_scale T / Bitcast),算子 MatmulReduceScatterV2。 | 阶段 | 详细内容 | |---|---| | **Patterns** | 输出 {y, amax_out}(无 gather_out)。组合 **16 种**,规则同 #3。 | | **Meet** | 与 #3 相同:版本 / A5 / 双路 perm / x2_scale dim>1 须有 T / 输入个数。 | | **Replace** | 吸 T、保留 Bitcast;**is_trans_b flip**。额外拷贝 reduce_op;无 gather_index / is_gather_out。输出 {y, amax_out}。 | ### 5. MatmulAllReduceTransposeA5FusionPass **拓扑**:x2 必挂 T(**无 Bitcast**);可选 bias / antiquant_scale / antiquant_offset / dequant_scale;scale/offset 可挂 T;**仅 dequant 支持 T→Bitcast→MC2**。 | 阶段 | 详细内容 | |---|---| | **Patterns** | x3/pertoken/comm_quant 固定 nullptr。Capture:0=MC2,其后按 **x2 → scaleT → offsetT → dequantT** 追加。合法约束下 **72 种**(bias×scale×offset×dequant × 条件化的 scaleT/offsetT/dequantT/dequantBitcast)。 | | **Meet** | ① 版本;② A5;③ 输入数匹配;④ **x2/scale/offset perm**:size∈{2,3},末两维互换;⑤ **dequant perm**:size∈{2,3},且 **前两维 [1,0]**;⑥ antiquant:scale dim>1 时,有 scale 必须有 ScaleT,有 offset 必须有 OffsetT(门控用 scale 的 dim);⑦ dequant dim>1 且无 DequantT → 拒。 | | **Replace** | 吸各口 Transpose;仅 dequant Bitcast 可保留。拷贝 group/reduce_op/is_trans_a/comm_turn/antiquant_group_size/group_size/y_dtype/comm_quant_mode/comm_mode。**is_trans_b flip**。单输出 {y}。 | ### 6. MatmulAllReduceTransposeFusionPass **说明**:非 A5 通用 Transpose 吸收;**拒绝 NPUARCH_310P**(310P 专用 Pass 本批不下迁)。 | 阶段 | 详细内容 | |---|---| | **Patterns** | 覆盖三种算子:MatmulAllReduce / MatmulAllReduceAddRmsNorm / InplaceMatmulAllReduceAddRmsNorm。x2 必挂 T;可选 bias、scale、offset、**dequant(仅拓扑匹配,不吸 dequant T)**;scale/offset 可挂 T;**无 Bitcast、无 dequant Transpose**。ARN 类额外必选 residual/gamma。输出:Mar→{y};Arn→{y, norm_out};InplaceArn→{ref_residual, norm_out}。组合 **108 种**(3 opKind × bias/scale/offset/dequant × 条件化 scaleT/offsetT)。 | | **Meet** | ① 版本;② **拒绝 NPUARCH_310P**;③ 输入数匹配;④ 所有 Capture 到的 T:perm 末两维互换(size 2/3);⑤ antiquant dim>1:须对应 ScaleT/OffsetT(ARN 用 K_SCALE 索引,Mar 用 Mar 索引);⑥ dequant 是否存在须与 pattern 一致(直连透传,不吸 T)。 | | **Replace** | 吸 x2/scale/offset 上 Transpose;dequant **原样透传**(不吸 T)。**is_trans_b flip 一次**。Mar:拷贝完整 MAR attr(含 group_size/y_dtype/comm_quant_mode/comm_mode)。Arn/InplaceArn:从 MC2 读 group/reduce_op/is_trans_*/comm_turn/antiquant_group_size,从节点读 epsilon(缺省 1e-6);输出分别为 {y,norm_out} / {ref_residual,norm_out}。 | ### 7. AlltoAllvQuantGroupedMatMulTransposeFusionPass **拓扑**:必选 gmm_x/gmm_weight/gmm_x_scale/gmm_weight_scale;可选整组 mm 四路(HasMm)。四口可挂 T(**至少一路**):gmm_weight / gmm_weight_scale / mm_weight / mm_weight_scale;各口可 T→Bitcast。 | 阶段 | 详细内容 | |---|---| | **Patterns** | send/recv_counts_tensor 不进 pattern。输出 {gmm_y, mm_y, permute_out}。Capture:0=MC2,其后按 gmm_w→gmm_ws→mm_w→mm_ws 追加存在的 T。合法组合 **88 种**(hasMm × 四路 T × Bitcast;无 mm 时禁 mm 侧 T;Bitcast 仅当该口有 T 时可开;至少一路 T)。 | | **Meet** | ① 版本;② A5;③ 输入数 4 或 8;④ **weight(gmm/mm)perm**:size∈{2,3,4},末两维互换;⑤ **gmm_weight_scale perm**:size≥3,且 perm[1]==2 && perm[2]==1;⑥ **mm_weight_scale perm**:size≥2,且前两维 [1,0]。 | | **Replace** | 吸对应口 Transpose,Bitcast 保留(IR 口:1/3/7/9)。拷贝 group/ep_world_size/send_counts/recv_counts/gmm_*_quant_mode/permute_out_flag/mm_*_quant_mode/group_size/y_dtype/mm_dtype/comm_mode。有对应 Weight T 时 **trans_gmm_weight / trans_mm_weight flip(!)**;scale 口不改 attr。输出三路。 | ### 8. QuantGroupedMatMulAlltoAllvTransposeFusionPass **拓扑**:与 #7 几乎相同;算子 QuantGroupedMatMulAlltoAllv;send/recv/comm_quant_scale 固定 nullptr。 | 阶段 | 详细内容 | |---|---| | **Patterns** | 输出 {y, mm_y}(**无 permute_out**)。组合数同 **88**。 | | **Meet** | 与 #7 相同:版本 / A5 / 输入数 / 三类 perm 规则。 | | **Replace** | 吸 T、保留 Bitcast;拷贝含 comm_quant_mode/comm_quant_dtype 等(无 permute_out_flag)。**关键差异 vs #7**:有 gmm/mm weight T 时,**trans_gmm_weight/trans_mm_weight 强制 = true(set true,非 flip)**。输出 {y, mm_y}。 | --- ### 总览对照表 | Pass | Patterns 要点 | Meet 要点 | Replace 要点 / Attr 行为 | |---|---|---|---| | AllToAllMatmul T-A5 | x2 T±Bitcast × bias;MX scale 固定;4 种 | A5 + MX(=6) + perm 末两维 | 吸 T 留 Bitcast;**transpose_x2=true** | | MatmulAllToAll T-A5 | 同上;4 种 | 同左 | 吸 T 留 Bitcast;**transpose_x2 flip** | | AGMMV2 T-A5 | x2[/scale] T±Bitcast × bias;16 种 | A5;分口 perm;scale dim 门控 | 留 Bitcast;**is_trans_b flip** | | MRSV2 T-A5 | 同 AGMMV2;输出无 gather | 同 AGMMV2 | 同 AGMMV2 + 拷 reduce_op | | MAR T-A5 | x2+antiquant+dequant(±Bitcast);72 种 | A5;分口 perm;dim>1 门控 | 吸 T;dequant 可留 Bitcast;**flip is_trans_b** | | MAR T(非310P) | MAR/ARN/Inplace;x2+antiquant;108 种 | 拒 310P;perm;dim 门控;不吸 dequant T | 吸 T;dequant 透传;**flip is_trans_b** | | AlltoAllvQuantGMM T | hasMm × 四路 weight/scale T±Bitcast;88 种 | A5;三类分口 perm | **flip** trans_gmm/mm_weight | | QuantGMMAlltoAllv T | 同上;无 permute_out | 同上 | **set true** trans_gmm/mm_weight | ### 易混对照(迁移对齐要点) | 对比项 | 差异 | |---|---| | All2AllMM vs MatmulAll2All | transpose_x2:**set true** vs **flip** | | AlltoAllvQuantGMM vs QuantGMM-AlltoAllv | weight tran See merge request: cann/ops-transformer!10939 | 3 天前 | |
fix(oat):done-marker去重限无参调用;-f超长分批扫描防静默放行 Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !12579 merge fix into master fix(oat):done-marker去重限无参调用;-f超长分批扫描防静默放行 Created-by: gitcode_lijd Commit-by: gitcode_lijd Merged-by: cann-robot Description: 关联Issue https://gitcode.com/cann/ops-transformer/issues/5016 ## 摘要 修复 scripts/oat_check.sh 的 done-marker 去重缺陷(显式文件清单调用被陈旧 marker 静默跳过,导致版权声明漏查),并完善 pre-commit 指导书(新增快速使用节 + 措辞修正)。单笔提交,2 文件 +118/-22。 ## 一、oat_check.sh 修复(+3/-3) ### 问题机制 脚本原逻辑(顺序缺陷): 2a. 分叉分支 → 检查 .done_<HEAD> marker → 存在则 exit 0(静默跳过) 3. if [ $# -gt 0 ] → 参数模式(扫传入清单) elif PR-range → 扫分支全量变更 else → 扫 staged **marker 跳过判断排在参数判断之前**——在分叉分支上,若分支 tip 曾有过一次通过的 PR-range 扫描(marker 落盘),之后**同一 tip** 上 stage 新文件 commit 时(pre-commit 传入 staged 清单),**带参数也被 SKIP**,OAT 完全不跑。 ### 修复(三处守卫) | 位置 | 改动 | |---|---| | 2a marker 跳过 | [ $# -eq 0 ] &&——**显式文件清单调用永不跳过**(核心修复) | | 2b flock 复查 | 同款守卫(并行实例去重不影响显式调用) | | 末尾 marker 落盘 | 仅无参 PR-range 模式才落——args 模式(staged 子集)不得冒充全量覆盖 | ### 行为验证(四项全过) | 场景 | 旧逻辑 | 新逻辑 | |---|---|---| | A. marker 存在 + 显式传坏版权头文件 | ❌ 静默 SKIP(漏检) | ✅ 扫描并拦截 exit=1 | | B. 无参 + marker 存在 | SKIP(CI 去重) | ✅ 仍 SKIP(去重保留) | | C. args 模式通过 | 落 marker(冒充全量) | ✅ 不落 marker | | D. 无参 PR-range 通过 | 落 marker | ✅ 仍落 marker | 另经全量实测:find mc2 -type f | xargs pre-commit run --files(21 秒)在新逻辑下稳定拦截,扫出 25 个存量旧版权头(旧逻辑在分叉分支会被 marker 静默吞掉)。 ### 语义说明 - marker 语义收窄为"该 HEAD 的**全量 PR-range** 已扫描"——args 模式(staged 子集)不再产生/消费 marker,两类调用互不干扰 - CI 行为不变(CI 为全新 checkout,无 marker;且 CI 传参走 args 模式本就不受影响) - 失败路径本就不落 marker(被拦→修复→重新 commit 必然重扫),该行为保持 ### 附:-f 参数超长分批扫描(同文件) - **问题**:find mc2 -type f | xargs pre-commit run --files 全量扫描时,OAT 命令 -f 参数(逗号拼接文件列表)超 Linux 单参数上限 MAX_ARG_STRLEN ≈ 128KB,execve() 返回 E2BIG(exit 126),脚本走"意外退出码"分支**静默放行**(exit 0)——实测 1821 文件 / 131KB 即触发 - **修复**: 1. -f 参数超 120KB 时自动**分批扫描**(每批 < 120KB),逐批累计问题数,任一批有问题即拦截 2. 意外退出码不再静默放行——改为 **exit 1 阻塞提交**(防 OAT 进程崩溃时合规检查被绕过) - **验证**:1821 文件分 2 批扫描 → 拦截 23 个存量旧版权头(旧版此处静默通过);单文件场景不受影响 ## 二、pre-commit 指导书完善(docs/zh/develop/pre-commit_guide.md,+23/-6) ### 新增快速使用节 文档最开头新增"快速使用":三条安装命令(pre-commit 安装 / pre-commit install / git pc 别名)+ 一句"完成上述配置后,git commit 时将自动执行检查",原有完整章节结构不变——新环境 30 秒上手。 ### 措辞修正 | 位置 | 原文 | 修正 | |---|---|---| | §四 | git add . && git commit | git add <文件清单> && git commit(与流程规范"禁用 add . 防临时文件误提交"对齐) | | §五 clang-format | "rebase 最新代码后再做 pre-commit;重新 git add 后再次 commit" | "钩子会自动修复文件,重新 git add 后再次 commit 即可"(删去与基线无关的误导半句) | | 大标题 | Pre-commit | pre-commit(工具官方名小写) | See merge request: cann/ops-transformer!12579 | 4 天前 | |
整改仓内+安装重名头文件 Co-authored-by: chenyifan<chenyifan66@h-partners.com> # message auto-generated for no-merge-commit merge: !11266 merge clear_h into master 整改仓内+安装重名头文件 Created-by: mutex_lock Commit-by: chenyifan Merged-by: cann-robot Description: ## 描述 整改仓内及安装场景下的重名头文件冲突,避免同名头文件在编译包含路径或安装打包时互相覆盖。 **改动原因** - 仓内 attention/、gmm/、示例工程等存在 basename 相同的头文件,易在统一 include 搜索路径下发生错误包含。 - 与 third_party(如 catlass)及主仓多算子之间存在安装侧重名,可能覆盖安装产物。 **采取的方法** 1. **仓内重名**(637b7145f):对易冲突头文件按模块加前缀消歧,并同步更新引用,例如: - BSA / GBSA:block_epilogue_* / block_mmad_* → bsa_* / gbsa_* - recurrent_kda:recurrent_kda.h → recurrent_kda_arch22.h / recurrent_kda_arch35.h - grouped_matmul:grouped_matmul_kernel.h → grouped_matmul_kernel_arch35.h / fkl_grouped_matmul_kernel.h 等 - metadata:generic_block_sparse_attention_metadata.h → generic_block_sparse_attention_metadata_tiling.h 2. **安装重名**(975ffde47):对 GBSA/BSA/GMM 基础设施头文件统一加模块前缀(gbsa_ / bsa_ / gmm_,epilogue/gemm/tla 再细分),git mv 后批量更新 #include;**不改** experimental/ 与 third_party/。 3. 同步调整 scripts/check_duplicate_headers.sh 等相关引用。 **范围说明**:本次仅为头文件重命名与 include 路径同步,无业务逻辑变更(约 151 个文件,增删对等)。 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/5037 ## 测试 ## 文档更新 ## 类型标签 - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [x] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!11266 | 17 天前 | |
add flash_attn Co-authored-by: yipyip<chenyipeng6@huawei.com> # message auto-generated for no-merge-commit merge: !10755 merge master into master add flash_attn Created-by: yipyip Commit-by: yipyip Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!10755 | 1 天前 | |
fix:align_L2_DFX_PHASE_1_params Co-authored-by: doufloat<baijinxiang@huawei.com> # message auto-generated for no-merge-commit merge: !11963 merge dts into master fix:align_L2_DFX_PHASE_1_params Created-by: doufloat Commit-by: doufloat Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 1. 问题背景 本次处理问题单中的以下检查项: - ID 2: aclnnFlashAttentionScoreV4 - ID 17:aclnnFFN - ID 18:aclnnFFNV2 - ID 19:aclnnFFNV3 官方宏说明: <https://www.hiascend.com/document/detail/zh/CANNCommunityEdition/latest/API/aolapi/atlasascendc_api_07_1052.html> 官方约束要求 L2_DFX_PHASE_1 在 aclnn 的一阶段接口 aclnnXxxGetWorkspaceSize 最前方调用, 并且 DFX_IN/DFX_OUT 中的内容必须与接口参数列表严格一致,包括参数个数、顺序和参数表达形式。 ## 2. 结论 ID 2、17、18、19 均为确定问题。 | ID | API | 问题 | 处理方式 | | --- | --- | --- | --- | | 2 | aclnnFlashAttentionScoreV4 | 缺少 softmaxOutLayout | 在 pseType 与 seed 之间补齐 | | 17 | aclnnFFN | 使用 ffnParams.*,并多传 -1, false | 改为接口形参,删除多余参数 | | 18 | aclnnFFNV2 | 使用 ffnParams.*,并多传 -1 | 改为接口形参,保留 tokensIndexFlag,删除 -1 | | 19 | aclnnFFNV3 | 使用 ffnParams.* 和错误的可选参数名,并多传 -1 | 改为 xxxOptional 接口形参,保留 tokensIndexFlag,删除 -1 | ffnParams.x 与 x 在运行时数值等价,但 DFX 检查要求与接口形参严格一致;同时 -1 和 false 是实际多余参数,会造成 DFX 参数元组基数与接口不一致。 ## 3. 修改设计 ### 3.1 修改文件 - attention/flash_attention_score/op_api/aclnn_flash_attention_score.cpp - ffn/ffn/op_host/op_api/aclnn_ffn.cpp ### 3.2 aclnnFlashAttentionScoreV4 将 DFX 输入参数补齐为: cpp DFX_IN(query, key, value, realShiftOptional, dropMaskOptional, paddingMaskOptional, attenMaskOptional, queryRopeOptional, keyRopeOptional, dScaleQOptional, dScaleKOptional, dScaleVOptional, sinkOptional, prefixOptional, actualSeqQLenOptional, actualSeqKvLenOptional, qStartIdxOptional, kvStartIdxOptional, scaleValue, keepProb, preTokens, nextTokens, headNum, inputLayout, innerPrecise, sparseMode, outDtype, pseType, softmaxOutLayout, seed, offset) ### 3.3 aclnnFFN 改为接口形参,并删除不属于 aclnn 接口的 -1, false: cpp DFX_IN(x, weight1, weight2, expertTokens, bias1, bias2, scale, offset, deqScale1, deqScale2, antiquantScale1, antiquantScale2, antiquantOffset1, antiquantOffset2, activation, innerPrecise), DFX_OUT(y) ### 3.4 aclnnFFNV2 改为接口形参,保留 tokensIndexFlag,删除多余的 -1: cpp DFX_IN(x, weight1, weight2, expertTokens, bias1, bias2, scale, offset, deqScale1, deqScale2, antiquantScale1, antiquantScale2, antiquantOffset1, antiquantOffset2, activation, innerPrecise, tokensIndexFlag), DFX_OUT(y) ### 3.5 aclnnFFNV3 改为接口中的 xxxOptional 形参,保留 tokensIndexFlag,删除多余的 -1: cpp DFX_IN(x, weight1, weight2, expertTokensOptional, bias1Optional, bias2Optional, scaleOptional, offsetOptional, deqScale1Optional, deqScale2Optional, antiquantScale1Optional, antiquantScale2Optional, antiquantOffset1Optional, antiquantOffset2Optional, activation, innerPrecise, tokensIndexFlag), DFX_OUT(y) ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> 关联Issue [#4930](https://gitcode.com/cann/ops-transformer/issues/4930) <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!11963 | 9 天前 | |
优化grouped_matmul算子Host侧端侧耗时 Co-authored-by: zzzzzzyf_<zhouyunfei10@huawei.com> # message auto-generated for no-merge-commit merge: !12439 merge master into master 优化grouped_matmul算子Host侧端侧耗时 Created-by: zzzzzzyf_ Commit-by: zzzzzzyf_ Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 优化grouped_matmul算子的Host侧耗时,整改infer函数中由于多次调用GetPlatformInfoWithOutSocVersion接口导致的host bound问题 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#5502](https://gitcode.com/cann/ops-transformer/issues/5502) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 1.GMM算子ut测试,通过inferShape函数的ut覆盖 2.在图模式中测试,通过模型调用,host耗时在10us内 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!12439 | 2 天前 | |
causal_conv1d算子非连续张量精度缺陷修改 Co-authored-by: zhoulong50_hw<zhoulong50@huawei.com> # message auto-generated for no-merge-commit merge: !12178 merge conv1d_aclnn into master causal_conv1d算子非连续张量精度缺陷修改 Created-by: h1234515 Commit-by: zhoulong50_hw Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 1. y 补 l0op::Contiguous(y) → yFinal,算子改传 yFinal,消除 kernel 硬编码连续偏移导致的非连续 y 写错位 - 算子调用后按指针保护拷回:if (convStatesFinal != convStatesRef) / if (yFinal != y) 时 l0op:: ViewCopy 把更新写回用户原始 tensor,修复非连续 convStatesRef 的 in-place 静默丢失 2. op_api/aclnn_causal_conv1d_fn.cpp:prefill 路径同款缺陷,同步修复 3. UT 新增 3 个非连续用例:update_convStates_y_non_contiguous、update_2d_varlen_non_contiguous、 fn_convStates_y_non_contiguous,验证结果 59/59 全过 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/5496 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 二级冒烟 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!12178 | 4 天前 | |
refactor(moe_distribute_dispatch): 抽取重复代码消除重复 Co-authored-by: ranczhw<ranchenzhi@huawei.com> # message auto-generated for no-merge-commit merge: !12663 merge moe_distribute_dispatch_dedupe into master refactor(moe_distribute_dispatch): 抽取重复代码消除重复 Created-by: ranczhw Commit-by: ranczhw Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> (moe_distribute_dispatch): 抽取重复代码消除重复 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!12663 | 1 天前 | |
fix(mhc_post): 修复UT用例失败问题,修复hRes空指针错误码 Co-authored-by: xuejinghui<xuejinghui@huawei.com> # message auto-generated for no-merge-commit merge: !12666 merge mhc_post_ut into master fix(mhc_post): 修复UT用例失败问题,修复hRes空指针错误码 Created-by: xuejinghui Commit-by: xuejinghui Merged-by: cann-robot Description: ## 描述 修复mhc_post UT用例失败问题,修复hRes空指针错误码 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/5629 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 进行所有UT测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!12666 | 1 天前 | |
fix(moe): 修复 ep grad tiling 中 topK 属性空指针解引用 Co-authored-by: fazhenyao<fazhenyao@h-partners.com> # message auto-generated for no-merge-commit merge: !12681 merge fix5335 into master fix(moe): 修复 ep grad tiling 中 topK 属性空指针解引用 Created-by: fazhenyao123 Commit-by: fazhenyao Merged-by: cann-robot Description: ## 描述 MoeTokenPermuteWithEpGrad 的 Host Tiling 在入口、输入参数检查和初始化阶段分别读取必选属性 num_topk。原实现直接解引用 GetAttrs() 和 GetAttrPointer<int64_t>() 的返回值;当 GE 异常属性上下文未提供该属性时,会在返回参数错误前触发空指针崩溃。 本 PR 抽取 GetTopKAttr,统一检查属性容器和 topK 指针,读取成功后再返回属性值。三处原有裸解引用均改为通过该函数读取,缺失属性时返回 GRAPH_FAILED,不再发生 SIGSEGV。 改动仅处理 Issue #5335,不修改 Init 返回类型和非法 range 的现有行为,独立于 PR #12236。 ## 关联的Issue Fixes #5335 https://gitcode.com/cann/ops-transformer/issues/5335 ## 测试 A2 ATK  A5 ATK  验证环境:A2(Ascend 910B3)、CANN 9.1.1、Conda atk2678。 - bash build.sh --ophost_test --noexec --ops=moe_token_permute_with_ep_grad -j2:编译通过。 - transformer_op_host_ut --gtest_filter="MoeTokenPermuteWithEpGradTiling.*":原有 18/18 项 Tiling 用例通过。 - git diff --check:通过。 ## 文档更新 无。 ## 类型标签 - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!12681 | 2 天前 | |
fix: torch_extension 懒加载缺失的算子补调 _ensure_initialized 保证 schema 注册 Co-authored-by: weihao18<weihao16@h-partners.com> # message auto-generated for no-merge-commit merge: !12693 merge fix-issue-5582 into master fix: torch_extension 懒加载缺失的算子补调 _ensure_initialized 保证 schema 注册 Created-by: weihao18 Commit-by: weihao18 Merged-by: cann-robot Description: ## 描述 fix: torch_extension 懒加载缺失的算子补调 _ensure_initialized 保证 schema 注册 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/5582 ## 测试 8p环境验证通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!12693 | 3 天前 | |
fix(oat):done-marker去重限无参调用;-f超长分批扫描防静默放行 Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !12579 merge fix into master fix(oat):done-marker去重限无参调用;-f超长分批扫描防静默放行 Created-by: gitcode_lijd Commit-by: gitcode_lijd Merged-by: cann-robot Description: 关联Issue https://gitcode.com/cann/ops-transformer/issues/5016 ## 摘要 修复 scripts/oat_check.sh 的 done-marker 去重缺陷(显式文件清单调用被陈旧 marker 静默跳过,导致版权声明漏查),并完善 pre-commit 指导书(新增快速使用节 + 措辞修正)。单笔提交,2 文件 +118/-22。 ## 一、oat_check.sh 修复(+3/-3) ### 问题机制 脚本原逻辑(顺序缺陷): 2a. 分叉分支 → 检查 .done_<HEAD> marker → 存在则 exit 0(静默跳过) 3. if [ $# -gt 0 ] → 参数模式(扫传入清单) elif PR-range → 扫分支全量变更 else → 扫 staged **marker 跳过判断排在参数判断之前**——在分叉分支上,若分支 tip 曾有过一次通过的 PR-range 扫描(marker 落盘),之后**同一 tip** 上 stage 新文件 commit 时(pre-commit 传入 staged 清单),**带参数也被 SKIP**,OAT 完全不跑。 ### 修复(三处守卫) | 位置 | 改动 | |---|---| | 2a marker 跳过 | [ $# -eq 0 ] &&——**显式文件清单调用永不跳过**(核心修复) | | 2b flock 复查 | 同款守卫(并行实例去重不影响显式调用) | | 末尾 marker 落盘 | 仅无参 PR-range 模式才落——args 模式(staged 子集)不得冒充全量覆盖 | ### 行为验证(四项全过) | 场景 | 旧逻辑 | 新逻辑 | |---|---|---| | A. marker 存在 + 显式传坏版权头文件 | ❌ 静默 SKIP(漏检) | ✅ 扫描并拦截 exit=1 | | B. 无参 + marker 存在 | SKIP(CI 去重) | ✅ 仍 SKIP(去重保留) | | C. args 模式通过 | 落 marker(冒充全量) | ✅ 不落 marker | | D. 无参 PR-range 通过 | 落 marker | ✅ 仍落 marker | 另经全量实测:find mc2 -type f | xargs pre-commit run --files(21 秒)在新逻辑下稳定拦截,扫出 25 个存量旧版权头(旧逻辑在分叉分支会被 marker 静默吞掉)。 ### 语义说明 - marker 语义收窄为"该 HEAD 的**全量 PR-range** 已扫描"——args 模式(staged 子集)不再产生/消费 marker,两类调用互不干扰 - CI 行为不变(CI 为全新 checkout,无 marker;且 CI 传参走 args 模式本就不受影响) - 失败路径本就不落 marker(被拦→修复→重新 commit 必然重扫),该行为保持 ### 附:-f 参数超长分批扫描(同文件) - **问题**:find mc2 -type f | xargs pre-commit run --files 全量扫描时,OAT 命令 -f 参数(逗号拼接文件列表)超 Linux 单参数上限 MAX_ARG_STRLEN ≈ 128KB,execve() 返回 E2BIG(exit 126),脚本走"意外退出码"分支**静默放行**(exit 0)——实测 1821 文件 / 131KB 即触发 - **修复**: 1. -f 参数超 120KB 时自动**分批扫描**(每批 < 120KB),逐批累计问题数,任一批有问题即拦截 2. 意外退出码不再静默放行——改为 **exit 1 阻塞提交**(防 OAT 进程崩溃时合规检查被绕过) - **验证**:1821 文件分 2 批扫描 → 拦截 23 个存量旧版权头(旧版此处静默通过);单文件场景不受影响 ## 二、pre-commit 指导书完善(docs/zh/develop/pre-commit_guide.md,+23/-6) ### 新增快速使用节 文档最开头新增"快速使用":三条安装命令(pre-commit 安装 / pre-commit install / git pc 别名)+ 一句"完成上述配置后,git commit 时将自动执行检查",原有完整章节结构不变——新环境 30 秒上手。 ### 措辞修正 | 位置 | 原文 | 修正 | |---|---|---| | §四 | git add . && git commit | git add <文件清单> && git commit(与流程规范"禁用 add . 防临时文件误提交"对齐) | | §五 clang-format | "rebase 最新代码后再做 pre-commit;重新 git add 后再次 commit" | "钩子会自动修复文件,重新 git add 后再次 commit 即可"(删去与基线无关的误导半句) | | 大标题 | Pre-commit | pre-commit(工具官方名小写) | See merge request: cann/ops-transformer!12579 | 4 天前 | |
补充kda_input_proj算子的ut和st Co-authored-by: yolic<chenyuning1@huawei.com> # message auto-generated for no-merge-commit merge: !12470 merge ut_kda into master 补充kda_input_proj算子的ut和st Created-by: yolic Commit-by: yolic Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 补充kda_input_proj算子的ut和st ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> 关联Issue [#5519](https://gitcode.com/cann/ops-transformer/issues/5519) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> 补充了测试看护,流水线已通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [x] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!12470 | 2 天前 | |
fix: correct ACLNN dequeue stream resource binding (master) Co-authored-by: PerrySkywalker<wangmingkang1@huawei.com> # message auto-generated for no-merge-commit merge: !12405 merge fix/aclnn_dequeue_stream_resource_master into master fix: correct ACLNN dequeue stream resource binding (master) Created-by: PerrySkywalker Commit-by: PerrySkywalker Merged-by: cann-robot Description: ## 描述 修复 ACLNN 自定义执行回调在切换 stream 后可能沿用上一 stream 核数限制的问题。例如 A=8/16、B=4/8 时,混合 enqueue/dequeue 判断的 A→B→A 会使最后一次 A 仍使用 4/8。 将 ACLNN_CMD 的 acl_call 内部判断改为 check_dequeue_need_use,与消费侧 stream 状态保持一致;外层准备阶段继续使用 check_enqueue_need_use。本 PR 目标为 master,仅修改一行。 ## 关联的Issue Fixes #5452 https://gitcode.com/cann/ops-transformer/issues/5452 ## 测试 - [x] C++ OpCommand 回调 A→B→A:修复前读到 8/16→4/8→4/8,修复后读到 8/16→4/8→8/16;同步队列关闭场景也通过。 - [x] 系统 Python 重编译实际安装包的 MLA Torch 扩展;8/16 核 BF16 aclgraph + fullgraph CPU 对照通过。 - [x] 16/32 核 FP16 causal(B=2、Sq=2、Sk=257),aclgraph + fullgraph + 在线编译通过;检查 .run 包含新 MLA .o,最大绝对误差 0.000186145。 - [x] 双 stream 混合原生 torch.add 与 MLA 的 A→B→A 精度回归通过。 - [x] 本分支 staged 与完整 PR 差异的 pre-commit(含 OAT)通过。 上卡测试使用本机实际安装包重编译;未进行该目标分支的全量算子包重建,远端 CI 结果另行查看。 ## 文档更新 无。复现步骤和回归结果记录在关联 issue。 ## 类型标签 - [x] 🐛 Bug修复 See merge request: cann/ops-transformer!12405 | 3 天前 | |
pre-commit: set AllowShortFunctionsOnASingleLine to Empty Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !10461 merge fix_2 into master pre-commit: set AllowShortFunctionsOnASingleLine to Empty Created-by: gitcode_lijd Commit-by: gitcode_lijd Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!10461 | 1 个月前 | |
产品文档png文件名改为英文名 Co-authored-by: gitcode-chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !9654 merge master into master 产品文档png文件名改为英文名 Created-by: gitcode-chenjiao Commit-by: gitcode-chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 产品文档中的png图片名由中文改为英文 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#3899](https://gitcode.com/cann/ops-transformer/issues/3899) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> NA ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> png和相关的link md ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!9654 | 1 个月前 | |
Pre-Commit 规范整改 — 公共 Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !5305 merge refactor into master Pre-Commit 规范整改 — 公共 Created-by: gitcode_lijd Commit-by: gitcode_lijd Merged-by: cann-robot Description: pre-commit是一个Git Hooks框架,用于在 git commit时自动运行代码检查和格式化工具。: | Hook | 功能 | 说明 | |------|------|------| | **clang-format** | C/C++ 代码格式化 | 自动格式化代码,保持风格一致 | | **OAT Check** | 开源合规检查 | 检测许可证头、禁止二进制文件提交 | 本PR对于公共文件进行了pre-commit检查 See merge request: cann/ops-transformer!5305 | 2 个月前 | |
fix(pre-commit): oat-check增加require_serial与SKIP日志,修复OAT合规检查漏拦 Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !11215 merge fix into master fix(pre-commit): oat-check增加require_serial与SKIP日志,修复OAT合规检查漏拦 Created-by: gitcode_lijd Commit-by: gitcode_lijd Merged-by: cann-robot Description: ## issue:https://gitcode.com/cann/ops-transformer/issues/5016 ## 描述 ### 改动原因 oat-check hook 存在两个导致合规检查失效的问题: 1. 未设置 require_serial(默认 false),多核机器上 pre-commit 会把文件列表拆成多块并行调用 scripts/oat_check.sh。脚本内部 flock 串行化 + done-marker 缓存机制下,第一个抢到锁的分块(可能只含干净文件)扫完即写 marker,其余分块全部静默跳过——含版权头不合规文件的提交可整体漏过 OAT 检查(实测 6 文件混入 1 个问题文件场景,6 次中 5 次漏拦)。 2. 命中 done-marker 时静默 exit 0,hook 显示 "Passed" 但实际未做任何扫描,易造成误判(ops-nn 仓会输出 [SKIP] 日志)。 ### 改动方法 - .pre-commit-config.yaml:oat-check hook 增加 require_serial: true,禁止并行分块,所有 staged 文件单进程全量传入脚本检查 - scripts/oat_check.sh:命中 done-marker 时输出 [OAT] [SKIP] Already scanned HEAD=<sha> 日志后再退出(与 ops-nn 仓脚本对齐,两仓脚本现已一致) ### 兼容性 pre-commit 配置与检查脚本改动,不影响编译产物与算子功能。 ## 关联的Issue ## 测试 - 修复前:6 文件(5 干净 + 1 版权头不合规)提交场景,6 次重跑 5 次整体 Passed 漏拦 - 修复后:同场景连续 3 轮全部准确 Failed 拦截,问题文件稳定检出 - done-marker 命中场景验证:输出 [SKIP] Already scanned HEAD=xxx 日志,跳过可见 ## 文档更新 无 ## 类型标签 - [x] 🐛 缺陷修复 See merge request: cann/ops-transformer!11215 | 11 天前 | |
fix: Modify the AIDD docs issue Co-authored-by: zwj223<zhangwenjing55@h-partners.com> # message auto-generated for no-merge-commit merge: !9326 merge master into master fix: Modify the AIDD docs issue Created-by: zwj223 Commit-by: zwj223 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 修改AIDD扫描的核心资料问题 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#3995](https://gitcode.com/cann/ops-transformer/issues/3995) ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> torch_api_list.md op_list.md ascend950_op_list.md aclnn返回码.md 互推导关系.md ... ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!9326 | 1 个月前 | |
feat: 算子仓适配Ascend5162A芯片编译 Co-authored-by: wuxuening<wuxuening2@huawei.com> # message auto-generated for no-merge-commit merge: !12191 merge feat/ascend5162a-build-support into master feat: 算子仓适配Ascend5162A芯片编译 Created-by: wuxuening Commit-by: wuxuening Merged-by: cann-robot Description: ## 描述 算子仓适配 Ascend5162A 芯片编译:在编译框架(CMakeLists、build 脚本、SOC 映射)与 UT 桩代码中注册 ascend5162a 计算单元(arch 目录复用 arch35),支持通过 --soc=ascend5162a 编译输出 5162A 算子包。 改动清单(8 个文件): | 文件 | 改动 | |---|---| | CMakeLists.txt | ASCEND_ALL_COMPUTE_UNIT、SOC_VERSION_LIST、ARCH_DIRECTORY_LIST 增加 ascend5162a(arch35) | | build.sh | SUPPORT_COMPUTE_UNIT_SHORT 增加 ascend5162a | | cmake/scripts/util/const_var.py | SOC_MAP_EXT 增加 ascend5162a → Ascend5162A | | cmake/scripts/util/opdesc_parser.py | SOC_TO_SHORT_SOC_MAP 增加 ascend5162a | | scripts/util/const_var.py | SOC_MAP_EXT 增加 ascend5162a → Ascend5162A | | tests/ut/framework_normal/common/op_api_csv_case_loader.h | SOC_VERSION 映射增加 Ascend5162A | | tests/ut/framework_normal/op_api/stub/opdev/platform.cpp | ASCEND5162A ToString 映射 | | tests/ut/framework_normal/op_api/stub/opdev/platform.h | SocVersion 枚举增加 ASCEND5162A | ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/5356 ## 测试 本地环境(CANN 9.2.0,aarch64)执行 build.sh --soc=ascend5162a,编译通过并成功生成算子包 cann-5162a-ops-transformer_9.2.0_linux-aarch64.run;pre-commit 全量检查通过。 ## 文档更新 无 ## 类型标签 - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!12191 | 7 天前 | |
产品文档png文件名改为英文名 Co-authored-by: gitcode-chenjiao<chenjiao31@huawei.com> # message auto-generated for no-merge-commit merge: !9654 merge master into master 产品文档png文件名改为英文名 Created-by: gitcode-chenjiao Commit-by: gitcode-chenjiao Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 产品文档中的png图片名由中文改为英文 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> [#3899](https://gitcode.com/cann/ops-transformer/issues/3899) ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> NA ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> png和相关的link md ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!9654 | 1 个月前 | |
Pre-Commit 规范整改 — 公共 Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !5305 merge refactor into master Pre-Commit 规范整改 — 公共 Created-by: gitcode_lijd Commit-by: gitcode_lijd Merged-by: cann-robot Description: pre-commit是一个Git Hooks框架,用于在 git commit时自动运行代码检查和格式化工具。: | Hook | 功能 | 说明 | |------|------|------| | **clang-format** | C/C++ 代码格式化 | 自动格式化代码,保持风格一致 | | **OAT Check** | 开源合规检查 | 检测许可证头、禁止二进制文件提交 | 本PR对于公共文件进行了pre-commit检查 See merge request: cann/ops-transformer!5305 | 2 个月前 | |
feat: add BlockAttnResPrepare tiling and kernel Co-authored-by: zhaoyingchao<zhaoyingchao1@hisilicon.com> # message auto-generated for no-merge-commit merge: !10972 merge codex/block-attn-res-prepare-core into master feat: add BlockAttnResPrepare tiling and kernel Created-by: zhaoyingchao2 Commit-by: zhaoyingchao Merged-by: cann-robot Description: ## 关联 Issue 关联 [#4749](https://gitcode.com/cann/ops-transformer/issues/4749) ## 描述 新增 BlockAttnResPrepare 的算子原型、InferShape、host tiling 与 Ascend 950 kernel: - tiling key 1000:纯 AIV 小规格回退路径。 - tiling key 2000:1 AIC : 2 AIV mixed 路径,调用 ops-tensor 公共 kernel 模板。 - 固定 OPTENSOR_TAG_ID 到已合入的公共模板提交。 - 补充 InferShape、host tiling、opkernel UT、TTK CSV 和 golden。 ## 测试 - clang-format 18.1.8:通过。 - Ruff 0.14.14:通过。 - git diff --check:通过。 - PR 分支包含 host/kernel UT,可独立执行线上 compile 门禁。 ## 拆分关系 本 PR 是 aclnn 与 torch 两个后续 PR 的前置核心实现。 See merge request: cann/ops-transformer!10972 | 24 天前 | |
README中添加算子索引链接 Co-authored-by: lixiawei<lixiawei2@h-partners.com> # message auto-generated for no-merge-commit merge: !12163 merge readme_add into master README中添加算子索引链接 Created-by: lixiawei Commit-by: lixiawei Merged-by: cann-robot Description: ## 描述 README中添加算子索引链接 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/3586 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!12163 | 8 天前 | |
修复文档链接跳转失效问题 Co-authored-by: weihao18<weihao16@h-partners.com> # message auto-generated for no-merge-commit merge: !8061 merge fix_security_md into master 修复文档链接跳转失效问题 Created-by: weihao18 Commit-by: weihao18 Merged-by: cann-robot Description: ## 描述 修复SECURITY.md文档 [A-文件(夹)各场景权限管控推荐最大值] 链接跳转失效问题 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/3373 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!8061 | 2 个月前 | |
支持按模板参数编译算子kernel、支持编译入参调试异常与调优参数 Co-authored-by: lidongsheng<lidongsheng43@huawei.com> Co-authored-by: 吴剑飞<wujianfei15@huawei.com> # message auto-generated for no-merge-commit merge: !2170 merge 910_lds into master 支持按模板参数编译算子kernel、支持编译入参调试异常与调优参数 Created-by: qq_46353993 Commit-by: 吴剑飞;lidongsheng Merged-by: cann-robot Description: ## 描述 本次修改支持用户通过build.sh的编译入口传入模板参数--kernel_template_input后按tilingkey编译、传入--bisheng_flags进行调试异常 ## 关联的Issue [支持按模板参数指定编译kernel](https://gitcode.com/cann/ops-transformer/issues/1036) [支持编译入参新增调试异常和调优参数](https://gitcode.com/cann/ops-transformer/issues/1044) ## 测试 二级冒烟、指定模板参数编译并执行测试用例 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!2170 | 6 个月前 | |
Pre-Commit 规范整改 — 公共 Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !5305 merge refactor into master Pre-Commit 规范整改 — 公共 Created-by: gitcode_lijd Commit-by: gitcode_lijd Merged-by: cann-robot Description: pre-commit是一个Git Hooks框架,用于在 git commit时自动运行代码检查和格式化工具。: | Hook | 功能 | 说明 | |------|------|------| | **clang-format** | C/C++ 代码格式化 | 自动格式化代码,保持风格一致 | | **OAT Check** | 开源合规检查 | 检测许可证头、禁止二进制文件提交 | 本PR对于公共文件进行了pre-commit检查 See merge request: cann/ops-transformer!5305 | 2 个月前 | |
--opkernel新增支持-f ./pr_filelist.txt参数 Co-authored-by: lixiawei<lixiawei2@h-partners.com> # message auto-generated for no-merge-commit merge: !12042 merge build_opkernel into master --opkernel新增支持-f ./pr_filelist.txt参数 Created-by: lixiawei Commit-by: lixiawei Merged-by: cann-robot Description: ## 描述 --opkernel新增支持-f ./pr_filelist.txt参数 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/5245 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!12042 | 4 天前 | |
更改dispatch/combine的setup/teardown算子classify_rule到正确的组件 Co-authored-by: candy_cloud_fly<tangyunfei4@h-partners.com> # message auto-generated for no-merge-commit merge: !12689 merge fix_clean_master into master 更改dispatch/combine的setup/teardown算子classify_rule到正确的组件 Created-by: candy_cloud_fly Commit-by: candy_cloud_fly Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 更改dispatch/combine的setup/teardown算子classify_rule到正确的组件 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!12689 | 3 天前 | |
update cmake minimum required to 3.18.4 Co-authored-by: poorwill<wangbing110@huawei.com> # message auto-generated for no-merge-commit merge: !9634 merge master into master update cmake minimum required to 3.18.4 Created-by: wangbing110 Commit-by: poorwill Merged-by: cann-robot Description: update cmake minimum required to 3.18.4 See merge request: cann/ops-transformer!9634 | 1 个月前 | |
Pre-Commit 规范整改 — 公共 Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !5305 merge refactor into master Pre-Commit 规范整改 — 公共 Created-by: gitcode_lijd Commit-by: gitcode_lijd Merged-by: cann-robot Description: pre-commit是一个Git Hooks框架,用于在 git commit时自动运行代码检查和格式化工具。: | Hook | 功能 | 说明 | |------|------|------| | **clang-format** | C/C++ 代码格式化 | 自动格式化代码,保持风格一致 | | **OAT Check** | 开源合规检查 | 检测许可证头、禁止二进制文件提交 | 本PR对于公共文件进行了pre-commit检查 See merge request: cann/ops-transformer!5305 | 2 个月前 | |
升级 ops-transformer 版本至 9.2.0 Co-authored-by: wang-minbo<wangminbo1@hisilicon.com> # message auto-generated for no-merge-commit merge: !11465 merge master into master 升级 ops-transformer 版本至 9.2.0 Created-by: wang-minbo Commit-by: wang-minbo Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000-->https://gitcode.com/cann/ops-transformer/issues/5083 <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!11465 | 17 天前 | |
check_compile_version Co-authored-by: 吴剑飞<wujianfei15@huawei.com> # message auto-generated for no-merge-commit merge: !2085 merge check_version into master check_compile_version Created-by: hid81635372 Commit-by: 吴剑飞 Merged-by: cann-robot Description: ## 描述 工程上支持在编译时对子包版本进行校验 ## 关联的Issue https://gitcode.com/cann/ops-transformer/pull/2085 ## 测试 功能上可以在子包版本低于构建依赖时进行告警,RDV已通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述: 工程能力增加编译时版本校验功能 See merge request: cann/ops-transformer!2085 | 6 个月前 |
🔥Latest News
- [2026/08] 仓内集成pre-commit代码检查框架,配置后
git commit时自动检查并修复格式问题,将规范问题拦截在提交阶段、提升代码合入效率,详见pre-commit配置指导书。 - [2026/07] A5上新支持算子quant_flash_attn,Dense Attention全量化场景专用,以及experimental目录新增同名算子支持A5的MxFP4全量化;chunk_gated_delta_rule算子支持A5;A5新增DSV4 dense训练阶段TopK筛选反向算子dense_lightning_indexer_grad_kl_loss、dense_lightning_indexer_softmax_lse;mc2新支持算子engram_fetch_grad。
- [2026/06] A5上新增支持sparse_flash_mla、mixed_quant_sparse_flash_mla以及对应的metadata算子,用于DSV4场景稀疏Attention计算。新增lightning_indexer_v2、quant_lightning_indexer_v2以及对应的metadata算子,用于DSV4场景TopK筛选。A5新增DSV4 sparse训练阶段Attention反向算子sparse_flash_mla_grad、sparse_lightning_indexer_kl_loss_grad;mc2新支持算子engram_fetch、engram_fetch_wait。
- [2026/05] fused_infer_attention_score算子A5上支持MxFP8全量化;A5上新支持算子flash_attn,Dense Attention非量化场景专用。
- [2026/04] mc2新支持算子mega_moe。
- [2026/03] recurrent_gated_delta_rule算子支持A5。
- [2026/02] 新支持算子mhc_post、mhc_pre、mhc_res。
- [2026/01] 新支持算子grouped_matmul<<<>>>调用示例,方便用户自定义使用。
- [2026/01] 新支持算子fused_floyd_attention、fused_floyd_attention_grad、matmul_allto_all。
- [2025/12] 新增QuickStart,指导新手零基础入门算子项目部署(支持Docker环境)、算子开发和贡献流程。
- [2025/12] 优化指南类文档,聚焦算子开发指南,明确最小交付件和关键示例代码,针对Ascend/samples仓算子提供迁移本项目的指导。
- [2025/12] 支持transformer类onnx算子插件,包括NPUFlashAttention、NPUMultiHeadAttention、NPUMoeComputeExpertTokens等。
- [2025/12] 新支持算子kv_rms_norm_rope_cache、attention_update、attention_worker_scheduler、gather_pa_kv_cache、kv_quant_sparse_flash_attention、lightning_indexer_grad、mla_preprocess、mla_preprocess_v2、grouped_matmul_swiglu_quant_v2、attention_to_ffn、ffn_to_attention。
- [2025/12] 开源算子支持NPU Simulator仿真工具开发调试。
- [2025/12] 开源算子支持Ascend 950PR/Ascend 950DT/KirinX90系列产品。
- [2025/11] 新支持算子kv_quant_sparse_flash_attention、lightning_indexer、quant_lightning_indexer、sparse_flash_attention。
- [2025/11] 新支持示例算子rope_matrix和all_gather_add。
- [2025/11] 新增算子开发工程模板NpuOpsTransformerExt,无缝集成PyTorch张量操作,支持自动微分和GPU/NPU统一接口。
- [2025/10] 新增experimental目录,完善贡献指南,支持开发者调试并贡献自定义算子。
- [2025/09] ops-transformer项目首次上线,开源算子支持Atlas A2/A3系列产品。
🚀概述
ops-transformer是CANN(Compute Architecture for Neural Networks)算子库中提供transformer类大模型计算的进阶算子库,包括attention类、moe类、mc2类等,覆盖各类attention、MoE计算、通算融合等场景,算子库在架构图中的位置如下。

📌版本配套
本项目源码会跟随CANN软件版本发布,关于CANN软件版本与本项目标签的对应关系请参阅release仓库中的相应版本说明。 请注意,为确保您的源码定制开发顺利进行,请选择配套的CANN版本与Gitcode标签源码,使用master分支可能存在版本不匹配的风险。
🛠️环境准备
环境部署是体验本项目能力的前提,请先完成NPU驱动、CANN包安装等,确保环境正常。
⬇️源码下载
环境准备好后,下载与CANN版本配套的分支源码,通用命令如下,${tag_version}替换为分支标签名。以9.0.0分支源码下载为例:
# 通用命令:git clone -b ${tag_version} https://gitcode.com/cann/ops-transformer.git
git clone -b 9.0.0 https://gitcode.com/cann/ops-transformer.git
说明:若环境中已存在配套分支源码,可跳过本步骤,例如CANNLab默认已提供最新版本CANN对应的源码。
📖学习教程
💬相关信息
PS:本项目功能和文档正在持续更新和完善中,欢迎您关注最新版本。