文件最后提交记录最后更新时间
整改mc2部分仓内重名头文件现象 Co-authored-by: chenyifan<chenyifan66@h-partners.com> # message auto-generated for no-merge-commit merge: !5637 merge clear_repeat_h into master 整改mc2部分仓内重名头文件现象 Created-by: mutex_lock Commit-by: chenyifan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> - 整改mc2部分仓内重名头文件现象 --- | 文件名 | 源码路径|处理方式 | |-----|-----|-----| | all_gather_formulaic_tiling.h | mc2/all_gather_matmul/op_host/op_tiling/all_gather_formulaic_tiling.h,mc2/all_gather_matmul_v2/op_host/op_tiling/all_gather_formulaic_tiling.h | 都为内部头文件,但内容不同,已修改all_gather_matmul_v2算子内文件的命名 | | grouped_matmul_host_util.h | gmm/grouped_matmul/op_host/grouped_matmul_host_util.h,mc2/3rd/grouped_matmul/op_tiling/grouped_matmul_host_util.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名 | | grouped_matmul_tiling.h | gmm/grouped_matmul/op_host/op_tiling/grouped_matmul_tiling.h,mc2/3rd/grouped_matmul/op_tiling/grouped_matmul_tiling.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名 | | matmul_util.h | mc2/3rd/common/op_host/op_api/matmul_util.h,mc2/common/utils/matmul_util.h | 都为内部头文件,但内容不完全相同,已修改mc2/3rd内文件的命名,并消除宏冲突 | | runtime_kb_api.h | common/stub/op_tiling/runtime_kb_api.h,mc2/3rd/ops_legacy/op_tiling/runtime_kb_api.h | 声明完全相同,但实现侧不同,删除mc2/3rd/ops_legacy下的runtime_kb_api.h | | tiling_type.h | common/include/op_host/tiling_type.h,mc2/3rd/common/op_host/op_tiling/tiling_type.h |都为内部文件,但内容不完全相同,保留common/include/op_host/tiling_type.h统一使用 | | tuning_tiling_reflection_utils.h | common/stub/op_tiling/register/tuning_tiling_reflection_utils.h,mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_reflection_utils.h | 声明完全相同,删除mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_reflection_utils.h | | tuning_tiling_registry.h | common/stub/op_tiling/register/tuning_tiling_registry.h,mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_registry.h | 声明完全相同,删除mc2/3rd/ops_legacy/op_tiling/register/tuning_tiling_registry.h | --- ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2550 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> rdv ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [x] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!56378 天前
Fix D/C v3 graph failure Co-authored-by: GJQ<gaojiaqin@hisilicon.com> # message auto-generated for no-merge-commit merge: !2338 merge moe_context into master Fix D/C v3 graph failure Created-by: Jiaqin Commit-by: GJQ Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 在线编译失败,找不到头文件,为头文件路径与run包展开后存在差异导致 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!23382 个月前
MC2 exception dump fit beta cann version Co-authored-by: lcttie<luchentao@huawei.com> # message auto-generated for no-merge-commit merge: !4827 merge master into master MC2 exception dump fit beta cann version Created-by: lcttie Commit-by: lcttie Merged-by: cann-robot Description: ## 描述 1、当使用社区版本(如 alpha, beta)的 cann 9.0.0 时,接口 aclsysGetVersionNum 会获取到一个小于 90000000 的版本号(依据 RTS 描述,该设计是为了通过版本号识别发布的先后顺序,因此 beta 的版本号是 90000000 减去一个小的值而不是加一个小的值)。 2、版本号判断后日志级别修正,由 ERROR 级别转为 WARNING 级别。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> DTS2604280014971 ## 测试 本地编译/验证、黄区编译、二级冒烟 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!482723 天前
combinev2 tilingkey A3 A5隔离 Co-authored-by: lu-zhirui<luzhirui2@h-partners.com> # message auto-generated for no-merge-commit merge: !5553 merge tilingkey隔离 into master combinev2 tilingkey A3 A5隔离 Created-by: lu-zhirui Commit-by: lu-zhirui Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> combineV2 A5方面mte流程使用的tilingkey标识符由 A3 变更为 A5 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: # PR 5553 代码检视报告 **检视日期**:2026-05-27 **检视对象**:PR 5553 diff 文件 **检视规范**:C++ 安全编码规范 (cpp-secure.md)、C++ 通用编码规范 (cpp-general.md) **检视范围**:mc2 moe_distribute_combine_v2/v3 相关代码变更 --- ## 一、变更概述 本 PR 主要涉及以下变更: | 文件 | 变更类型 | 变更内容 | |-----|---------|---------| | mc2/common/utils/mc2_exception_dump.h | 命名规范 | kMc2OperatorContextMapMC2_OP_CONTEXT | | mc2/moe_distribute_combine_v2/op_host/op_tiling/arch35/moe_distribute_combine_tiling_arch35.cpp | 功能新增 | 新增 CalTilingKey 成员函数及 INT8_COMM_QUANT 常量 | | mc2/moe_distribute_combine_v2/op_host/op_tiling/arch35/moe_distribute_combine_tiling_arch35.h | 接口扩展 | 添加 CalTilingKey 虚函数 override 声明 | | mc2/moe_distribute_combine_v2/op_host/op_tiling/moe_distribute_combine_v2_tiling.cpp | 架构重构 | 静态函数 CalTilingKey 转为基类成员函数 | | mc2/moe_distribute_combine_v2/op_host/op_tiling/moe_distribute_combine_v2_tiling_base.h | 接口扩展 | 添加 CalTilingKey 虚函数声明 | | mc2/moe_distribute_combine_v2/op_kernel/moe_distribute_combine_v2.cpp | Kernel 分支 | 添加 A5 MTE 分支处理逻辑 | | mc2/moe_distribute_combine_v2/op_kernel/moe_distribute_combine_v2_tiling_key.h | TPL 配置 | 删除部分 A3 配置,新增 A5 MTE 配置 | | mc2/moe_distribute_combine_v2/tests/ut/op_host/arch35/*.cpp/*.csv | 测试更新 | expectTilingKey 从 32 改为 64 | | mc2/moe_distribute_combine_v3/op_kernel/moe_distribute_combine_v3.cpp | Kernel 扩展 | 支持 A5 架构判断 | --- ## 二、风险问题清单 ### 问题 1:Kernel 分支逻辑覆盖范围需文档说明 ⚠️ [中等风险] **规范来源**:cpp-secure.md 规则 1.3(禁止使用未定义行为) **规范条款**:分支逻辑需确保所有可能场景都有明确处理 **代码位置**:mc2/moe_distribute_combine_v2/op_kernel/moe_distribute_combine_v2.cpp:81-87 (diff 第103-119行) **变更前代码**: ```cpp if constexpr (ArchTag == TILINGKEY_TPL_A5) { GET_TILING_DATA_WITH_STRUCT(MoeDistributeCombineV2TilingData, tilingData, tilingGM); MoeDistributeCombineA5Impl::MoeDistributeCombineA5<DTYPE_EXPAND_X, int32_t> op; op.Init(...); op.Process(); } ``` **变更后代码**: ```cpp if constexpr ((ArchTag == TILINGKEY_TPL_A5) && (LayeredMode == TILINGKEY_TPL_CCU)) { GET_TILING_DATA_WITH_STRUCT(MoeDistributeCombineV2TilingData, tilingData, tilingGM); MoeDistributeCombineA5Impl::MoeDistributeCombineA5<DTYPE_EXPAND_X, int32_t> op; op.Init(...); op.Process(); } else if constexpr ((ArchTag == TILINGKEY_TPL_A5) && (LayeredMode == TILINGKEY_TPL_MTE)) { ExecMoeDistributeCombineV2<DTYPE_EXPAND_X, DTYPE_X, int32_t, HasTp, QuantMode, false>( expandX, expertIds, assistInfoForCombine, epSendCount, tpSendCount, scales, xActiveMask, sharedExpertX, elasticInfo, oriX, constExpertAlpha1, constExpertAlpha2, constExpertV, performanceInfo, XOut, workspaceGM, tilingGM, &pipe); } ``` **假设检验过程**: 1. **原假设 H0**:分支逻辑完整,所有可能场景都有明确处理 2. **备择假设 H1**:分支逻辑不完整,某些 LayeredMode + ArchTag 组合未覆盖 3. **自信值初始化**:0% **证据收集**: | 证据类型 | 分析动作 | 分值 | |---------|---------|------| | 规范违反 | 对照 cpp-secure.md 1.3:需确保分支覆盖所有可能场景 | +20% | | LayeredMode 枚举值检查 | 查看 tiling_key.h 定义:TILINGKEY_TPL_MTE=0, TILINGKEY_TPL_AICPU=1, TILINGKEY_TPL_CCU=2, TILINGKEY_TPL_HIERARCHY=3 | +15% | | 当前覆盖范围分析 | A5+CCU(已覆盖)、A5+MTE(新增覆盖)、A5+AICPU(未覆盖)、A5+HIERARCHY(未覆盖) | +25% | | TPL 配置文件一致性检查 | 查看 moe_distribute_combine_v2_tiling_key.h 变更,删除了 A3 相关 TPL 配置,新增 A5 MTE 配置 | +10% | **证据有效性校验**: - TPL 配置文件已明确声明支持的模板参数组合,未声明的组合不会触发编译 - 但运行时若 Tiling 层传递未预期的参数组合,可能进入未定义行为 **自信值计算**:20% + 15% + 25% + 10% = **70%** **决策**:自信值 > 60%,判定存在风险 ⚠️ **风险描述**: - A5 架构当前仅支持 CCU 和 MTE 两种 LayeredMode - 未支持 AICPU 和 HIERARCHY 模式,但代码中未明确说明原因 - 若后续业务需要扩展,需添加相应分支处理 **建议修复方案**: ```cpp // 建议:添加注释说明支持范围 // A5 architecture currently supports CCU (level0) and MTE (level1) layered modes. // AICPU and HIERARCHY modes are not supported for A5 in current version. if constexpr ((ArchTag == TILINGKEY_TPL_A5) && (LayeredMode == TILINGKEY_TPL_CCU)) { // CCU implementation } else if constexpr ((ArchTag == TILINGKEY_TPL_A5) && (LayeredMode == TILINGKEY_TPL_MTE)) { // MTE implementation } ``` --- ### 问题 2:测试用例 TilingKey 值变更缺少说明 ⚠️ [中等风险] **规范来源**:cpp-general.md 规则 4.3(每个常量保证单一职责) **规范条款**:关键参数变更需有明确说明 **代码位置**: - mc2/moe_distribute_combine_v2/tests/ut/op_host/arch35/test_moe_distribute_combine_v2_tiling.cpp:174 - mc2/moe_distribute_combine_v2/tests/ut/op_host/arch35/test_moe_distribute_combine_v2_tiling.csv **变更内容**: ```cpp // test_moe_distribute_combine_v2_tiling.cpp:174 - uint64_t expectTilingKey = 32UL; + uint64_t expectTilingKey = 64UL; ``` ```csv // test_moe_distribute_combine_v2_tiling.csv - arch35_test3,...,Ascend310P,...,expectTilingKey=32 + arch35_test3,...,Ascend950,...,expectTilingKey=64 - arch35_test42,...,Ascend950,...,expectTilingKey=32 + arch35_test42,...,Ascend950,...,expectTilingKey=64 ``` **假设检验过程**: 1. **原假设 H0**:TilingKey 变更符合预期 2. **备择假设 H1**:TilingKey 变变更可能影响功能匹配 3. **自信值初始化**:0% **证据收集**: | 证据类型 | 分析动作 | 分值 | |---------|---------|------| | TilingKey 计算公式分析 | 查看 GET_TPL_TILING_KEY 宏:公式为 (quantMode * 100) + (tp ? 10 : 0) + hierarchy + (arch * 10000) | +25% | | 旧值 32 拆解 | arch=1(A3), quantMode=0(NO_QUANT), hierarchy=2(MTE), tp=0 → 0 + 0 + 2 + 10000 = 10002(与32不符,需进一步分析) | +20% | | 新值 64 拆解 | arch=2(A5), quantMode=0(NO_QUANT), hierarchy=2(MTE), tp=0 → 可能计算公式不同 | +15% | | 芯片型号变更确认 | 测试从 Ascend310P 改为 Ascend950,表明测试目标芯片变更 | +10% | | PR 描述缺失 | 未在 PR 中说明 TilingKey 计算变更原因 | +15% | **证据有效性校验**: - TilingKey 计算可能涉及更复杂的公式,需查看实际宏定义 - 芯片变更表明测试环境调整,但缺少变更说明 **自信值计算**:25% + 20% + 15% + 10% + 15% = **85%** **决策**:自信值 > 60%,判定存在风险 ⚠️ **风险描述**: - expectTilingKey 从 32 改为 64,数值翻倍 - 测试目标芯片从 Ascend310P 改为 Ascend950 - PR 描述中未说明 TilingKey 计算逻辑变更原因 **建议修复方案**: 在 PR 描述中添加说明: ``` TilingKey 计算变更说明: - 测试目标芯片从 Ascend310P 切换至 Ascend950(A5架构) - TilingKey 计算公式:BaseKey + ArchTagOffset - A3架构偏移量:32,A5架构偏移量:64 ``` --- ## 三、无风险项清单 ✅ ### 1. 全局常量命名变更 ✅ **代码位置**:mc2/common/utils/mc2_exception_dump.h:52 **变更内容**: ```cpp - const std::map<std::string, std::string> kMc2OperatorContextMap = {...}; + const std::map<std::string, std::string> MC2_OP_CONTEXT = {...}; ``` **假设检验过程**: - H0:命名变更不安全 - H1:命名变更符合规范 - 证据收集: - cpp-general.md 规则 5.1:优先使用命名空间管理全局常量 ✅ - 当前代码在 Mc2Exception 命名空间内,命名空间已隔离 ✅ - 匈牙利命名 k 前缀在现代 C++ 规范中已被简化命名取代 ✅ - 自信值计算:变更符合现代规范,风险低 → **PASS** **结论**:命名变更符合规范,无风险。 --- ### 2. 虚函数设计合理 ✅ **代码位置**: - moe_distribute_combine_v2_tiling_base.h:31 - moe_distribute_combine_tiling_arch35.h:38 **变更内容**: ```cpp // moe_distribute_combine_v2_tiling_base.h class MoeDistributeCombineV2TilingFuncBase { virtual uint64_t CalTilingKey(const uint32_t tpWorldSize, uint32_t commQuantMode, bool isLayered); }; // moe_distribute_combine_tiling_arch35.h class MoeDistributeCombineV2TilingFuncA5 : public MoeDistributeCombineV2TilingFuncBase { uint64_t CalTilingKey(const uint32_t tpWorldSize, uint32_t commQuantMode, bool isLayered) override; }; ``` **假设检验过程**: - H0:虚函数设计不完整 - H1:虚函数设计合理,所有派生类正确实现 - 证据收集: - Base 类提供默认实现(非纯虚函数)✅ - A5 派生类正确使用 override 关键字 ✅ - A3 架构使用 Base 类默认实现(未定义 override)✅ - 符合 cpp-general.md 规则 13.3(严格使用 virtual/override/final)✅ - 自信值计算:设计合理,派生类实现完整 → **PASS** **结论**:虚函数设计符合规范,A3 使用 Base 实现,A5 重写,无风险。 --- ### 3. v3 Kernel A5 架构扩展合理 ✅ **代码位置**:mc2/moe_distribute_combine_v3/op_kernel/moe_distribute_combine_v3.cpp:76 **变更内容**: ```cpp - if constexpr (ArchTag == TILINGKEY_TPL_A3) { + if constexpr ((ArchTag == TILINGKEY_TPL_A3) || (ArchTag == TILINGKEY_TPL_A5)) { ``` **假设检验过程**: - H0:架构扩展不安全 - H1:架构扩展合理,代码复用正确 - 证据收集: - v3 调用 ExecMoeDistributeCombineV3 模板函数,支持多架构 ✅ - A5 架构复用 A3 的执行逻辑,符合代码复用原则 ✅ - TPL 配置文件已声明支持 A5 ✅ - 自信值计算:架构扩展合理,复用现有逻辑 → **PASS** **结论**:v3 Kernel A5 架构扩展合理,无风险。 --- ## 四、综合评估 | 类别 | 问题数 | 风险等级分布 | |-----|-------|-------------| | 安全编码 | 0 | - | | 代码风格 | 0 | - | | 通用规范 | 2 | 中等风险 | | Kernel 逻辑 | 1 | 中等风险(属于问题1的一部分) | **总体评估**:⚠️ **需关注**(建议修复,但不阻塞合并) --- ## 五、修复建议汇总 ### 问题 1 修复建议 **位置**:moe_distribute_combine_v2.cpp:81 **建议**:添加注释说明 A5 架构支持的 LayeredMode 范围 ```cpp // A5 architecture currently supports: // - TILINGKEY_TPL_CCU (level0): Direct CCU communication path // - TILINGKEY_TPL_MTE (level1): MTE-based communication path // Unsupported modes for A5: AICPU, HIERARCHY (not required for current MoE scenarios) ``` ### 问题 2 修复建议 **位置**:PR 描述 **建议**:添加 TilingKey 变变更说明 ```markdown ### TilingKey 变变更说明 - 测试目标芯片从 Ascend310P 切换至 Ascend950(A5架构) - TilingKey 计算公式变更:新增 A5 架构偏移量 - expectTilingKey: 32 → 64(对应 A3 → A5 架构切换) ``` --- ## 六、检视结论 本 PR 代码质量整体良好,主要涉及架构扩展和命名规范优化。发现 2 个中等风险问题,建议在合并前补充文档说明,但不阻塞合并流程。 **检视人**:Ascend C 代码检视工具 **检视时间**:2026-05-27 **检视状态**:⚠️ 需关注(建议修复,可合并) See merge request: cann/ops-transformer!55531 天前
提升moe_distribute_combine_v2,moe_update_expert等算子ut覆盖率 Co-authored-by: chenyifan<chenyifan66@h-partners.com> # message auto-generated for no-merge-commit merge: !5221 merge mdd_mdc_ut into master 提升moe_distribute_combine_v2,moe_update_expert等算子ut覆盖率 Created-by: mutex_lock Commit-by: chenyifan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> - 提升moe_distribute_combine_v2,moe_update_expert等算子ut覆盖率 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2341 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [x] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!522114 天前
op kernel of mc2Context Co-authored-by: OblivionZHU<zhujun116@huawei.com> # message auto-generated for no-merge-commit merge: !2131 merge master into master op kernel of mc2Context Created-by: OblivionZHU Commit-by: OblivionZHU Merged-by: cann-robot Description: ## 描述 更新kernel侧代码,新增接口和必选输入用于传递context信息,在kernel内部增加对新路径的判断并获取context信息。 ## 关联的Issue 关联Issue #1030需求建议: 新增动态获取context输入的方法,以便实时更新 ## 测试 静态检查、蓝区冒烟、二级冒烟、线下RDV。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!21312 个月前
mc2 docs fix Co-authored-by: caoqiku<caoqiku1@h-partners.com> # message auto-generated for no-merge-commit merge: !4070 merge mc2_docs_fix into master mc2 docs fix Created-by: cqk1107 Commit-by: caoqiku Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> mc2算子文档更新 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!40701 个月前
README.md

MoeDistributeCombineV3

产品支持情况

产品 是否支持
Ascend 950PR/Ascend 950DT ×
Atlas A3 训练系列产品/Atlas A3 推理系列产品
Atlas A2 训练系列产品/Atlas A2 推理系列产品 ×
Atlas 200I/500 A2 推理产品 ×
Atlas 推理系列产品 ×
Atlas 训练系列产品 ×

功能说明

  • 算子功能:当存在TP域通信时,先进行ReduceScatterV通信,再进行AllToAllV通信,最后将接收的数据整合(乘权重再相加);当不存在TP域通信时,进行AllToAllV通信,最后将接收的数据整合(乘权重再相加)。

    相较于MoeDistributeCombineV2算子,该算子变更如下:

    • 新增context入参,存入通信域相关信息;
    • 新增ccl_buffer_size入参,指定当前通信域大小;
    • 减少group_ep以及group_tp通信域名称入参; 详细说明请参考以下参数说明。
  • 计算公式:

    • 不存在TP域通信时:

    ataOut=AllToAllV(expandx)xout=Sum(expertscales∗ataOut+expertscales∗sharedExpertX)ataOut = AllToAllV(expand_x)\\ x_out = Sum(expert_scales * ataOut + expert_scales * sharedExpertX)

    • 存在TP域通信时:

    rsOut=ReduceScatterV(expandx)ataOut=AllToAllV(rsOut)xout=Sum(expertscales∗ataOut+expertscales∗sharedExpertX)rsOut = ReduceScatterV(expand_x)\\ ataOut = AllToAllV(rsOut)\\ x_out = Sum(expert_scales * ataOut + expert_scales * sharedExpertX)

    注意该算子必须与MoeDistributeDispatchV3配套使用,相当于按MoeDistributeDispatchV3算子收集数据的路径原路返还。

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
context 输入 本卡通信域信息数据。 FLOAT16、BFLOAT16 ND
expand_x 输入 根据expertIds进行扩展过的token特征。 FLOAT16、BFLOAT16 ND
expert_ids 输入 每个token的topK个专家索引。 INT32 ND
assist_info_for_combine 输入 表示同一专家收到的token个数。 INT32 ND
ep_send_counts 输入 从EP通信域各卡接收的token数。 INT32 ND
expert_scales 输入 每个token的topK个专家的权重。 FLOAT32 ND
tp_send_counts_optional 可选输入 从TP通信域各卡接收的token数,对应MoeDistributeDispatchV3中的tp_recv_counts输出,有TP域通信需传参,无TP域通信传空指针。 INT32 ND
x_active_mask_optional 可选输入 表示token是否参与通信,可传有效数据或空指针;1D时true需排在false前(例:{true, false, true}非法),2D时token对应K个值全为false则不参与通信;默认所有token参与通信;各卡BS不一致时所有token需有效。 BOOL ND
activation_scale_optional 可选输入 预留参数,当前版本不支持,传空指针即可。 - ND
weight_scale_optional 可选输入 预留参数,当前版本不支持,传空指针即可。 - ND
group_list_optional 可选输入 预留参数,当前版本不支持,传空指针即可。 - ND
expand_scales_optional 可选输入 表示本卡token的权重,对应MoeDistributeDispatchV3中的expand_scales输出。 FLOAT32 ND
shared_expert_x_optional 可选输入 表示共享专家计算后的token,数据类型需与expand_x一致。 FLOAT16、BFLOAT16 ND
elastic_info_optional 可选输入 EP通信域动态缩容信息。 INT32 ND
ori_x_optional 可选输入 表示未经过FFN(Feed-Forward Neural network)的token数据,在使能copyExpert或使能constExpert的场景下需要本输入数据。 FLOAT16、BFLOAT16 ND
const_expert_alpha_1_optional 可选输入 在使能constExpert的场景下需要输入的计算系数。 FLOAT16、BFLOAT16 ND
const_expert_alpha_2_optional 可选输入 在使能constExpert的场景下需要输入的计算系数。 FLOAT16、BFLOAT16 ND
const_expert_v_optional 可选输入 在使能constExpert的场景下需要输入的计算系数。 FLOAT16、BFLOAT16 ND
performance_info_optional 可选输入 表示本卡等待各卡数据的通信时间,单位为us(微秒)。单次算子调用各卡通信耗时会累加到该Tensor上,算子内部不进行自动清零,因此用户每次启用此Tensor开始记录耗时前需对Tensor清零。 INT64 ND
ep_world_size 属性 EP通信域大小。 INT64 ND
ep_rank_id 属性 EP域本卡Id,取值范围[0, ep_world_size),同一个EP通信域中各卡的ep_rank_id不重复。 INT64 ND
moe_expert_num 属性 MoE专家数量,满足moe_expert_num % (ep_world_size - shared_expert_num) = 0。 INT64 ND
ccl_buffer_size 属性
  • 当前通信域Buffer大小。
  • 默认值为""。
  • STRING ND
    tp_world_size 可选属性
  • TP通信域大小。
  • 默认值为0。
  • INT64 ND
    tp_rank_id 可选属性
  • TP域本卡Id,无TP域通信时传0即可。
  • 默认值为0。
  • INT64 ND
    expert_shard_type 可选属性
  • 表示共享专家卡分布类型,当前仅支持传0,表示共享专家卡排在MoE专家卡前面。
  • 默认值为0。
  • INT64 ND
    shared_expert_num 可选属性
  • 表示共享专家数量(一个共享专家可复制部署到多个卡上)。
  • 默认值为1。
  • INT64 ND
    shared_expert_rank_num 可选属性
  • 表示共享专家卡数量,取值范围[0, ep_world_size);为0时需满足shared_expert_num为0或1,不为0时需满足shared_expert_rank_num % shared_expert_num = 0。
  • 默认值为0。
  • INT64 ND
    global_bs 可选属性
  • EP域全局的batch size大小;各rank BS一致时,global_bs = BS * ep_world_size 或 0;各rank BS不一致时,global_bs = max_bs * ep_world_size(max_bs为单卡Bs最大值)。
  • 默认值为0。
  • INT64 ND
    out_dtype 可选属性
  • 用于指定输出x的数据类型,预留参数,当前版本不支持,传0即可。
  • 默认值为0。
  • INT64 ND
    comm_quant_mode 可选属性
  • 通信量化类型,取值范围0或2;0表示通信不量化,2表示通信int8量化。
  • 默认值为0。
  • INT64 ND
    group_list_type 可选属性
  • group_list格式,预留参数,当前版本不支持,传0即可。
  • 默认值为0。
  • INT64 ND
    comm_alg 可选属性
  • 表示通信亲和内存布局算法。
  • 默认值为""。
  • STRING ND
    zero_expert_num 可选属性
  • 零专家数量。
  • 默认值为0。
  • INT64 ND
    copy_expert_num 可选属性
  • copy专家数量。
  • 默认值为0。
  • INT64 ND
    const_expert_num 可选属性
  • 常量专家数量。
  • 默认值为0。
  • INT64 ND
    x_out 输出 表示处理后的token,数据类型、数据格式与expand_x保持一致。 FLOAT16、BFLOAT16 ND
    • Atlas A3 训练系列产品/Atlas A3 推理系列产品:
      • 不支持expand_scales_optional
      • 不支持comm_alg

    约束说明

    • MoeDistributeDispatchV3CombineV3系列算子必须配套使用,具体参考调用示例。

    • 在不同产品型号、不同通信算法或不同版本中,MoeDistributeDispatchV3的Tensor输出assist_info_for_combine_outep_recv_counts_outtp_recv_counts_outexpand_scales_out中的元素值可能不同,使用时直接将上述Tensor传给CombineV3系列算子对应参数即可,模型其他业务逻辑不应对其存在依赖。

    • 调用算子过程中使用的ep_world_sizemoe_expert_numccl_buffer_sizetp_world_sizeexpert_shard_typeshared_expert_numshared_expert_numglobal_bscomm_alg参数取值所有卡需保持一致,网络中不同层中也需保持一致,且和MoeDistributeDispatchV3算子对应参数也保持一致。

    • 参数说明里shape格式说明:

      • A:表示本卡可能接收的最大token数量,取值范围如下:
        • 对于共享专家,要满足A = BS * ep_world_size * shared_expert_num / shared_expert_num
        • 对于MoE专家,当global_bs为0时,要满足A >= BS * ep_world_size * min(local_expert_num, K);当global_bs非0时,要满足A >= global_bs * min(local_expert_num, K)。
      • K:表示选取topK个专家,取值范围为0 < K ≤ 16同时满足0 < Kmoe_expert_num + zero_expert_num + copy_expert_num + const_expert_num
      • local_expert_num:表示本卡专家数量。
        • 对于共享专家卡,local_expert_num = 1
        • 对于MoE专家卡,local_expert_num = moe_expert_num / (ep_world_size - shared_expert_num),local_expert_num > 1时,不支持TP域通信。
    • 参数约束:

      • zero_expert_num:取值范围:[0, MAX_INT32),MAX_INT32 = 2^31 - 1, 合法的零专家的ID的值是[moe_expert_num, moe_expert_num + zero_expert_num)。
      • copy_expert_num:取值范围:[0, MAX_INT32),MAX_INT32 = 2^31 - 1, 合法的copy专家的ID的值是[moe_expert_num + zero_expert_num, moe_expert_num + zero_expert_num + copy_expert_num)。
      • const_expert_num:取值范围:[0, MAX_INT32),MAX_INT32 = 2^31 - 1, 合法的常量专家的ID的值是[moe_expert_num + zero_expert_num + copy_expert_num, moe_expert_num + zero_expert_num + copy_expert_num + const_expert_num)。
      • ori_x_optional:可选择传入有效数据或填空指针,当copy_expert_num不为0或const_expert_num不为0时必须传入有效输入;当传入有效数据时,要求shape为 (BS, H),数据类型需与expand_x保持一致。
      • const_expert_alpha_1_optional:可选择传入有效数据或填空指针,当const_expert_num不为0时必须传入有效输入;当传入有效数据时,要求shape为(const_expert_num, ),数据类型需与expand_x保持一致。
      • const_expert_alpha_2_optional:可选择传入有效数据或填空指针,当const_expert_num不为0时必须传入有效输入;当传入有效数据时,要求shape为(const_expert_num, ),数据类型需与expand_x保持一致。
      • const_expert_v_optional:可选择传入有效数据或填空指针,当const_expert_num不为0时必须传入有效输入;当传入有效数据时,要求shape为(const_expert_num, H),数据类型需与expand_x保持一致。
    • 本文公式中的"/"表示整除。

    • 通信域使用约束:

      • 一个模型中的MoeDistributeCombineV3MoeDistributeDispatchV3仅支持相同EP通信域,且该通信域中不允许有其他算子。
      • 一个模型中的MoeDistributeCombineV3MoeDistributeDispatchV3仅支持相同TP通信域或都不支持TP通信域,有TP通信域时该通信域中不允许有其他算子。
    • Atlas A3 训练系列产品/Atlas A3 推理系列产品:

      • 该场景下单卡包含双DIE(简称为“晶粒”或“裸片”),因此参数说明里的“本卡”均表示单DIE。
      • 参数说明里shape格式说明:
        • H:表示hidden size隐藏层大小,取值范围[1024, 8192]。
        • BS:表示batch sequence size,即本卡最终输出的token数量,取值范围为[1, 512]。
      • 参数约束:
        • ep_world_size:取值支持8、16、32、64、128、144、256、288。
        • moe_expert_num:取值范围(0, 1024]。
        • tp_world_size:取值范围[0, 2],0和1表示无TP域通信,有TP域通信时仅支持2。
        • tp_rank_id:取值范围[0, 1],同一个TP通信域中各卡的tp_rank_id不重复。无TP域通信时,传0即可。
        • shared_expert_num:当前取值范围[0, 4]。
        • comm_quant_mode:int8量化当且仅当tp_world_size < 2时可使能。
        • performance_info_optional:预留参数,当前版本不支持,传空指针即可。
        • ccl_buffer_size:调用get_low_latency_ccl_buffer_size接口(../../torch_extension/npu_ops_transformer/ops/deep_ep.py)。

    调用说明

    调用方式 样例代码 说明
    npu_low_latency_combine接口 deepep.py 通过npu_low_latency_combine接口方式调用moe_distribute_combine_v3算子。