| Files | Last commit | Last update |
|---|---|---|
perf(mega_moe): 重叠URMA共享GMM2与通信同步及最终聚合 Co-authored-by: luobaiqing<luobaiqing1@huawei.com> # message auto-generated for no-merge-commit merge: !15221 merge perf/mega-moe-urma-shared-gmm2 into master perf(mega_moe): 重叠URMA共享GMM2与通信同步及最终聚合 Created-by: luobaiqing Commit-by: luobaiqing Merged-by: cann-robot Description: ## 描述 URMA Layered 原先在 MoE wave 收尾时完成通信并会合全部 AIV,然后执行共享 GMM2,等待全核完成后再做第二次跨卡同步和 Unpermute。共享权重转换、通信收尾、跨卡同步和输出聚合形成串行阶段。 本 PR 让共享 GMM2 与通信及最终聚合重叠:AIC 推进共享计算,W4 的 AIV0 转换共享权重,AIV1 收尾通信并执行 Sync2;全部 AIV 均分 Unpermute,在消费共享结果时按 token 组等待完成。 ### 1. 按角色编排收尾阶段 MoE wave 保留专家 wave 的计算与通信,末尾的中继、通信排空和本卡会合移到外层。 ProcessCombineRelay 在有无共享分支前由 AIV 统一调用;最终 Unpermute 也在分支后统一调用。 | 角色/路径 | 执行顺序 | | --- | --- | | AIC,有共享 | 回收共享 GMM1 激活 ACK → 共享 GMM2 | | A8W8 的 AIV,以及全部无共享路径 | AIV1 输出 token 数、Drain/Unlock → 全 AIV 会合 → 全 AIV 分担 Sync2 → 全 AIV 会合 | | W4 有共享的 AIV0 | 可选中继归约完成 → 发布通信收尾到达、推进同步轮次、提前到达 Sync2 完成会合 → 共享 GMM2 权重转换 → 交还 UB → 消费通信和 Sync2 完成条件 | | W4 有共享的 AIV1 | 可选中继回传完成 → 输出 token 数、Drain/Unlock → 等本卡通信收尾完成 → 分担全部对端的 Sync2 → 发布并等待本卡 Sync2 完成 | | 全部 AIV | 均分 token,执行普通或 Server Combine Unpermute;消费共享结果时等待相应组完成 | W4 包含 A8W4 和 A4W4。A8W8 不需要共享权重转换,复用 FinishCombineAndSync;特殊函数 ProcessSharedExpertGmm2AndSync 只保留 W4 的 AIV 编排。各路径保持专家、Server 和共享专家的既有累加顺序。 ### 2. 按组发布共享结果完成 移除共享 GMM2 出口的 AllCoreBarrier,为 Arch35 URMA/UBX 新增 urma.sync.sharedGmm2Tiles: text [共享专家][ceil(本卡 BS / 256)][64B 槽] 每槽首个 int32:该 token 组已完成的 GMM2 输出列 tile 数 计数区包含在现有 reset.flags 连续范围内,每次调用统一清零。Generic 和 A8W4 GMM2 复用已有的共享 tile 通知函数:FIX 输出完成后,以 atomicAdd 更新对应计数。MTE/Arch92 的原通知路径保持原行为,新增区仅给 Arch35 URMA/UBX 分配。 普通及 Server Combine Unpermute 都先等当前共享专家、当前 256-token 组的计数等于 ceil(H/256),再读取结果。每个消费核确认该组全部共享专家后缓存组号,组内后续 token 不重复轮询;缓存跨权重 chunk 保留,每次算子调用重新初始化。实际布局和生产/消费寻址按本卡实际 BS 计算,Torch 容量查询仍以最大 BS 做上界预算。 ### 3. 显式同步职责与 UB 交接 - AdvanceRankSyncRound 由所有物理 AIV 推进本核轮次,旁路 GM 写后保留 DSB;W4 AIV0 仅推进轮次。 - CrossRankSync 显式接收 AivJobContext。单参数重载组合轮次推进和通信;双参数实现只负责发送、等待、Drain 和释放锁,不再隐含 AIV0/AIV1 判断或本卡会合。 - 第一次同步复用原发送核通道锁;后续同步重新持锁。每个通知源槽保持到所属请求 Drain 完成。 - mode 0 的 COMBINE_COMM_DONE_FLAG 汇总本卡中继和通信收尾,Sync2 完成会合保留独立事件;同编号 mode 4 的计算事件独立。 - W4 权重转换结束后,用 MTE3→MTE2/V 依赖约束 Unpermute 复用 UB。清除紧邻 AllVectorBarrier 的重复 PIPE_ALL,保留必要的会合和通信收尾前依赖。 本次不增加 UB 分配;新增 GM 完成计数由统一布局纳入 Host 和 Torch 容量计算。无共享路径保留原操作顺序,MTE/Arch92 布局不变。 ### 4. 依赖和穿刺版本对照 本分支基于共享 GMM1 PR [!15213](https://gitcode.com/CANN/ops-transformer/merge_requests/15213) 的 2afa74361,前序还包含 [!15203](https://gitcode.com/CANN/ops-transformer/merge_requests/15203) 和 [!15189](https://gitcode.com/CANN/ops-transformer/merge_requests/15189)。前置 PR 合入后再整理基线。 本次共享 GMM2 的角色分工、完成通知、组等待、全 AIV 输出分配与已验证穿刺组合 17d11c877 一致。代码重新组织了公共收尾和同步接口;Server 去重的共享累加保留原 Cast + Add,穿刺版本使用融合 VF,两者累加顺序和精度一致。本独立 PR 尚未完成设备验证,不将组合版本收益作为独立收益结论。 ## 关联的Issue 无。 ## 测试 - 1296 组新旧实际布局对照,并对每组核对3种 Arch92 模式:仅 Arch35 URMA/UBX 共享计数区增加,既有区域尺寸保持不变,MTE/Arch92/无共享布局一致。 - 9个 workspace 测试体通过临时断言/注册适配执行,包含新增计数的 token 组边界及统一清零范围;未运行完整 CANN UT 框架。 - 开发阶段对源码提取的角色流水、跨卡同步和共享消费做轻量模型检查:30组角色流水图、13240组同步分核/轮次/锁检查、162组共享通知/消费模型。覆盖多共享专家、尾组和列尾块、组中间起点、跨 chunk 缓存及 ring 复用;底层计算和通信使用 stub。 - 人工整理过程中对各次提取、分支合并及接口拆分做源码顺序对照;最终由 Astra 独立静态复核完整差异,未发现新增确定缺陷或阻断项。 - git diff --check、提交格式及 OAT 检查通过。 尚未完成本独立分支的完整 CANN 编译、设备精度和性能验证。需覆盖 A8W8/A8W4/A4W4、普通/Server 去重、权重预取开关、多共享专家、BS 跨256边界、空工作核和重复调用。 ## 文档更新 无。 ## 类型标签 - [ ] 🐛 Bug修复 - [ ] ✨ 新特性 - [x] ⚡ 性能优化 - [x] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!15221 | 6 days ago | |
Pre-Commit 规范整改 — MC2 大EP Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !2597 merge clean into master Pre-Commit 规范整改 — MC2 大EP 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!2597 | 4 months ago |