| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
修复fallback并行的数据冲突 Co-authored-by: lixiawei<lixiawei2@h-partners.com> # message auto-generated for no-merge-commit merge: !11727 merge fix_fallback into master 修复fallback并行的数据冲突 Created-by: lixiawei Commit-by: lixiawei Merged-by: cann-robot Description: ## 描述 去除static,修复fallback并行的数据冲突 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!11727 | 14 天前 | |
[FIA][master] 修复 MLA 下沉模板注册和旧模板转置偏移 Co-authored-by: PerrySkywalker<wangmingkang1@huawei.com> # message auto-generated for no-merge-commit merge: !11804 merge fix/fia_mla_sink_transpose_master into master [FIA][master] 修复 MLA 下沉模板注册和旧模板转置偏移 Created-by: PerrySkywalker Commit-by: PerrySkywalker Merged-by: cann-robot Description: ## 描述 修复非量化 MLA TND_NTD 场景 eager 通过但 tiling 下沉精度失败的问题。 - 将 arch35/fia_tiling_nonquant_mla.cpp 加入设备侧 tiling 编译列表,使 priority=5 的新 MLA 模板能够注册。此前 Host 包含该模板,设备库遗漏该文件,下沉运行时会选择旧模板。 - 修复旧模板 CalcAIVMlaAttentionOutOffset 在 gSize<=32 时遗漏起始 head 余数的问题。G=5、M=64 时,正确起点为 (head=4, token=12);补算 cubeSOuterOffset % gSize,并保留后续第二个 AIV 的偏移计算。 ## 关联的Issue 关联 #5226:https://gitcode.com/cann/ops-transformer/issues/5226 ## 测试 - pre-commit 全部 Passed/Skipped,git diff --check 通过。 - 直接抽取并编译修改前后的 C++ 地址计算函数,覆盖 G=1..32、64、128,T=1/3/19/52/65,batch 前缀偏移 0/17,两个 AIV、尾块及三种 SG 转置输出布局,共 20,046 组。修复前 10,662 组失败,修复后全部通过。 - 新增 MLA tiling 源文件通过 AArch64 交叉编译并生成目标文件。 - 修复前 CANN_0828 上板复现:B=1、T=52、Nq=5、Nkv=1、D=512、RoPE=64、actual_seq=[52]、共享 K/V、causal mask。TND_NTD eager/普通图最大绝对误差约 0.00104,下沉约 2.21648;TND 下沉通过且转置后与 eager 完全一致。 - 验证限制:完整设备库构建被本地依赖缺少 op_host/util/op_const_def.h 阻断,尚未完成修复后的整包上板精度验证,需 CI/配套依赖环境继续验证。 ## 文档更新 无。 ## 类型标签 - [x] 🐛 Bug修复 - [x] 📦 构建/CI See merge request: cann/ops-transformer!11804 | 13 天前 | |
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 | 6 天前 | |
add proto extend Co-authored-by: wang-minbo<wangminbo1@hisilicon.com> # message auto-generated for no-merge-commit merge: !10315 merge master into master add proto extend 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/4459 <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!10315 | 1 个月前 |