文件最后提交记录最后更新时间
mc2 docs fix Co-authored-by: caoqiku<caoqiku1@h-partners.com> # message auto-generated for no-merge-commit merge: !4110 merge mc2_docs_fix into master mc2 docs fix Created-by: cqk1107 Commit-by: caoqiku Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 同步mc2文档更新商分pr上的检视意见 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!41101 个月前
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 个月前
整改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 天前
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 个月前
订正D&C算子CMake依赖 Co-authored-by: gitcode_lijd<lijiandong20@huawei.com> # message auto-generated for no-merge-commit merge: !5159 merge fix into master 订正D&C算子CMake依赖 Created-by: gitcode_lijd Commit-by: gitcode_lijd Merged-by: cann-robot Description: https://gitcode.com/cann/ops-transformer/issues/2404 # 代码检视报告 - 5159.diff **检视日期**: 2026-05-13 **检视类别**: 构建配置检视 **检视范围**: CMakeLists.txt 文件修改 **适用规范**: 无适用安全编码规范(构建配置文件不涉及数值/内存/指针等代码安全风险) --- ## 变更内容汇总 | 文件 | 原依赖 | 新增依赖 | |------|--------|---------| | moe_distribute_combine/op_host/CMakeLists.txt | v2版本依赖 | +v3版本依赖 | | moe_distribute_combine_add_rms_norm/op_host/CMakeLists.txt | v2版本依赖 | +v3版本依赖 | | moe_distribute_combine_v2/op_host/CMakeLists.txt | v2版本依赖 | +v3版本依赖 | | moe_distribute_dispatch/op_host/CMakeLists.txt | v2版本依赖 | +v3版本依赖 | | moe_distribute_dispatch_setup/op_host/CMakeLists.txt | v2版本依赖 | +v3版本依赖 | --- ## 假设检验分析 **假设 H0**: 构建依赖变更存在安全风险 **证据收集**: - ✅ 仅修改 set(..._depends ...) 的依赖列表 - ✅ 无数值运算、内存操作、指针解引用代码 - ✅ 不涉及编译选项变更(如 ASLR、栈保护等) - ✅ 功能已验证(用户确认) **自信值**: 0% → **PASS** --- ## 检视结论 **✅ 无安全风险** 本次变更仅为构建依赖关系调整,添加 v3 版本算子依赖。不涉及 C++ 代码实现,无需安全编码规范检视。 --- ## 建议 1. 确认依赖模块 mc2/moe_distribute_dispatch_v3mc2/moe_distribute_combine_v3 是否已存在 2. 确认构建顺序是否正确(依赖模块需先构建) See merge request: cann/ops-transformer!515916 天前
设置batch mode模式,增加S_MTE3同步 Co-authored-by: jiangxiuhan1<jiangxiuhan@huawei.com> # message auto-generated for no-merge-commit merge: !2879 merge master into master 设置batch mode模式,增加S_MTE3同步 Created-by: jiangxiuhan1 Commit-by: jiangxiuhan1 Merged-by: cann-robot Description: ## 描述 Tiling函数中统一设置了批量调度模式(batch_mode),以确保所有计算核心能够同时启动,combineV1 kernel中增加SyncFuncAscendC::HardEvent::S_MTE3()同步 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/1244 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!28791 个月前
add ut case Co-authored-by: lixiawei<lixiawei2@h-partners.com> # message auto-generated for no-merge-commit merge: !5220 merge add_case_0511 into master add ut case Created-by: lixiawei Commit-by: lixiawei Merged-by: cann-robot Description: ## 描述 增加ut用例,提升UT覆盖率到90% ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2442 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: **AI代码检视报告** 检视概述 项目: 提交 内容: 7986712f - add ut case ──────────────────────────────────────── 项目: 检视范围 内容: 24 个文件,+1930/-51 行 ──────────────────────────────────────── 项目: 检视类别 内容: C++ 安全编码规范(cpp-secure.md)、C++ 通用编码规范(cpp-general.md)、TOPK 问题清单(ascendc-topk.md) ──────────────────────────────────────── 项目: 代码类型 内容: UT 测试代码(op_api 测试 + op_host tiling 测试) ──────────────────────────────────────── 项目: 适用规范 内容: [适用: All] 条款 变更概览 本次提交新增了大量 UT 用例: - op_api 测试:为 matmul_all_reduce 系列算子增加 nullptr 检测和执行路径测试 - op_host tiling 测试:新增 moe_distribute_combine 的 arch22/arch35 tiling 用例 - CSV 数据行:为 matmul_all_reduce / matmul_reduce_scatter_v2 新增参数化测试数据 - 修复:命名空间拼写修正 MowDistributeCombine → MoeDistributeCombine,变量名修正 groupList_type → groupListType,双分号修复 检视结论:未发现安全风险 See merge request: cann/ops-transformer!522014 天前
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 个月前
mc2 docs fix Co-authored-by: caoqiku<caoqiku1@h-partners.com> # message auto-generated for no-merge-commit merge: !4110 merge mc2_docs_fix into master mc2 docs fix Created-by: cqk1107 Commit-by: caoqiku Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 同步mc2文档更新商分pr上的检视意见 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!41101 个月前
README.md

MoeDistributeCombine

产品支持情况

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

功能说明

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

  • 不存在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)

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

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
expandX 输入 根据expertIds进行扩展过的token特征。 FLOAT16、BFLOAT16 ND
expertIds 输入 每个token的topK个专家索引。 INT32 ND
expandIdx 输入 表示同一专家收到的token个数,对应MoeDistributeDispatch中的expandIdx输出。 INT32 ND
epSendCounts 输入 从EP通信域各卡接收的token数,对应MoeDistributeDispatch中的epRecvCounts输出。 INT32 ND
expertScales 输入 每个token的topK个专家的权重。 FLOAT32 ND
tpSendCounts 可选输入 从TP通信域各卡接收的token数,对应MoeDistributeDispatch中的tpRecvCounts输出,若有TP域通信需传参,若无TP域通信传空指针。 INT32 ND
xActiveMask 可选输入 预留参数,当前版本不支持,传空指针即可。 - ND
activationScale 可选输入 预留参数,当前版本不支持,传空指针即可。 - ND
weightScale 可选输入 预留参数,当前版本不支持,传空指针即可。 - ND
groupList 可选输入 预留参数,当前版本不支持,传空指针即可。 - ND
expandScales 可选输入 表示本卡输入Token的权重,对应MoeDistributeDispatch中的expandScales输出。 FLOAT32 ND
groupEp 属性 EP通信域名称(专家并行通信域),字符串长度范围为[1, 128),不能和groupTp相同。 STRING ND
epWorldSize 属性 EP通信域大小。 INT64 ND
epRankId 属性 EP域本卡ID,取值范围[0, epWorldSize),同一个EP通信域中各卡的epRankId不重复。 INT64 ND
moeExpertNum 属性 MoE专家数量,取值范围(0, 512],且满足moeExpertNum % (epWorldSize - sharedExpertRankNum) = 0。 INT64 ND
groupTp 可选属性
  • TP通信域名称(数据并行通信域)。
  • 默认值为""。
  • STRING ND
    tpWorldSize 可选属性
  • TP通信域大小。
  • 默认值为0。
  • INT64 ND
    tpRankId 可选属性
  • TP域本卡ID。同一个EP通信域中各卡的tpRankId不重复。
  • 默认值为0。
  • INT64 ND
    expertShardType 可选属性
  • 表示共享专家卡分布类型,当前仅支持传0,表示共享专家卡排在MoE专家卡前面。
  • 默认值为0。
  • INT64 ND
    sharedExpertNum 可选属性
  • 表示共享专家数量(一个共享专家可复制部署到多个卡上)。
  • 默认值为1。
  • INT64 ND
    sharedExpertRankNum 可选属性
  • 表示共享专家卡数量。
  • 默认值为0。
  • INT64 ND
    globalBS 可选属性
  • EP域全局的batch size大小。
  • 默认值为0。
  • INT64 ND
    outDtype 可选属性
  • 用于指定输出x的数据类型,预留参数,当前版本不支持,传0即可。
  • 默认值为0。
  • INT64 ND
    commQuantMode 可选属性
  • 通信量化类型,取值范围0或2;0表示通信不量化,2表示通信int8量化。
  • 默认值为0。
  • INT64 ND
    groupListType 可选属性
  • groupList格式,预留参数,当前版本不支持,传0即可。
  • 默认值为0。
  • INT64 ND
    x 输出 表示处理后的token,数据类型、数据格式与expandX保持一致。 FLOAT16、BFLOAT16 ND
    • Atlas A2 训练系列产品/Atlas A2 推理系列产品:

      • 不支持共享专家场景,不支持expertShardTypesharedExpertNumsharedExpertRankNum属性。
      • 当前不支持TP域通信,不支持groupTptpWorldSizetpRankId属性,且tpSendCounts为无效内容。
      • 仅设置环境变量HCCL_INTRA_PCIE_ENABLE = 1和HCCL_INTRA_ROCE_ENABLE = 0时,必须传入expandScales
    • Atlas A3 训练系列产品/Atlas A3 推理系列产品:

      • 不支持expandScales
    • Ascend 950PR/Ascend 950DT:

      • 不支持expandScales
      • 当前不支持TP域通信,不支持groupTptpWorldSizetpRankId属性,且tpSendCounts为无效内容。

    约束说明

    • MoeDistributeDispatch算子与MoeDistributeCombine算子必须配套使用,具体参考调用示例。

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

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

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

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

      • A:表示本卡可能接收的最大token数量,取值范围如下:
        • 对于共享专家,要满足A = BS * epWorldSize * sharedExpertNum / sharedExpertRankNum
        • 对于MoE专家,当globalBS为0时,要满足A >= BS * epWorldSize * min(localExpertNum, K);当globalBS非0时,要满足A >= globalBS * min(localExpertNum, K)。
      • localExpertNum:表示本卡专家数量。
        • 对于共享专家卡,localExpertNum = 1
        • 对于MoE专家卡,localExpertNum = moeExpertNum / (epWorldSize - sharedExpertRankNum),localExpertNum > 1时,不支持TP域通信。
    • 本文公式中的"/"表示整除。

    • 通信域使用约束:

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

      • 参数说明里shape格式说明:
        • H:表示hidden size隐藏层大小,取值范围(0, 7168],且保证是32的整数倍。
        • BS:表示batch sequence size,即本卡最终输出的token数量,取值范围为[1, 256]。
        • K:表示选取topK个专家,需满足0 < KmoeExpertNum,取值范围为[1, 16]。
      • HCCL_BUFFSIZE:调用本算子前需检查HCCL_BUFFSIZE环境变量取值是否合理,该环境变量表示单个通信域占用内存大小,单位MB,不配置时默认为200MB,要求 >= (BS * epWorldSize * min(localExpertNum, K) * H * 4B + 4MB)。
      • HCCL_INTRA_PCIE_ENABLEHCCL_INTRA_ROCE_ENABLE:设置环境变量HCCL_INTRA_PCIE_ENABLE = 1和HCCL_INTRA_ROCE_ENABLE = 0可以减少跨机通信数据量,可能提升算子性能。 此时,要求HCCL_BUFFSIZE >= moeExpertNum * BS * (H * 2 + 16 * Align8(K))B + 104MB。并且,对于入参moeExpertNum,只要求moeExpertNum % epWorldSize = 0,不要求moeExpertNum / epWorldSize <= 24,其中Align8(x) = ((x + 8 - 1) / 8) * 8。
      • 参数约束:
        • epWorldSize:取值支持16、32、64。
        • moeExpertNum:需满足moeExpertNum / epWorldSize <= 24。
          • 环境变量HCCL_INTRA_PCIE_ENABLE = 1和HCCL_INTRA_ROCE_ENABLE = 0时,无上述约束。
        • globalBS:当每个rank的BS数一致时,globalBS = BS * epWorldSizeglobalBS = 0;当每个rank的BS数不一致时,globalBS = maxBS * epWorldSize或者globalBS = 256 * epWorldSize,其中maxBS表示表示单rank BS最大值,建议按maxBS * epWorldSize传入,固定按256 * epWorldSize传入在后续版本BS支持大于256的场景下会无法支持。
        • commQuantMode取值范围0或2,0表示通信不量化,2表示通信int8量化(2仅当HCCL_INTRA_PCIE_ENABLE=1、HCCL_INTRA_ROCE_ENABLE=0且驱动版本≥25.0.RC1.1时支持)。
      • 组网约束:多机场景仅支持交换机组网,不支持双机直连组网。
    • Atlas A3 训练系列产品/Atlas A3 推理系列产品:

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

      • 参数约束:
        • epWorldSize:取值支持2、4、8、16、32、64、128、144、256、288。
        • sharedExpertRankNum:当前取值范围[0, epWorldSize),不为0时需满足epWorldSize % sharedExpertRankNum = 0。
        • globalBS:当每个rank的BS数一致时,globalBS = BS * epWorldSizeglobalBS = 0;当每个rank的BS数不一致时,globalBS = maxBS * epWorldSize,其中maxBS表示单卡BS最大值。
        • commQuantMode取值范围0或2,0表示通信不量化,2表示通信int8量化。
      • HCCL_BUFFSIZE:调用本算子前需检查HCCL_BUFFSIZE环境变量取值是否合理,该环境变量表示单个通信域占用内存大小,单位MB,不配置时默认为200MB,要求 >= 2且满足1024 ^ 2 * (HCCL_BUFFSIZE - 2) / 2 >= BS * 2 * (H + 128) * (epWorldSize * localExpertNum + K + 1),localExpertNum需使用MoE专家卡的本卡专家数。

    调用说明

    调用方式 样例代码 说明
    aclnn接口 test_aclnn_moe_distribute_combine.cpp 通过aclnnMoeDistributeCombine接口方式调用moe_distribute_combine算子。