| Files | Last commit | Last update |
|---|---|---|
mc2相关文件,pre-commit规范整改 Co-authored-by: yayahello<zhaopenglei@hisilicon.com> # message auto-generated for no-merge-commit merge: !11337 merge master into master mc2相关文件,pre-commit规范整改 Created-by: yayahello Commit-by: yayahello Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> mc2代码仓,pre-commit 整改 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!11337 | 2 months ago | |
D&C 和 Barrier系列 代际隔离 Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !7460 merge isolate into master D&C 和 Barrier系列 代际隔离 Created-by: gitcode_lijd Commit-by: gitcode_lijd Merged-by: cann-robot Description: # PR: D&C 和 Barrier 系列代际隔离——内核入口拆分 > **涉及的 9 个算子** > D&C 家族: moe_distribute_combine_v1、moe_distribute_combine_v2、moe_distribute_combine_v3、moe_distribute_combine_add_rms_norm、 > moe_distribute_dispatch_v1、moe_distribute_dispatch_v2、moe_distribute_dispatch_v3 > Barrier 家族:distribute_barrier、distribute_barrier_extend --- ## 一、背景 MoE distribute/combine 系列算子的 kernel 入口原为**每个算子单一 .cpp**,内部靠 #if __NPU_ARCH__==3510 / #elif __CCE_AICORE__==220 等预编译宏在三代硬件(A5/A3/A2)间切换。随着各代实现持续分化—— - A5(ascend950)新增 mxfp8 量化、data-as-flag 布局、浮点溢出控制寄存器(FLOAT_OVERFLOW_MODE_CTRL)等特性; - A2(ascend910b)和 A3(ascend910_93)虽同为 arch22,但通信模式(MTE/AICPU/layered)、量化路径、tiling 结构均有不同; 混在单一文件中的维护成本越来越高:改 A5 可能带崩 A2/A3 的编译,无法按代际独立编译、裁剪或删除。 **本 PR 的目标**:把每个算子的 kernel 入口按代际拆成独立可编译删除的 .cpp,参照 库上代际隔离结构。 拆分中踩到的坑(均已在 PR 内修复): - AscendC 编译器对 if constexpr 废弃分支处理不彻底,A2 的 CastIntrinsicsImpl/DataCopy 报错——须保留 #if DT_BF16/#elif DT_INT8 预处理守卫,不能用纯 if constexpr 替代。 - 移动头文件时多处漏 #endif(kernel 入口与 ASC_DEVKIT_MAJOR 守卫)。 - GET_TILING_DATA_WITH_STRUCT 须在 TPipe pipe; 之前(barrier 入口顺序曾颠倒)。 - CMake depends 须追加 _a2/_a3/_apt_depends,不能替换 base _depends(后者绑打包安装,丢失则 arch22 源码不进安装包)。 --- ## 二、最终效果 ### 2.1 入口拆分 每个算子 arch22 下放 _a2.cpp + _a3.cpp,arch35 下放 _apt.cpp: op_kernel/ ├── arch22/ │ ├── moe_distribute_combine_v2_a2.cpp (A2=ascend910b) │ ├── moe_distribute_combine_v2_a3.cpp (A3=ascend910_93) │ └── moe_distribute_combine_v2_tiling_key.h (A2+A3 共用) └── arch35/ ├── moe_distribute_combine_v2_apt.cpp (A5=ascend950) └── moe_distribute_combine_v2_apt_tiling_key.h (A5) - A2、A3、A5 各一份 cpp,**不再有任何 #if __NPU_ARCH__ 宏**,各文件只含本代际的 if constexpr(ArchTag==XXX) 分支(A2 仍保留 DTYPE 预处理守卫,见背景)。 - A2/A3 同为 arch22,靠 **opFile 名**区分(构建 _get_src 用 rglob(opFile+.cpp) 按文件名唯一命中)。 - 无 A2 版本的算子(combine_v3、dispatch_v3、combine_add_rms_norm、barrier 系列):只做 _a3 + _apt(或仅 _apt),不做 _a2。 ### 2.2 tiling_key:按 arch 共用,不按 A2/A3 拆 - **arch22 保留一份合并 tiling_key**(含 A2 + A3 全部 ASCENDC_TPL_SEL),同时被 _a2.cpp、_a3.cpp、host arch22 tiling 三者 include。 - 原因: - kernel 设备编译态 ASCENDC_TPL_SEL 展开为**空**(不出现在 kernel body),不会把异构 TilingData struct 拖进编译单元。 - 每 SoC 只选一个 opFile(ascend910b→_a2、ascend910_93→_a3、ascend950→_apt),不共链 → 无重复符号。 - host arch22 tiling 需要 A2+A3 的**并集**,一份 ASCENDC_TPL_SEL 才能同时注册两者(多份会重定义 static g_tilingSelectParams)。 ### 2.3 def / CMake 规范化 **def(算子注册)** 统一为 A2→A3→A5 顺序的三套 config(无 A2 算子则 A3→A5): | 代际 | 变量名 | SoC | opFile | jitCompile | |---|---|---|---|---| | A2 | aicore_config_a2 | ascend910b | ..._a2 | static_false | | A3 | aicore_config_a3 | ascend910_93 | ..._a3 | static_true | | A5 | aicore_config_apt | ascend950 | ..._apt | static_true | **CMake depends**(按 opFile 名,每算子 base + 各后缀一份): | 变量名 | 用途 | |---|---| | base <op>_depends | 依赖子目录注册 + arch22 源码打包安装(不可删) | | _a2_depends / _a3_depends / _apt_depends | kernel 编译 src copy | **构建框架(cmake/func.cmake、custom_build.cmake、顶层 CMakeLists.txt)**:_dir 变量与 .py 安装循环已泛化为支持 _a2/_a3/_a5/_apt 四种后缀,ASCEND_OP_NAME 匹配时自动剥离后缀比对算子名,无需为每个新后缀改框架。 ### 2.4 barrier 家族 | 算子 | ascend910_93(A3) | ascend950(A5) | ascend910b(A2) | |---|---|---|---| | distribute_barrier | arch22/distribute_barrier_a3.cpp | arch35/distribute_barrier_apt.cpp | - | | distribute_barrier_extend | - | arch35/distribute_barrier_extend_apt.cpp | - | 与 dispatch/combine 的差异:无 tiling_key 拆分(tiling 仅结构体);runtime 用 GetSocVersion() 区分 MAX_WORLD_SIZE_A3/A5;distribute_barrier_extend 入口保留 #if __has_include 双路径守卫(jit 编译场景)。 ### 2.5 命名约定(apt ↔ a5 往返最终落定) 入口 cpp / opFile / tiling_key 用 _apt 后缀(A5=ascend950 的 CANN 惯例);arch35 专有实现头用 _a5_*(如 moe_distribute_combine_v2_a5_mte.h、moe_distribute_dispatch_v2_a5_ccu.h)。此前曾出现 _apt→_a5→_apt 的命名往返,最终统一为上述约定:**入口层 _apt,实现头层 _a5**。 ### 2.6 编译验证 **21/21 全部编译通过**(--opkernel,3 SoC × 7 D&C 算子)。 | 算子 | ascend910b(A2) | ascend910_93(A3) | ascend950(A5) | |---|---|---|---| | combine(v1) | ✅ | ✅ | ✅ | | combine_v2 | ✅ | ✅ | ✅ | | combine_v3 | ✅ | ✅ | ✅ | | combine_add_rms_norm | ✅ | ✅ | ✅ | | dispatch(v1) | ✅ | ✅ | ✅ | | dispatch_v2 | ✅ | ✅ | ✅ | | dispatch_v3 | ✅ | ✅ | ✅ | Barrier 家族 2 算子 = 5 项通过、1 项跳过(distribute_barrier_extend def 无 A3 配置)。 > 注:320 核并发 kernel 二进制生成易 OOM(Error 137),建议 -j16 控制并行度。 ### 2.7 对外部算子的影响 | 外部算子 | 依赖方式 | 结论 | |---|---|---| | mega_moe | CMake depends + include dispatch_v2/quantize_functions.h | ✅ 无影响(共享顶层头未动) | | moe_distribute_dispatch_setup | include dispatch_v2/quantize_functions.h | ✅ 无影响 | | tools/bandwidth_test | include dispatch_v2/.../moe_distribute_v2_base.h | ✅ 无影响 | | combine_v3 / add_rms_norm | 复用 combine_v2 arch35 实现头(a5_mte.h 等) | ✅ 无影响(不 include 被改的 combine_arch35.h) | | 其他 consumer | 引用生成的 aclnnop API 头 | ✅ 无影响(算子原型/IO 未改) | 外部队列**零 regression**。内部 op_host UT 走 tiling 框架、不直接 include kernel cpp,不受影响;op_kernel UT 为预留不测,保持原样。 See merge request: cann/ops-transformer!7460 | 4 months ago | |
fix(pre-commit): 全仓代码规范整改——mc2 Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !11457 merge ci into master fix(pre-commit): 全仓代码规范整改——mc2 Created-by: gitcode_lijd Commit-by: gitcode_lijd Merged-by: cann-robot Description: 关联Issue https://gitcode.com/cann/ops-transformer/issues/5939(全仓代码规范整改总跟踪) ## 描述 全仓代码规范整改系列——mc2 目录。基于仓库 pre-commit 门禁对存量代码做一次性规范收敛: - clang-format 按 .clang-format 统一格式(列宽 120、指针左对齐 T* p、引用对齐 T& r 等) - 行尾空白、文件末尾换行修复 - 规模:1380 个文件,+22820/-22840 行,纯格式化改动语义等价,无逻辑变更 > 注:本 PR 早期版本曾包含 mc2 算子 kernel cpp 入口注释行补充(仓镜像替换链路验证),该内容已不在当前分支,当前为纯格式化整改。 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/5939(全仓整改总跟踪) ## 测试 - pre-commit 全部钩子本地通过 - CI 流水线(compile/UT)验证 See merge request: cann/ops-transformer!11457 | 1 month ago | |
Pre-Commit 规范整改 — mc2 公共 Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !1577 merge test into master Pre-Commit 规范整改 — mc2 公共 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对于MC2文件进行了pre-commit检查 See merge request: cann/ops-transformer!1577 | 4 months ago |
| Files | Last commit | Last update |
|---|---|---|
| 2 months ago | ||
| 4 months ago | ||
| 1 month ago | ||
| 4 months ago |