文件最后提交记录最后更新时间
增加mmalltoall校验和ut用例 Co-authored-by: qzzzy1<qiziyu2@huawei.com> # message auto-generated for no-merge-commit merge: !5078 merge master into master 增加mmalltoall校验和ut用例 Created-by: qzzzy1 Commit-by: qzzzy1 Merged-by: cann-robot Description: ## 描述 matmulalltoall存在一些检验不足的场景,还有未覆盖的UT ## 关联的Issue 关联Issue 2316 ## 测试 rdv,本地测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!507820 天前
MC2算子资料完善 Co-authored-by: lyt_claire<luyitong1@huawei.com> # message auto-generated for no-merge-commit merge: !2997 merge mc2AIDD into master MC2算子资料完善 Created-by: lyt_claire Commit-by: lyt_claire 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!29972 个月前
增加mmalltoall校验和ut用例 Co-authored-by: qzzzy1<qiziyu2@huawei.com> # message auto-generated for no-merge-commit merge: !5078 merge master into master 增加mmalltoall校验和ut用例 Created-by: qzzzy1 Commit-by: qzzzy1 Merged-by: cann-robot Description: ## 描述 matmulalltoall存在一些检验不足的场景,还有未覆盖的UT ## 关联的Issue 关联Issue 2316 ## 测试 rdv,本地测试 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!507820 天前
bugfix: groupSize Co-authored-by: yifux<xiongyifu1@huawei.com> # message auto-generated for no-merge-commit merge: !5215 merge pr_groupsize into master bugfix: groupSize Created-by: xiongyifu Commit-by: yifux Merged-by: cann-robot Description: ## 描述 修改all_to_all_matmul和matmul_all_to_all算子的fallback,添加修饰符static ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2406 ## 测试 线上出子包验证 ![image.png](https://raw.gitcode.com/user-images/assets/7673863/173b82b6-771d-4c04-9731-11a3f8684ab9/image.png 'image.png') ![image.png](https://raw.gitcode.com/user-images/assets/7673863/5a057c61-6d9f-4e18-a512-e8ecd0465413/image.png 'image.png') rdv验证 ## 文档更新 不涉及 ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!521520 天前
fix: 修复 cleancode 告警 Co-authored-by: libohao6<libohao3@huawei.com> # message auto-generated for no-merge-commit merge: !5954 merge fix/cleancode-master into master fix: 修复 cleancode 告警 Created-by: libohao6 Commit-by: libohao6 Merged-by: cann-robot Description: ## 描述 修复基础算子主线cleancode问题。 ## 关联的Issue [Bug-Report|缺陷反馈]: MC2基础算子主线存在cleancode问题 #2676 ## 测试 二级冒烟。 ## 文档更新 不涉及。 ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: # PR #5489 代码检视报告 **PR**: https://gitcode.com/cann/ops-transformer/pull/5489 **标题**: merge 'fix-cleancode-issues' into 'master' **作者**: libohao6 | **范围**: 19 files, +453 -531 | **日期**: 2026-05-21 --- ## 改动分类 | 类型 | 改动数 | 说明 | |------|-------|------| | 删除未使用函数 | 5个 | matmul_util.cpp删3个static函数 + aclnn_matmul_reduce_scatter_v2.cpp删CreateWinTensor | | 删除冗余变量 | 2个 | x1Dtype/biasDtype 在 aclnn_weight_quant_matmul_all_reduce.cpp | | const修饰添加 | 5处 | 多个Tiling函数context参数加const | | 位操作类型修复 | 1处 | int32_t code → uint32_t bitCode | | 魔法数字→常量 | 1处 | alignas(8) → alignas(L2_CACHE_ALIGNMENT) | | 变量重命名 | 多处 | Kernel侧blockLocCoord→blockLocCoord_等; Host侧index→idx/i | | 参数名拼写修正 | 1处 | rcfCfg→rcsCfg | | include guard | 1处 | matmul_reduce_scatter_v2_tiling_common.h | | 头文件清理 | 3处 | 移除冗余#include | | 未使用参数标记 | 5处 | (void)opType等 | | 注释风格更新 | 大量 | 决策树层级注释从======改为差异化标记 | | 代码格式修复 | 多处 | 空格/缩进/换行 | --- ## 假设检验检视结果 ### 1. 删除未使用函数 ✅ PASS **涉及文件**: matmul_util.cpp, aclnn_matmul_reduce_scatter_v2.cpp 删除5个static函数(CheckShapeValidWithTrans、ProcessEmptyTensor、ProcessEmptyTensorWithTrans、GetMatmulOpInfoWithTrans、CreateWinTensor)。均为static,无跨文件引用风险。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | cpp-secure 5.2 资源泄露防护 | 删除是否遗漏调用点 | ✅ static函数仅文件内可见 | ### 2. const修饰添加 ✅ PASS **涉及文件**: all_gather_matmul_tiling_base.cpp/.h, quant_all_reduce_tiling.cpp, quant_reduce_scatter_tiling.cpp gert::TilingContext *contextconst gert::TilingContext *context。GetNodeName()、GetAttrPointer()等方法为const兼容,头文件声明同步更新。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | cpp-secure 1.1 静态类型安全 | const修饰是否导致编译错误 | ✅ 方法兼容const | ### 3. 位操作类型修复 ✅ PASS **涉及文件**: matmul_reduce_scatter_v2_aiv_mode_tiling.cpp int32_t codeuint32_t bitCode。对有符号数做右移(>>=)存在符号扩展问题,改为uint32_t消除风险。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | cpp-secure 2.1 有符号整数不溢出 | int32_t右移符号扩展 | ✅ 修复正确 | | cpp-secure 2.2 无符号整数不回绕 | uint32_t位操作安全 | ✅ | ### 4. 魔法数字→常量 ✅ PASS **涉及文件**: unquant_matmul_all_reduce_tiling_data.h static constexpr size_t L2_CACHE_ALIGNMENT = 8; 替换 alignas(8)。值等价,不影响ABI。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | cpp-secure 10.4 结构体字段末尾添加 | 常量定义位置 | ✅ 不影响ABI | ### 5. 冗余变量删除 ✅ PASS **涉及文件**: aclnn_weight_quant_matmul_all_reduce.cpp 删除 const auto x1Dtype = x1->GetDataType(); const auto biasDtype = bias->GetDataType();。两变量后续无引用,OP_CHECK_DTYPE_NOT_SAME宏自行获取dtype。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | cpp-secure 3.1 禁止未初始化变量 | 删除后功能等价 | ✅ | ### 6. 参数名拼写修正 ✅ PASS **涉及文件**: matmul_reduce_scatter_tiling_base.cpp rcfCfgrcsCfg(RCS=ReduceScatter拼写修正)。所有引用已同步替换。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | MC2 MC2-13 CCU通信数据量限制 | AdjustHCCLLimit逻辑是否保留 | ✅ 256MB限制保留 | ### 7. include guard添加 ✅ PASS **涉及文件**: matmul_reduce_scatter_v2_tiling_common.h 新增 #ifndef MATMUL_REDUCE_SCATTER_V2_TILING_COMMON_H 保护。命名与文件路径一致。 ### 8. 未使用参数标记 ✅ PASS **涉及文件**: quant_reduce_scatter_util_tiling.cpp 添加 (void)opType; (void)context; (void)xDimNum; (void)outputDim; 消除编译器警告。注释声明"Reserved for future extension"。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | TOPK TOPK-7 外部输入校验 | 校验逻辑是否削弱 | ✅ 未削弱 | ### 9. LOG参数安全 ✅ PASS **涉及文件**: allto_allv_quant_grouped_mat_mul_tiling_base.cpp 循环变量 indexidx/isendCounts[%lu] should be in [0, %lu], but get %lu — 3个%lu对应3个uint64_t(idx, bsk_, sendCounts[idx]),类型和数量匹配。 | 规范条款 | 检查项 | 结果 | |---------|--------|------| | cpp-secure 11.2 参数数量与占位符匹配 | 3个%lu=3个uint64_t | ✅ | | cpp-secure 11.3 参数类型与格式化说明符匹配 | uint64_t用%lu | ✅ | | MC2 MC2-07 专家参数合法性校验 | sendCounts/recvCounts校验完整 | ✅ | ### 10. 头文件清理 ✅ PASS **涉及文件**: matmul_reduce_scatter_tiling_base.h, quant_reduce_scatter_util_tiling.h, all_gather_matmul_tiling_base.h 移除冗余 #include "ops_utils.h"#include "mc2_log.h"。 --- ## 规范条款引用汇总 | 规范来源 | 条款编号 | 条款名称 | 检查结果 | |---------|---------|---------|---------| | cpp-secure.md | 1.1 | 保证静态类型安全 | ✅ | | cpp-secure.md | 2.1 | 有符号整数运算不溢出 | ✅ | | cpp-secure.md | 2.2 | 无符号整数运算不回绕 | ✅ | | cpp-secure.md | 3.1 | 禁止使用未初始化的变量 | ✅ | | cpp-secure.md | 5.2 | 资源泄露防护 | ✅ | | cpp-secure.md | 10.4 | 结构体字段末尾添加 | ✅ | | cpp-secure.md | 11.2 | LOG参数数量与占位符必须匹配 | ✅ | | cpp-secure.md | 11.3 | LOG参数类型与格式化说明符必须匹配 | ✅ | | mc2-specific.md | MC2-07 | 专家参数合法性校验 | ✅ | | mc2-specific.md | MC2-13 | CCU通信数据量限制 | ✅ | | ascendc-topk.md | TOPK-1 | 必须校验函数返回值 | ✅ | | ascendc-topk.md | TOPK-7 | 融合规则/InferShape/Tiling外部输入校验 | ✅ | --- ## 总体结论 **✅ 无问题** — PR #5489 为代码清理类改动,所有10项检视均PASS。改动不引入安全风险,不削弱校验逻辑,规范合规性100%。 See merge request: cann/ops-transformer!59543 天前
修复MMAA数据溢出风险 Co-authored-by: SimpleBright_Man<tangpanrui1@huawei.com> # message auto-generated for no-merge-commit merge: !6006 merge fixMMAAOF into master 修复MMAA数据溢出风险 Created-by: SimpleBright_Man Commit-by: SimpleBright_Man Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> Agent扫描出部分变量因为校验上限为INT32_MAX而可能有溢出风险 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!60065 天前
新增UT用例,提升ut覆盖率 Co-authored-by: lixiawei<lixiawei2@h-partners.com> # message auto-generated for no-merge-commit merge: !5649 merge add_ut_case_0515 into master 新增UT用例,提升ut覆盖率 Created-by: lixiawei Commit-by: lixiawei Merged-by: cann-robot Description: ## 描述 新增UT用例,提升ut覆盖率 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/2585 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: ## AI检视意见 总结 本次提交新增约 2118 行 UT 测试代码,覆盖了多个算子的 tiling、InferShape、InferDataType、op_api 等测试维度,测试设计合理,包含了合法场景、非法参数、空指针、空张量、非连续内存、dtype 不匹配等多种边界场景。 发现的问题均为测试代码自身健壮性问题,不涉及生产代码安全风险,建议按优先级酌情处理。 报告生成时间 2026-05-20 报告状态 已完成检视,待确认修复优先级 See merge request: cann/ops-transformer!56497 天前
MmA2A_init Co-authored-by: 何梓洋_蓝区<heziyang5@h-partners.com> # message auto-generated for no-merge-commit merge: !765 merge MmA2a_master into master MmA2A_init Created-by: Hilfsblaetter Commit-by: 何梓洋_蓝区 Merged-by: cann-robot Description: ## 描述 新增算子 MatmulAlltoAll ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!7654 个月前
MatmulAlltoAll和AlltoAllMatmul增加通信引擎约束描述 Co-authored-by: adamlwang<wangjingquan2@huawei.com> # message auto-generated for no-merge-commit merge: !5068 merge doc into master MatmulAlltoAll和AlltoAllMatmul增加通信引擎约束描述 Created-by: adamlwang Commit-by: adamlwang Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 增加MatmulAlltoAll和AlltoAllMatmul的通信约束描述。 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2310 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [x] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!506824 天前
README.md

MatmulAlltoAll

产品支持情况

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

功能说明

  • 算子功能:完成量化的Matmul计算、Permute(保证通信后地址连续)和AlltoAll通信的融合,先计算后通信,支持非量化、K-C量化和mx量化模式

  • 计算公式:假设x1的shape为(BS, H1),x2的shape为(H1, H2),rankSize为NPU卡数。

    • Atlas A2 训练系列产品/Atlas A2 推理系列产品:

      • 非量化场景:

        computeOut=x1@x2+biaspermutedOut=computeOut.view(BS,rankSize,H2/rankSize).permute(1,0,2)output=AlltoAll(permutedOut).view(rankSize∗BS,H2/rankSize)computeOut = x1 @ x2 + bias \\ permutedOut = computeOut.view(BS, rankSize, H2/rankSize).permute(1, 0, 2) \\ output = AlltoAll(permutedOut).view(rankSize*BS, H2/rankSize)

      • K-C量化场景:

        computeOut=(x1@x2)∗x1Scale∗x2Scale+biaspermutedOut=computeOut.view(BS,rankSize,H2/rankSize).permute(1,0,2)output=AlltoAll(permutedOut).view(rankSize∗BS,H2/rankSize)computeOut = (x1 @ x2) * x1Scale * x2Scale + bias \\ permutedOut = computeOut.view(BS, rankSize, H2 / rankSize).permute(1, 0, 2) \\ output = AlltoAll(permutedOut).view(rankSize * BS, H2 / rankSize)

    • Atlas A3 训练系列产品/Atlas A3 推理系列产品:

      • 非量化场景:

        computeOut=x1@x2+biaspermutedOut=computeOut.view(BS,rankSize,H2/rankSize).permute(1,0,2)output=AlltoAll(permutedOut).view(rankSize∗BS,H2/rankSize)computeOut = x1 @ x2 + bias \\ permutedOut = computeOut.view(BS, rankSize, H2/rankSize).permute(1, 0, 2) \\ output = AlltoAll(permutedOut).view(rankSize*BS, H2/rankSize)

    • Ascend 950PR/Ascend 950DT:

      • 非量化场景:

        computeOut=x1@x2+biaspermutedOut=computeOut.view(BS,rankSize,H2/rankSize).permute(1,0,2)output=AlltoAll(permutedOut).view(rankSize∗BS,H2/rankSize)computeOut = x1 @ x2 + bias \\ permutedOut = computeOut.view(BS, rankSize, H2/rankSize).permute(1, 0, 2) \\ output = AlltoAll(permutedOut).view(rankSize*BS, H2/rankSize)

      • K-C量化场景:

        computeOut=(x1@x2+bias)∗x1Scale∗x2ScalepermutedOut=computeOut.view(BS,rankSize,H2/rankSize).permute(1,0,2)output=AlltoAll(permutedOut).view(rankSize∗BS,H2/rankSize)computeOut = (x1 @ x2 + bias) * x1Scale * x2Scale \\ permutedOut = computeOut.view(BS, rankSize, H2 / rankSize).permute(1, 0, 2) \\ output = AlltoAll(permutedOut).view(rankSize * BS, H2 / rankSize)

      • mx量化场景:

        computeOut=∑0⌊kblockSize=32⌋(x1@x2∗(x1Scale∗x2Scale))+biaspermutedOut=computeOut.view(BS,rankSize,H2/rankSize).permute(1,0,2)output=AlltoAll(permutedOut).view(rankSize∗BS,H2/rankSize)computeOut = \sum_{0}^{\left \lfloor \frac{k}{blockSize=32} \right \rfloor} (x1 @ x2 * (x1Scale * x2Scale)) + bias \\ permutedOut = computeOut.view(BS, rankSize, H2 / rankSize).permute(1, 0, 2) \\ output = AlltoAll(permutedOut).view(rankSize * BS, H2 / rankSize)

参数说明​

参数名 输入/输出/属性 描述 数据类型 数据格式
x1 输入 MatMul左矩阵,即公式中的输入x1。 FLOAT16、BFLOAT16、FLOAT8_E4M3FN、FLOAT8_E5M2、FLOAT4_E2M1、INT8 ND
x2 输入 MatMul右矩阵,即公式中的输入x2。 FLOAT16、BFLOAT16、FLOAT8_E4M3FN、FLOAT8_E5M2、FLOAT4_E2M1、INT8 ND
bias 可选输入 可选输入,阵乘运算后累加的偏置,对应公式中的bias。 FLOAT16、BFLOAT16、FLOAT32 ND
x1_scale 可选输入 左矩阵的量化系数,对应公式中的x1Scale。 FLOAT32、FLOAT8_E8M0 ND
x2_scale 可选输入 右矩阵的量化系数,对应公式中的x2Scale。 FLOAT32、FLOAT8_E8M0 ND
comm_scale 可选输入 预留参数,低比特通信的量化系数。 - -
x1_offset 可选输入 预留参数,左矩阵的量化偏置。 - -
x2_offset 可选输入 预留参数,右矩阵的量化偏置。 - -
y 输出 计算+通信的结果,即公式中的输出output。 FLOAT16、BFLOAT16、FLOAT32 ND
group 必选属性 Host侧标识列组的字符串,即通信域名称,通过Hccl接口HcclGetCommName获取commName作为该参数,字符串长度要求(0, 128)。 STRING -
world_size 必选属性 使用的npu卡数,公式中的rankSize。 INT -
all2all_axes 可选属性 AlltoAll和Permute数据交换的方向,支持配置空或者[-1, -2],传入空时默认按[-1, -2]处理,表示将输入由(BS, H2)转为(BS*rankSize, H2/rankSize)。 aclIntArray*(元素类型INT64) -
x1_quant_mode 可选属性 左矩阵的量化方式,按照实际场景配置。 INT -
x2_quant_mode 可选属性 右矩阵的量化方式,按照实际场景配置。 INT -
comm_quant_mode 可选属性 低比特通信的量化方式,预留参数,当前仅支持配置为0,表示不量化。 INT -
comm_quant_dtype 可选属性 低比特通信的量化类型,预留参数,当前仅支持配置为-1,表示ACL_DT_UNDEFINED。 INT -
transpose_x1 可选属性 标识左矩阵是否转置过,暂不支持配置为True。 bool -
transpose_x2 可选属性 标识右矩阵是否转置过,配置为True时右矩阵Shape为(H2,H1)。 bool -
group_size 可选属性 用于Matmul计算三个方向上的量化分组大小,仅在scale输入都是2维及以上数据时取值有效,其他场景默认传入0即可。 INT -

x1QuantMode、x2QuantMode、commQuantMode的枚举值与量化模式关系如下:

  • 0: 不量化
  • 1: pertensor
  • 2: perchannel
  • 3: pertoken
  • 4: pergroup
  • 5: perblock
  • 6: mx量化
  • 7: pertoken动态量化

约束说明

  • 默认支持确定性计算。
  • NPU卡数(world_size),根据设备型号有不同限制:
    • Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持2、4、8卡。
    • Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持2、4、8、16卡。
    • Ascend 950PR/Ascend 950DT:支持2、4、8、16卡。
  • 空tensor和非连续tensor的支持度根据不同设备型号有不同的限制:
    • Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持任何空tensor;不支持任何非连续tensor。
    • Atlas A3 训练系列产品/Atlas A3 推理系列产品、Ascend 950PR/Ascend 950DT:仅支持非量化场景下输入x1的第一维度(BS)为0的空tensor,其它空tensor均不支持;仅支持输入x2的转置非连续tensor,其它非连续tensor均不支持。
  • 输入x1必须是2维,其shape为(BS, H1),BS*rankSize和H2的值不得超过2147483647(INT32_MAX)。
  • 输入x2必须是2维,其shape为(H1, H2),H2必须整除NPU卡数,H1范围仅支持[1,65535],H2的值不超过2147483647(INT32_MAX)。
  • bias若非空,其维度必须为1维,shape为(H2)。
  • x1_scale若非空,在mx量化场景时,其维度为3维,shape为(BS, ceil(H1/64), 2);其它场景中其维度为1维,shape为(BS)。
  • x2_scale若非空,在mx量化场景时,其维度为3维,shape为(H2, ceil(H1/64), 2);其它场景中其维度为1维,shape为(H2)。
  • all2all_axes为1维数组,shape必须为(2)。
  • 目前支持的量化模式,根据设备型号有不同限制:
    • Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持K-C量化模式,x1QuantMode=3,x2QuantMode=2。
    • Atlas A3 训练系列产品/Atlas A3 推理系列产品:目前不支持量化场景。
    • Ascend 950PR/Ascend 950DT:支持K-C量化模式,x1QuantMode=3,x2QuantMode=2;mx量化模式,x1QuantMode=6,x2QuantMode=6。
  • 非量化场景x1、x2计算输入的数据类型要和output计算输出的数据类型一致,传入的x1、x2与output均不为空指针。
  • 量化场景传入的x1、x2、x1Scale、x2Scale与output均不为空指针,且
    • Atlas A2 训练系列产品/Atlas A2 推理系列产品:bias不支持传入空指针。
  • x1、x2和bias计算输入的数据类型根据不同设备型号有不同的限制:
    • Atlas A2 训练系列产品/Atlas A2 推理系列产品:
      • 非量化场景下,x1/x2计算输入的数据类型为FLOAT16时,bias计算输入的数据类型支持FLOAT16;x1/x2计算输入的数据类型为BFLOAT16时,bias计算输入的数据类型支持FLOAT32。
      • 量化场景下,支持K-C量化模式后加bias,x1、x2计算输入的数据类型必须为INT8;output计算输出的数据类型为BFLOAT16时,bias的数据类型为FLOAT或BFLOAT16;output的数据类型为FLOAT16时,bias的数据类型为FLOAT16。
    • Atlas A3 训练系列产品/Atlas A3 推理系列产品:
      • 非量化场景下,output计算输出的数据类型为FLOAT16时,bias计算输入的数据类型支持FLOAT16;output计算输出的数据类型为BFLOAT16时,bias计算输入的数据类型支持FLOAT32。
      • A3目前不支持量化场景。
    • Ascend 950PR/Ascend 950DT:
      • 非量化场景下,x1/x2计算输入的数据类型为FLOAT16时,bias计算输入的数据类型支持FLOAT16和FLOAT32;x1/x2计算输入的数据类型为BFLOAT16时,bias计算输入的数据类型支持BFLOAT16和FLOAT32。
      • 量化场景下,支持K-C量化模式和mx量化模式,x1、x2计算输入的数据类型为FLOAT8_E4M3FN、FLOAT8_E5M2、FLOAT4_E2M1,bias的数据类型为FLOAT32或者bias为空,具体类型组合详见量化aclnn约束说明
      • mx量化模式下,当x1和x2的数据类型为FLOAT4_E2M1时,两者的数据类型必须一致。
  • 通算融合算子不支持并发调用,不同的通算融合算子也不支持并发调用。
  • 不支持跨超节点通信,只支持超节点内。
  • 通信引擎约束:
    • Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持MTE通信。
    • Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持AICPU通信。
    • Ascend 950PR/Ascend 950DT:支持CCU通信。

调用说明

调用方式 样例代码 说明
aclnn接口 test_aclnn_matmul_allto_all.cpp 通过aclnnMatMulAlltoAll接口方式调用非量化场景的MatMulAlltoAll算子。
aclnn接口 test_aclnn_quant_matmul_allto_all.cpp 通过aclnnQuantMatMulAlltoAll接口方式调用量化场景的MatMulAlltoAll算子。