文件最后提交记录最后更新时间
D&C 示例代码修复 Co-authored-by: jiangxiuhan1<jiangxiuhan@huawei.com> # message auto-generated for no-merge-commit merge: !4371 merge master into master D&C 示例代码修复 Created-by: jiangxiuhan1 Commit-by: jiangxiuhan1 Merged-by: cann-robot Description: ## 描述 IS_TEST_* 需要手动设置,直接运行示例代码,没有设置IS_TEST_* 会导致 example 运行失败,example daily会运行失败; 修复上述问题,将原先独立的IS_TEST_A3和IS_TEST_A5布尔标志合并为统一的IS_TEST_A3A5标志,并设置为true,可直接运行示例代码。 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/1948 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: # 代码检视报告 **检视文件**:test_aclnn_moe_distribute_combine_v2.cpp **检视类别**:C++ 安全编码规范(Host 侧测试代码) **规范来源**:cpp-secure.mdascendc-topk.md **检视时间**:2026-04-20 --- ## 风险点列表 ### 【中风险】问题1:LOG 参数类型不匹配 **代码位置**:116-118 行、80 行 ```cpp LOG_PRINT("[INFO] rank = %d, ...", args.rankId, ...); // args.rankId 是 uint32_t,应用 %u LOG_PRINT("[ERROR] aclrtMalloc failed. ret: %d\n", ret); // ret 是 int,%d 正确 ``` **假设检验过程**: | 证据类型 | 分析动作 | 分值 | |---------|---------|------| | 规范违反 | 规则 11.3:LOG 参数类型与格式化说明符不匹配 | +40% | | 上下文防御缺失 | 无类型检查 | +30% | **自信值**:70%(> 60%,判定存在风险) **规范条款**:规则 11.3 LOG API 参数类型必须与格式化说明符匹配 [适用: Tiling] **建议修复**:uint32_t 类型使用 %u 而非 %d。 --- ### 【中风险】问题2:资源释放后未置空 **代码位置**:315-320 行、576-581 行 ```cpp if (dispatchV2WorkspaceSize > 0) { aclrtFree(dispatchV2WorkspaceAddr); // 释放后未置 nullptr } ``` **假设检验过程**: | 证据类型 | 分析动作 | 分值 | |---------|---------|------| | 规范违反 | 规则 3.2:资源释放后指针应置新值 | +40% | | 上下文防御缺失 | 后续无重复使用,但不符合规范 | +20% | **自信值**:60%(= 60%,判定存在风险) **规范条款**:规则 3.2 指向资源句柄的变量,在资源释放后立即赋予新值 [适用: Tiling] **建议修复**: ```cpp if (dispatchV2WorkspaceSize > 0) { aclrtFree(dispatchV2WorkspaceAddr); dispatchV2WorkspaceAddr = nullptr; } ``` --- ### 【中风险】问题3:函数返回值未校验 **代码位置**:768-772 行 ```cpp if (IS_TEST_A2) { int ret = run_example_on_A2(); // 返回值未使用 } else if (IS_TEST_A3A5) { int ret = run_example_on_A3A5(); // 返回值未使用 } ``` **假设检验过程**: | 证据类型 | 分析动作 | 分值 | |---------|---------|------| | 规范违反 | TOPK 问题1:必须校验函数返回值 | +40% | | 上下文防御缺失 | 未处理执行失败情况 | +30% | **自信值**:70%(> 60%,判定存在风险) **规范条款**:TOPK 问题清单 规则 1 必须校验函数返回值 [适用: Host] --- ## 检视总结 | 风险级别 | 数量 | 问题类型 | |---------|------|---------| | 中风险 | 3 | LOG类型不匹配、资源释放后未置空、返回值未校验 | # 代码检视报告 **检视文件**:test_aclnn_moe_distribute_dispatch_v2.cpp **检视类别**:C++ 安全编码规范(Host 侧测试代码) **规范来源**:cpp-secure.mdascendc-topk.md **检视时间**:2026-04-20 --- ## 风险点列表 ### 【中风险】问题1:LOG 参数类型不匹配 **代码位置**:115 行、361 行 ```cpp LOG_PRINT("[INFO] rank = %d, ...", args.rankId, ...); // args.rankId 是 uint32_t,应用 %u ``` **假设检验过程**: | 证据类型 | 分析动作 | 分值 | |---------|---------|------| | 规范违反 | 规则 11.3:LOG 参数类型与格式化说明符不匹配 | +40% | | 上下文防御缺失 | 无类型检查 | +30% | **自信值**:70%(> 60%,判定存在风险) **规范条款**:规则 11.3 LOG API 参数类型必须与格式化说明符匹配 [适用: Tiling] --- ### 【中风险】问题2:资源释放后未置空 **代码位置**:314-318 行、572-577 行 ```cpp if (dispatchV2WorkspaceSize > 0) { aclrtFree(dispatchV2WorkspaceAddr); // 释放后未置 nullptr } ``` **假设检验过程**: | 证据类型 | 分析动作 | 分值 | |---------|---------|------| | 规范违反 | 规则 3.2:资源释放后指针应置新值 | +40% | | 上下文防御缺失 | 后续无重复使用,但不符合规范 | +20% | **自信值**:60%(= 60%,判定存在风险) **规范条款**:规则 3.2 指向资源句柄的变量,在资源释放后立即赋予新值 [适用: Tiling] --- ### 【中风险】问题3:函数返回值未校验 **代码位置**:763 行、767 行 ```cpp if (IS_TEST_A2) { LOG_PRINT("Example on <Atlas A2> will be executed!\n"); int ret = run_example_on_A2(); // 返回值未使用 } else if (IS_TEST_A3A5) { LOG_PRINT("Example on <Atlas A3> or <Atlas A5> will be executed!\n"); int ret = run_example_on_A3A5(); // 返回值未使用 } ``` **假设检验过程**: | 证据类型 | 分析动作 | 分值 | |---------|---------|------| | 规范违反 | TOPK 问题1:必须校验函数返回值 | +40% | | 上下文防御缺失 | 未处理执行失败情况 | +30% | **自信值**:70%(> 60%,判定存在风险) **规范条款**:TOPK 问题清单 规则 1 必须校验函数返回值 [适用: Host] --- ## 检视总结 | 风险级别 | 数量 | 问题类型 | |---------|------|---------| | 中风险 | 3 | LOG类型不匹配、资源释放后未置空、返回值未校验 | See merge request: cann/ops-transformer!43711 个月前
D&C 示例代码修复 Co-authored-by: jiangxiuhan1<jiangxiuhan@huawei.com> # message auto-generated for no-merge-commit merge: !4371 merge master into master D&C 示例代码修复 Created-by: jiangxiuhan1 Commit-by: jiangxiuhan1 Merged-by: cann-robot Description: ## 描述 IS_TEST_* 需要手动设置,直接运行示例代码,没有设置IS_TEST_* 会导致 example 运行失败,example daily会运行失败; 修复上述问题,将原先独立的IS_TEST_A3和IS_TEST_A5布尔标志合并为统一的IS_TEST_A3A5标志,并设置为true,可直接运行示例代码。 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/1948 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: # 代码检视报告 **检视文件**:test_aclnn_moe_distribute_combine_v2.cpp **检视类别**:C++ 安全编码规范(Host 侧测试代码) **规范来源**:cpp-secure.mdascendc-topk.md **检视时间**:2026-04-20 --- ## 风险点列表 ### 【中风险】问题1:LOG 参数类型不匹配 **代码位置**:116-118 行、80 行 ```cpp LOG_PRINT("[INFO] rank = %d, ...", args.rankId, ...); // args.rankId 是 uint32_t,应用 %u LOG_PRINT("[ERROR] aclrtMalloc failed. ret: %d\n", ret); // ret 是 int,%d 正确 ``` **假设检验过程**: | 证据类型 | 分析动作 | 分值 | |---------|---------|------| | 规范违反 | 规则 11.3:LOG 参数类型与格式化说明符不匹配 | +40% | | 上下文防御缺失 | 无类型检查 | +30% | **自信值**:70%(> 60%,判定存在风险) **规范条款**:规则 11.3 LOG API 参数类型必须与格式化说明符匹配 [适用: Tiling] **建议修复**:uint32_t 类型使用 %u 而非 %d。 --- ### 【中风险】问题2:资源释放后未置空 **代码位置**:315-320 行、576-581 行 ```cpp if (dispatchV2WorkspaceSize > 0) { aclrtFree(dispatchV2WorkspaceAddr); // 释放后未置 nullptr } ``` **假设检验过程**: | 证据类型 | 分析动作 | 分值 | |---------|---------|------| | 规范违反 | 规则 3.2:资源释放后指针应置新值 | +40% | | 上下文防御缺失 | 后续无重复使用,但不符合规范 | +20% | **自信值**:60%(= 60%,判定存在风险) **规范条款**:规则 3.2 指向资源句柄的变量,在资源释放后立即赋予新值 [适用: Tiling] **建议修复**: ```cpp if (dispatchV2WorkspaceSize > 0) { aclrtFree(dispatchV2WorkspaceAddr); dispatchV2WorkspaceAddr = nullptr; } ``` --- ### 【中风险】问题3:函数返回值未校验 **代码位置**:768-772 行 ```cpp if (IS_TEST_A2) { int ret = run_example_on_A2(); // 返回值未使用 } else if (IS_TEST_A3A5) { int ret = run_example_on_A3A5(); // 返回值未使用 } ``` **假设检验过程**: | 证据类型 | 分析动作 | 分值 | |---------|---------|------| | 规范违反 | TOPK 问题1:必须校验函数返回值 | +40% | | 上下文防御缺失 | 未处理执行失败情况 | +30% | **自信值**:70%(> 60%,判定存在风险) **规范条款**:TOPK 问题清单 规则 1 必须校验函数返回值 [适用: Host] --- ## 检视总结 | 风险级别 | 数量 | 问题类型 | |---------|------|---------| | 中风险 | 3 | LOG类型不匹配、资源释放后未置空、返回值未校验 | # 代码检视报告 **检视文件**:test_aclnn_moe_distribute_dispatch_v2.cpp **检视类别**:C++ 安全编码规范(Host 侧测试代码) **规范来源**:cpp-secure.mdascendc-topk.md **检视时间**:2026-04-20 --- ## 风险点列表 ### 【中风险】问题1:LOG 参数类型不匹配 **代码位置**:115 行、361 行 ```cpp LOG_PRINT("[INFO] rank = %d, ...", args.rankId, ...); // args.rankId 是 uint32_t,应用 %u ``` **假设检验过程**: | 证据类型 | 分析动作 | 分值 | |---------|---------|------| | 规范违反 | 规则 11.3:LOG 参数类型与格式化说明符不匹配 | +40% | | 上下文防御缺失 | 无类型检查 | +30% | **自信值**:70%(> 60%,判定存在风险) **规范条款**:规则 11.3 LOG API 参数类型必须与格式化说明符匹配 [适用: Tiling] --- ### 【中风险】问题2:资源释放后未置空 **代码位置**:314-318 行、572-577 行 ```cpp if (dispatchV2WorkspaceSize > 0) { aclrtFree(dispatchV2WorkspaceAddr); // 释放后未置 nullptr } ``` **假设检验过程**: | 证据类型 | 分析动作 | 分值 | |---------|---------|------| | 规范违反 | 规则 3.2:资源释放后指针应置新值 | +40% | | 上下文防御缺失 | 后续无重复使用,但不符合规范 | +20% | **自信值**:60%(= 60%,判定存在风险) **规范条款**:规则 3.2 指向资源句柄的变量,在资源释放后立即赋予新值 [适用: Tiling] --- ### 【中风险】问题3:函数返回值未校验 **代码位置**:763 行、767 行 ```cpp if (IS_TEST_A2) { LOG_PRINT("Example on <Atlas A2> will be executed!\n"); int ret = run_example_on_A2(); // 返回值未使用 } else if (IS_TEST_A3A5) { LOG_PRINT("Example on <Atlas A3> or <Atlas A5> will be executed!\n"); int ret = run_example_on_A3A5(); // 返回值未使用 } ``` **假设检验过程**: | 证据类型 | 分析动作 | 分值 | |---------|---------|------| | 规范违反 | TOPK 问题1:必须校验函数返回值 | +40% | | 上下文防御缺失 | 未处理执行失败情况 | +30% | **自信值**:70%(> 60%,判定存在风险) **规范条款**:TOPK 问题清单 规则 1 必须校验函数返回值 [适用: Host] --- ## 检视总结 | 风险级别 | 数量 | 问题类型 | |---------|------|---------| | 中风险 | 3 | LOG类型不匹配、资源释放后未置空、返回值未校验 | See merge request: cann/ops-transformer!43711 个月前
修改Dspatch&combine红线问题 Co-authored-by: zzg_code<zengzhiguo1@huawei.com> # message auto-generated for no-merge-commit merge: !5194 merge temp into master 修改Dspatch&combine红线问题 Created-by: zzg_code Commit-by: zzg_code Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2365 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!519417 天前
move fallback files to op graph lib Co-authored-by: liusixia<liusixia@h-partners.com> # message auto-generated for no-merge-commit merge: !4133 merge master into master move fallback files to op graph lib Created-by: liusixia_gitcode Commit-by: liusixia Merged-by: cann-robot Description: ## 描述 动态图相关:仓内aclnn回调的fallback文件,在内置工程(built-in pkg)下,由ophost.so 改为编入opgraph.so中;自定义工程(custom pkg)下,保持不变。 其中,mc2算子的fallback文件当前均include了依赖tiling的头文件(mc2_log.h),统一将其与tiling解耦,使用mc2_common_log.h。 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/1844 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [x] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!41331 个月前
combine support 10240 hidden size and 1024 moe expert num Co-authored-by: ryan_li<liyang843@h-partners.com> # message auto-generated for no-merge-commit merge: !2402 merge combine_h10240 into master combine support 10240 hidden size and 1024 moe expert num Created-by: ryan_li Commit-by: ryan_li Merged-by: cann-robot Description: ## 描述 combine support 10240 hidden size and 1024 moe expert num ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!240217 天前
combine support 10240 hidden size and 1024 moe expert num Co-authored-by: ryan_li<liyang843@h-partners.com> # message auto-generated for no-merge-commit merge: !2402 merge combine_h10240 into master combine support 10240 hidden size and 1024 moe expert num Created-by: ryan_li Commit-by: ryan_li Merged-by: cann-robot Description: ## 描述 combine support 10240 hidden size and 1024 moe expert num ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!240217 天前
agent实现combine v2 UT补充 Co-authored-by: y00951989<yangshengjun3@huawei.com> # message auto-generated for no-merge-commit merge: !4743 merge ut_pr into master agent实现combine v2 UT补充 Created-by: yangshengjun703 Commit-by: y00951989 Merged-by: cann-robot Description: ## 关联Issue 关联的Issue [https://gitcode.com/cann/ops-transformer/issues/2137](url) ## 测试 本地UT测试、蓝区编译、流水编排均已通过 # 代码检视报告 **项目名称**:moe_distribute_combine_v2 算子 UT 测试用例检视 **检视模块**:mc2/moe_distribute_combine_v2/tests/ut/op_host/arch35/test_moe_distribute_combine_v2_tiling.csv **检视人**:Turing Team **检视日期**:2026-04-27 --- ## 🔍 检视概览 | 统计项 | 数值 | | ---- | ---- | | 检视模式 | PR 检视(新增测试用例) | | 文件类型 | CSV 测试配置文件(非源代码) | | 新增测试用例 | 53 个(test7 ~ test59) | | SUCCESS 用例 | 16 个 | | FAILED 用例 | 37 个 | | 检视条款数 | 8 条(UT专用检视维度) | | 发现问题数 | 5 个(4个待确认项 + 1个建议项) | **核心结论**:测试用例设计整体规范良好,命名一致、边界覆盖充分、异常场景丰富。存在4处参数标注需确认合理性,建议补充特殊值测试用例。 --- ## ✅ 变更概述 ### 变更文件 - **路径**:mc2/moe_distribute_combine_v2/tests/ut/op_host/arch35/test_moe_distribute_combine_v2_tiling.csv - **类型**:UT 测试用例配置文件(CSV 格式) - **平台**:arch35(Ascend950/Ascend310P) ### 变更内容 - **变更类型**:新增 53 个测试用例 - **用例范围**:arch35_test7arch35_test59 - **预期结果分布**: - SUCCESS:16 个(用于正常功能验证) - FAILED:37 个(用于异常场景验证) ### SUCCESS 用例分布 | 测试ID | 主要特征 | |-------|---------| | test7, test8 | 标准参数组合 | | test42, test43, test44 | 基础功能验证(含Ascend310P) | | test46 | 大规模测试(128 expert) | | test48 | 超大规模测试(4096 token) | | test50-52 | 基础验证 | | test55 | BF16 类型验证 | | test56-59 | hidden_size 变化验证(1024/2048/4096/8192) | --- ## 📊 代码质量评估 ### 评分维度 | 评估维度 | 权重 | 得分 | 说明 | |---------|------|------|------| | 命名规范 | 10% | 100 | 命名格式统一,序号连续 | | 参数设计 | 25% | 95 | 参数组合有效,覆盖多种场景 | | 边界覆盖 | 20% | 95 | 边界值覆盖充分 | | 异常覆盖 | 20% | 90 | 异常场景丰富,个别需确认 | | 平台适配 | 10% | 85 | 双平台覆盖,差异体现待优化 | | TOPK覆盖 | 15% | 70 | 部分TOPK场景无法通过CSV验证 | ### 总体评分 **综合得分:90/100** --- ## 🎯 多维度检视结果 ### UT-001: 测试用例命名规范 ✅ PASS | 检视项 | 结果 | 置信度 | |-------|------|-------| | 命名格式统一性 | ✅ 通过 | HIGH (95%) | | 序号连续性 | ✅ 通过 | HIGH (95%) | | 命名可读性 | ✅ 通过 | HIGH (95%) | **结论**:所有测试用例遵循 arch35_test<序号> 格式,序号从 test6 连续递增至 test59,命名规范符合要求。 --- ### UT-002: 预期结果合理性 ⚠️ 有待确认项 | 检视项 | 结果 | 置信度 | |-------|------|-------| | SUCCESS标注合理性 | ✅ 通过 | HIGH (90%) | | FAILED标注合理性 | ⚠️ 3个待确认 | MED (75%) | **待确认项详情**: | 问题ID | 测试ID | 问题描述 | 置信度 | |-------|-------|---------|-------| | P1 | test13 | ep_group偏移=0但标记FAILED,需确认是否算子规格不允许偏移为0 | MED (65%) | | P2 | test24 | hidden_size=4096小于标准值7168,标记FAILED需确认合理性 | MED (65%) | | P3 | test47 | expert_num=17,需确认是否超过算子规格限制 | MED (65%) | --- ### UT-003: 参数组合有效性 ✅ PASS | 检视项 | 结果 | 置信度 | |-------|------|-------| | Dtype合法性 | ✅ 通过 | HIGH (90%) | | Shape维度合法性 | ✅ 通过 | HIGH (90%) | | 参数值合法性 | ✅ 通过 | HIGH (90%) | **结论**:Dtype类型(FLOAT16/INT32/FLOAT/BF16/BOOL)使用合法,Shape维度设计合理,异常参数用于测试目的明确。 --- ### UT-004: 边界值覆盖 ✅ PASS | 边界类型 | 测试覆盖 | 置信度 | |---------|---------|-------| | 零值边界 | test53, test54 | HIGH (95%) | | 最小值 | test40 | HIGH (95%) | | 最大值 | test48, test35 | HIGH (95%) | | 特殊值 | test16, test17 | HIGH (95%) | | 负值 | test11, test37 | HIGH (95%) | | 超限值 | test12, test19 | HIGH (95%) | **结论**:边界值覆盖充分,包括零值、最小值、最大值、负值、超限值等多种边界场景。 --- ### UT-005: 异常场景覆盖 ⚠️ 有待确认项 | 异常类型 | 测试覆盖 | 置信度 | |---------|---------|-------| | Dtype不匹配 | test26-34 | HIGH (90%) | | Shape不匹配 | test25, test27-29 | HIGH (90%) | | 参数越界 | test12-22, test35-39 | HIGH (90%) | | 参数冲突 | test9-15, test21-22 | HIGH (90%) | | 非法算法名 | test41 | HIGH (90%) | | 参数缺失/空值 | test13 | ⚠️ MED (65%) | **结论**:异常场景覆盖充分,但test13的空值参数场景需确认。 --- ### UT-006: 平台适配性 ⚠️ 有待确认项 | 平台 | 测试覆盖 | 置信度 | |-----|---------|-------| | Ascend950 | 大部分用例 | HIGH (90%) | | Ascend310P | test3, test42 | LOW (55%) | **待确认项**: | 问题ID | 测试ID | 问题描述 | 置信度 | |-------|-------|---------|-------| | P4 | test42 | Ascend310P平台用例参数与Ascend950一致,平台差异未明显体现 | LOW (55%) | --- ### UT-007: 参数一致性 ✅ PASS | 检视项 | 结果 | 置信度 | |-------|------|-------| | 输入输出对应关系 | ✅ 通过 | HIGH (90%) | | 异常场景标识 | ✅ 通过 | HIGH (90%) | **结论**:SUCCESS用例输入输出对应关系合理,FAILED用例异常特征明确。 --- ### UT-008: TOPK问题场景覆盖 ⚠️ 有建议项 | TOPK类别 | CSV可验证项 | 测试覆盖 | 置信度 | |---------|------------|---------|-------| | 数值安全 | 边界值测试 | ✅ test53-54 | HIGH (80%) | | 内存安全 | Shape边界 | ✅ test16, test40 | MED (70%) | | 输入验证 | 异常参数 | ✅ test9-41 | HIGH (80%) | | API使用 | 无法验证 | ❌ | - | | 并发安全 | 无法验证 | ❌ | - | | **特殊值处理** | **nan/inf测试** | **❌ 未覆盖** | - | **建议项**: | 问题ID | TOPK条款 | 建议内容 | |-------|---------|---------| | P5 | TOPK-6 | 建议添加 nan/inf/+0/-0 等特殊值的测试用例,验证算子对特殊值处理能力 | --- ## 📈 测试用例覆盖度分析 ### 功能维度覆盖 | 功能维度 | 覆盖度 | 测试用例 | |---------|-------|---------| | 基础功能 | ✅ 100% | test7-8, test42-44, test50-52 | | 大规模数据 | ✅ 100% | test46, test48 | | BF16类型 | ✅ 100% | test55 | | hidden_size变化 | ✅ 100% | test56-59 | ### 异常维度覆盖 | 异常维度 | 覆盖度 | 测试用例 | |---------|-------|---------| | Dtype不匹配 | ✅ 充分 | test26-34 | | Shape异常 | ✅ 充分 | test16, test25, test27-29 | | 参数越界 | ✅ 充分 | test12-22, test35-39 | | 参数冲突 | ✅ 充分 | test9-15, test21-22 | | 边界值 | ✅ 充分 | test53-54, test40 | | 非法算法 | ✅ 充分 | test41 | ### 平台维度覆盖 | 平台 | 覆盖度 | 说明 | |-----|-------|------| | Ascend950 | ✅ 主要 | 51个测试用例 | | Ascend310P | ⚠️ 部分 | 仅2个用例(test3, test42),差异体现不足 | --- ## ❌ 发现的问题及建议 ### 问题ID:P1 | 严重级别:MEDIUM #### 问题描述 **测试ID**:test13 **问题类型**:预期结果待确认 **详情**:ep_group偏移=0时标记为FAILED,需确认算子规格是否允许偏移为0。如果偏移为0是合法场景,应改为SUCCESS;如果是非法场景,建议添加注释说明失败原因。 #### 建议 确认 moe_distribute_combine_v2 算子规格中 ep_group 偏移参数的合法范围,调整预期结果或添加失败原因说明。 --- ### 问题ID:P2 | 严重级别:MEDIUM #### 问题描述 **测试ID**:test24 **问题类型**:预期结果待确认 **详情**:hidden_size=4096(小于标准值7168)时标记为FAILED,需确认算子是否要求hidden_size必须为特定值。如果4096是合法值,应改为SUCCESS。 #### 建议 确认算子规格中 hidden_size 参数的合法范围,调整预期结果。 --- ### 问题ID:P3 | 严重级别:MEDIUM #### 问题描述 **测试ID**:test47 **问题类型**:参数限制待确认 **详情**:expert_num=17(超出常规值8),标记为FAILED,需确认算子是否对expert_num有最大值限制。 #### 建议 确认算子规格中 expert_num 的最大值限制,验证FAILED标注合理性。 --- ### 问题ID:P4 | 严重级别:LOW #### 问题描述 **测试ID**:test42 **问题类型**:平台差异不明确 **详情**:test42使用Ascend310P平台,但参数配置与Ascend950用例一致。两个平台的计算能力、内存规格存在差异,建议在Ascend310P用例中体现平台特性差异。 #### 建议 为Ascend310P平台设计更具代表性的测试用例,体现平台规格差异(如 ubSize、coreNum等)。 --- ### 问题ID:P5 | 严重级别:建议 #### 问题描述 **TOPK条款**:TOPK-6(特殊值处理) **问题类型**:测试覆盖缺失 **详情**:根据TOPK问题清单第6条,算子必须考虑 nan/inf/+0/-0 等特殊值处理。当前测试用例中未发现针对这些特殊值的测试场景。 #### 建议 新增测试用例,覆盖以下特殊值场景: - 输入包含 nan/inf 值 - 输入包含 +0/-0 值 - 输出边界值(FP16溢出转inf) - 归约运算中包含特殊值 --- ## 📋 检视结论 ### 检视完成状态 ``` ══════════════════════════════════════ 检视任务清单(共 8 条) ══════════════════════════════════════ ✅ UT-001: 测试用例命名规范检视 - 通过 ⚠️ UT-002: 预期结果合理性检视 - 有3个待确认项 ✅ UT-003: 参数组合有效性检视 - 通过 ✅ UT-004: 边界值覆盖检视 - 通过 ⚠️ UT-005: 异常场景覆盖检视 - 有1个待确认项 ⚠️ UT-006: 平台适配性检视 - 有1个待确认项 ✅ UT-007: 参数一致性检视 - 通过 ⚠️ UT-008: TOPK问题场景覆盖检视 - 有1个建议项 ══════════════════════════════════════ ``` ### 总结 | 维度 | 结论 | |-----|------| | **命名规范** | ✅ 完全符合要求,命名格式统一、序号连续 | | **参数设计** | ✅ 参数组合丰富,覆盖正常和异常场景 | | **边界覆盖** | ✅ 边界值测试充分,包含零值、极值、负值 | | **异常覆盖** | ⚠️ 异常场景丰富,但4处FAILED标注需确认合理性 | | **平台适配** | ⚠️ Ascend310P覆盖不足,建议补充平台差异化测试 | | **TOPK覆盖** | ⚠️ 特殊值测试缺失,建议补充nan/inf测试 | ### 建议优先级 | 优先级 | 建议项 | |-------|-------| | **P1 高** | 确认test13、test24、test47的FAILED标注合理性 | | **P2 中** | 补充Ascend310P平台差异化测试用例 | | **P3 低** | 补充nan/inf/+0/-0特殊值测试用例 | --- ## 报告生成时间 2026-04-27 ## 报告状态 已完成检视,待确认项验证 See merge request: cann/ops-transformer!474329 天前
mc2新特性开发 Co-authored-by: xutianze<xutianze2@huawei.com> # message auto-generated for no-merge-commit merge: !500 merge feature_mc2 into master mc2新特性开发 Created-by: xutianze Commit-by: xutianze Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!5005 个月前
docs of MegaMoe Co-authored-by: OblivionZHU<zhujun116@huawei.com> # message auto-generated for no-merge-commit merge: !4833 merge master into master docs of MegaMoe Created-by: OblivionZHU Commit-by: OblivionZHU Merged-by: cann-robot Description: ## 描述 为MegaMoe算子添加文档说明,顺带更新D&C算子跨超说明 ## 关联的Issue [Requirement|需求建议]: 单一算子实现MoE Feed-Forward Network (FFN) 的完整计算流程 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 更新了README.md文件等。 ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!483329 天前
README.md

MoeDistributeCombineV2

产品支持情况

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

功能说明

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

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

    • 输入了更详细的token信息辅助MoeDistributeCombineV2高效地进行全卡同步,因此原算子中shape为(BS * K,)的expandIdx入参替换为shape为(A * 128,)的assistInfoForCombine参数;
    • 新增sharedExpertXOptional入参,支持在sharedExpertNum为0时,由用户输入共享专家计算后的token;
    • 新增commAlg入参,代替HCCL_INTRA_PCIE_ENABLEHCCL_INTRA_ROCE_ENABLE环境变量。 详细说明请参考以下参数说明。
  • 计算公式:

    • 不存在TP域通信时:

    ataOut=AllToAllV(expandX)xOut=Sum(expertScales∗ataOut+expertScales∗sharedExpertX)ataOut = AllToAllV(expandX)\\ xOut = Sum(expertScales * ataOut + expertScales * sharedExpertX)

    • 存在TP域通信时:

    rsOut=ReduceScatterV(expandX)ataOut=AllToAllV(rsOut)xOut=Sum(expertScales∗ataOut+expertScales∗sharedExpertX)rsOut = ReduceScatterV(expandX)\\ ataOut = AllToAllV(rsOut)\\ xOut = Sum(expertScales * ataOut + expertScales * sharedExpertX)

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

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
expandX 输入 根据expertIds进行扩展过的token特征。 FLOAT16、BFLOAT16 ND
expertIds 输入 每个token的topK个专家索引。 INT32 ND
assistInfoForCombine 输入 表示同一专家收到的token个数,对应MoeDistributeDispatchV2中的assistInfoForCombineOut输出。 INT32 ND
epSendCounts 输入 从EP通信域各卡接收的token数,对应MoeDistributeDispatchV2中的epRecvCounts输出。 INT32 ND
expertScales 输入 每个token的topK个专家的权重。 FLOAT32 ND
tpSendCountsOptional 可选输入 从TP通信域各卡接收的token数,对应MoeDistributeDispatchV2中的tpRecvCounts输出,有TP域通信需传参,无TP域通信传空指针。 INT32 ND
xActiveMaskOptional 可选输入 表示token是否参与通信,可传有效数据或空指针;1D时true需排在false前(例:{true, false, true}非法),2D时token对应K个值全为false则不参与通信;默认所有token参与通信;各卡BS不一致时所有token需有效。 BOOL ND
activationScaleOptional 可选输入 预留参数,当前版本不支持,传空指针即可。 - ND
weightScaleOptional 可选输入 预留参数,当前版本不支持,传空指针即可。 - ND
groupListOptional 可选输入 预留参数,当前版本不支持,传空指针即可。 - ND
expandScalesOptional 可选输入 表示本卡token的权重,对应MoeDistributeDispatchV2中的expandScales输出。 FLOAT32 ND
sharedExpertXOptional 可选输入 表示共享专家计算后的token,数据类型需与expandX一致。 FLOAT16、BFLOAT16 ND
elasticInfoOptional 可选输入 EP通信域动态缩容信息。 INT32 ND
oriXOptional 可选输入 表示未经过FFN(Feed-Forward Neural network)的token数据,在使能copyExpert或使能constExpert的场景下需要本输入数据。 FLOAT16、BFLOAT16 ND
constExpertAlpha1Optional 可选输入 在使能constExpert的场景下需要输入的计算系数。 FLOAT16、BFLOAT16 ND
constExpertAlpha2Optional 可选输入 在使能constExpert的场景下需要输入的计算系数。 FLOAT16、BFLOAT16 ND
constExpertVOptional 可选输入 在使能constExpert的场景下需要输入的计算系数。 FLOAT16、BFLOAT16 ND
performanceInfoOptional 可选输入 表示本卡等待各卡数据的通信时间,单位为us(微秒)。单次算子调用各卡通信耗时会累加到该Tensor上,算子内部不进行自动清零,因此用户每次启用此Tensor开始记录耗时前需对Tensor清零。 INT64 ND
groupEp 属性 EP通信域名称(专家并行通信域),字符串长度范围为[1, 128),不能和groupTp相同。 STRING ND
epWorldSize 属性 EP通信域大小。 INT64 ND
epRankId 属性 EP域本卡ID,取值范围[0, epWorldSize),同一个EP通信域中各卡的epRankId不重复。 INT64 ND
moeExpertNum 属性 MoE专家数量,满足moeExpertNum % (epWorldSize - sharedExpertRankNum) = 0。 INT64 ND
groupTp 可选属性
  • TP通信域名称(数据并行通信域)。
  • 默认值为""。
  • STRING ND
    tpWorldSize 可选属性
  • TP通信域大小。
  • 默认值为0。
  • INT64 ND
    tpRankId 可选属性
  • TP域本卡ID,无TP域通信时传0即可。
  • 默认值为0。
  • INT64 ND
    expertShardType 可选属性
  • 表示共享专家卡分布类型,当前仅支持传0,表示共享专家卡排在MoE专家卡前面。
  • 默认值为0。
  • INT64 ND
    sharedExpertNum 可选属性
  • 表示共享专家数量(一个共享专家可复制部署到多个卡上)。
  • 默认值为1。
  • INT64 ND
    sharedExpertRankNum 可选属性
  • 表示共享专家卡数量,取值范围[0, epWorldSize);为0时需满足sharedExpertNum为0或1,不为0时需满足sharedExpertRankNum % sharedExpertNum = 0。
  • 默认值为0。
  • INT64 ND
    globalBS 可选属性
  • EP域全局的batch size大小;各rank BS一致时,globalBS = BS * epWorldSize 或 0;各rank BS不一致时,globalBS = maxBS * epWorldSize(maxBS为单卡BS最大值)。
  • 默认值为0。
  • INT64 ND
    outDtype 可选属性
  • 用于指定输出x的数据类型,预留参数,当前版本不支持,传0即可。
  • 默认值为0。
  • INT64 ND
    commQuantMode 可选属性
  • 通信量化类型,取值范围0或2;0表示通信不量化,2表示通信int8量化。
  • 默认值为0。
  • INT64 ND
    groupListType 可选属性
  • groupList格式,预留参数,当前版本不支持,传0即可。
  • 默认值为0。
  • INT64 ND
    commAlg 可选属性
  • 表示通信亲和内存布局算法。
  • 默认值为""。
  • STRING ND
    zeroExpertNum 可选属性
  • 零专家数量。
  • 默认值为0。
  • INT64 ND
    copyExpertNum 可选属性
  • copy专家数量。
  • 默认值为0。
  • INT64 ND
    constExpertNum 可选属性
  • 常量专家数量。
  • 默认值为0。
  • INT64 ND
    xOut 输出 表示处理后的token,数据类型、数据格式与expandX保持一致。 FLOAT16、BFLOAT16 ND
    • Atlas A2 训练系列产品/Atlas A2 推理系列产品:
      • 不支持共享专家场景,不支持expertShardTypesharedExpertNumsharedExpertRankNumsharedExpertXOptional
      • 仅支持EP域,无TP域,不支持groupTptpWorldSizetpRankId属性,且tpRecvCounts输出为无效内容。
      • 不支持动态缩容场景,不支持elasticInfoOptional
      • commAlg = "hierarchy",必须传入expandScalesOptional
      • 不支持常量专家场景,不支持constExpertNumconstExpertAlpha1OptionalconstExpertAlpha2OptionalconstExpertVOptional,使用默认值即可。
    • Atlas A3 训练系列产品/Atlas A3 推理系列产品:

      • commAlg = "hierarchy",必须传入expandScalesOptional
      • commAlg 支持"","fullmesh_v1","fullmesh_v2", "hierarchy"三种输入方式。"":默认值,不使能fullmesh_v2模板;"fullmesh_v1":不使能fullmesh_v2模板;"fullmesh_v2":使能fullmesh_v2模板,该模板仅支持tpWorldSize为1场景;"hierarchy": 使能跨超模板,该模板仅支持tpWorldSize为1、共享专家为0的场景,且不支持可变BS、二维mask、特殊专家、performanceInfo场景。
      • epWorldSize 取值范围[2, 768];当commAlg="hierarchy"场景时,取值范围为[16, 256],且为16的整数倍。
      • moeExpertNum 取值范围(0, 1024];当commAlg="hierarchy"场景时,取值范围为(0, 512]。
    • Ascend 950PR/Ascend 950DT:

      • 不支持expandScalesOptional
      • 不支持commAlg
      • 仅支持EP域,无TP域,不支持groupTptpWorldSizetpRankId属性,且tpRecvCounts输出为无效内容。

    约束说明

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

    • 算子通信域各节点的驱动版本应当相同。

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

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

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

      • A:表示本卡可能接收的最大token数量,取值范围如下:
        • 对于共享专家,要满足A = BS * epWorldSize * sharedExpertNum / sharedExpertRankNum
        • 对于MoE专家,当globalBS为0时,要满足A >= BS * epWorldSize * min(localExpertNum, K);当globalBS非0时,要满足A >= globalBS * min(localExpertNum, K)。
      • K:表示选取topK个专家,取值范围为0 < K ≤ 16同时满足0 < KmoeExpertNum + zeroExpertNum + copyExpertNum + constExpertNum
      • localExpertNum:表示本卡专家数量。
        • 对于共享专家卡,localExpertNum = 1
        • 对于MoE专家卡,localExpertNum = moeExpertNum / (epWorldSize - sharedExpertRankNum),localExpertNum > 1时,不支持TP域通信。
    • 参数约束:

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

    • 通信域使用约束:

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

      • commAlg:当前版本支持nullptr, "", "fullmesh", "hierarchy"四种输入方式,若配置"hierarchy",建议搭配25.0.RC1.1及以上版本驱动使用。
        • nullptr和"":仅在此场景下,HCCL_INTRA_PCIE_ENABLEHCCL_INTRA_ROCE_ENABLE配置生效。当HCCL_INTRA_PCIE_ENABLE=1&&HCCL_INTRA_ROCE_ENABLE=0时,调用"hierarchy"算法,否则调用"fullmesh"算法。不推荐使用该方式。
        • "fullmesh":token数据直接通过RDMA方式发往topk个目标专家所在的卡。
        • "hierarchy":token数据经过跨机、机内两次发送,仅不同server同号卡之间使用RDMA通信,server内使用HCCS通信。
      • HCCL_INTRA_PCIE_ENABLEHCCL_INTRA_ROCE_ENABLE:不推荐使用该环境变量控制通信算法,原HCCL_INTRA_PCIE_ENABLE=1&&HCCL_INTRA_ROCE_ENABLE=0场景,下文均通过commAlg="hierarchy"替代,默认场景使用commAlg="fullmesh"替代。
      • commAlg = "hierarchy"时,不支持xActiveMaskOptionaloriXOptionalzeroExpertNumcopyExpertNum
      • 参数说明里shape格式说明:
        • H:表示hidden size隐藏层大小,取值范围(0, 7168],且保证是32的整数倍。
          • commAlg = "hierarchy"并且驱动版本≥25.0.RC1.1时支持(0, 10*1024]且为32的整数倍。
        • BS:表示batch sequence size,即本卡最终输出的token数量。
          • commAlg = "fullmesh":取值范围为[1, 256]。
          • commAlg = "hierarchy":取值范围为[1, 512]。
        • performanceInfoOptional:可选择传入有效数据或填空指针,传入空指针时表示不使能记录通信耗时功能;当传入有效数据时,要求是一个1D的Tensor,shape为(ep_world_size,),数据类型支持int64;数据格式要求为ND。
      • 属性约束:
        • epWorldSize:依commAlg取值,"fullmesh"支持2、3、4、5、6、7、8、16、32、64、128、192、256、384;"hierarchy"支持16、32、64。
        • moeExpertNum:取值范围(0, 512]。
        • commQuantMode:2,开启通信int8量化,仅当commAlg = "hierarchy"且驱动版本不低于25.0.RC1.1时支持。
      • HCCL_BUFFSIZE:调用本算子前需检查HCCL_BUFFSIZE环境变量取值是否合理,该环境变量表示单个通信域占用内存大小,单位MB,不配置时默认为200MB。
        • commAlg = "fullmesh":要求 >= (BS * epWorldSize * min(localExpertNum, K) * H * 4B + 4MB)。
        • commAlg = "hierarchy":要求 >= (moeExpertNum + epWorldSize / 4) * Align512(maxBS * (H * 2 + 16 * Align8(K))) * 1B + 8MB,其中Align8(x) = ((x + 8 - 1) / 8) * 8,Align512(x) = ((x + 512 - 1) / 512) * 512。
    • Atlas A3 训练系列产品/Atlas A3 推理系列产品:

      • 该场景下单卡包含双DIE(简称为“晶粒”或“裸片”),因此参数说明里的“本卡”均表示单DIE。
      • 参数说明里shape格式说明:
        • H:表示hidden size隐藏层大小,取值范围[1024, 8192]。
        • BS:表示batch sequence size,即本卡最终输出的token数量,取值范围为[1, 512]。
      • 参数约束:
        • epWorldSize:取值支持8、16、32、64、128、144、256、288。
        • moeExpertNum:取值范围(0, 1024]。
        • groupTp:字符串长度范围为[1, 128),不能和groupEp相同。
        • tpWorldSize:取值范围[0, 2],0和1表示无TP域通信,有TP域通信时仅支持2。
        • tpRankId:取值范围[0, 1],同一个TP通信域中各卡的tpRankId不重复。无TP域通信时,传0即可。
        • sharedExpertNum:当前取值范围[0, 4]。
        • commQuantMode:int8量化当且仅当tpWorldSize < 2时可使能。
        • performanceInfoOptional:预留参数,当前版本不支持,传空指针即可。
        • commAlg:当前支持"","hierarchy"两种输入方式。
          • "":默认值,使能通信域不跨超模板。
          • "hierarchy": 使能通信域跨超模板。
      • HCCL_BUFFSIZE:调用本算子前需检查HCCL_BUFFSIZE环境变量取值是否合理,该环境变量表示单个通信域占用内存大小,单位MB,不配置时默认为200MB。要求 >= 2且满足>= 2 * (localExpertNum * maxBS * epWorldSize * Align512(Align32(2 * H) + 64) + (K + sharedExpertNum) * maxBS * Align512(2 * H)),localExpertNum需使用MoE专家卡的本卡专家数,其中Align512(x) = ((x + 512 - 1) / 512) * 512,Align32(x) = ((x + 32 - 1) / 32) * 32。
    • Ascend 950PR/Ascend 950DT:

      • 参数说明里shape格式说明:
        • H:表示hidden size隐藏层大小,取值范围[1024, 8192]。
        • BS:表示batch sequence size,即本卡最终输出的token数量,取值范围为[1, 512]。
      • 参数约束:
        • epWorldSize:取值支持[2, 768]。
        • moeExpertNum:取值范围(0, 1024]。
        • groupTp当前版本不支持,传空字符即可。
        • tpWorldSize当前版本不支持,传0即可。
        • tpRankId当前版本不支持,传0即可。
        • expertShardType当前仅支持传0,表示共享专家卡排在MoE专家卡前面。
        • sharedExpertNum当前取值范围[0, 4]。
        • sharedExpertRankNum取值范围[0, epWorldSize);为0时需满足sharedExpertNum为0或1,不为0时需满足sharedExpertRankNum % sharedExpertNum = 0。
        • commQuantMode取值范围0或2(0表示不量化,2表示int8量化)。
        • performanceInfoOptional:预留参数,当前版本不支持,传空指针即可。
      • HCCL_BUFFSIZE:调用本算子前需检查HCCL_BUFFSIZE环境变量取值是否合理,该环境变量表示单个通信域占用内存大小,单位MB,不配置时默认为200MB。要求 >= 2且满足>= 2 * (localExpertNum * maxBS * epWorldSize * Align512(Align32(2 * H) + 64) + (K + sharedExpertNum) * maxBS * Align512(2 * H)),localExpertNum需使用MoE专家卡的本卡专家数,其中Align512(x) = ((x + 512 - 1) / 512) * 512,Align32(x) = ((x + 32 - 1) / 32) * 32。

    调用说明

    调用方式 样例代码 说明
    aclnn接口 test_aclnn_moe_distribute_combine_v2.cpp 通过aclnnMoeDistributeCombineV2接口方式调用moe_distribute_combine_v2算子。