文件最后提交记录最后更新时间
mc2/all_gather_matmul_v2: support n=0 null tensor Co-authored-by: Zhiqi Song<songzhiqi1@huawei.com> # message auto-generated for no-merge-commit merge: !5688 merge master-dev into master mc2/all_gather_matmul_v2: support n=0 null tensor Created-by: captainmiaow Commit-by: Zhiqi Song Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2658 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!56883 天前
AllGatherMatmulV2算子A4W4场景Tiling策略优化 Co-authored-by: zhumingzhe 00880305<zhumingzhe2@huawei.com> # message auto-generated for no-merge-commit merge: !3090 merge auto_tune into master AllGatherMatmulV2算子A4W4场景Tiling策略优化 Created-by: zhu-mingzhe71 Commit-by: zhumingzhe 00880305 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 优化AllGatherMatmulV2算子A4W4场景Tiling策略,提升性能 ## 关联的Issue https://gitcode.com/cann/ops-transformer/issues/1426 <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [x] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!30902 个月前
mc2/all_gather_matmul_v2: support n=0 null tensor Co-authored-by: Zhiqi Song<songzhiqi1@huawei.com> # message auto-generated for no-merge-commit merge: !5688 merge master-dev into master mc2/all_gather_matmul_v2: support n=0 null tensor Created-by: captainmiaow Commit-by: Zhiqi Song Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2658 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!56883 天前
mc2/allgathermmV2: kernel support InitV2 and AICPU Co-authored-by: Zhiqi Song<songzhiqi1@huawei.com> # message auto-generated for no-merge-commit merge: !4956 merge master into master mc2/allgathermmV2: kernel support InitV2 and AICPU Created-by: captainmiaow Commit-by: Zhiqi Song Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> A5 all_gather_matmul_v2 support AICPU communication mode Control the communication mode (AICPU or CCU) via environment variables. If no configuration is set by default, the CCU communication mode will be used. To enable the environment variable by: export HCCL_OP_EXPANSION_MODE="AI_CPU" export ENV_MC2_COMM_MODE_AICPU=1 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2469 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!495611 天前
mc2/all_gather_matmul_v2: support n=0 null tensor Co-authored-by: Zhiqi Song<songzhiqi1@huawei.com> # message auto-generated for no-merge-commit merge: !5688 merge master-dev into master mc2/all_gather_matmul_v2: support n=0 null tensor Created-by: captainmiaow Commit-by: Zhiqi Song Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> https://gitcode.com/cann/ops-transformer/issues/2658 ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [x ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!56883 天前
修复AllGatherMatmulV2算子扫描出来的overflow风险 Co-authored-by: zhu-mingzhe71<zhumingzhe2@huawei.com> # message auto-generated for no-merge-commit merge: !6013 merge fix_overflow into master 修复AllGatherMatmulV2算子扫描出来的overflow风险 Created-by: zhu-mingzhe71 Commit-by: zhu-mingzhe71 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 经过工具扫描,发现AllGatherMatmulV2算子部分代码在大shape场景下存在溢出风险,导致内存踩踏 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [x] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!60131 天前
提升all_gather_matmul_v2算子ut覆盖率 Co-authored-by: chenyifan<chenyifan66@h-partners.com> # message auto-generated for no-merge-commit merge: !5583 merge agm_v2_ut into master 提升all_gather_matmul_v2算子ut覆盖率 Created-by: mutex_lock Commit-by: chenyifan Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 提升all_gather_matmul_v2算子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!55838 天前
add new ops: all_gather_mamtul_v2、matmul_reduce_scatter_v2;update all_gather_mamtul、matmul_reduce_scatter、matmul_all_reduce、moe_update_expert to support Ascend950 Co-authored-by: cann-robot<songchangxia@cann.team> Co-authored-by: lidongsheng<lidongsheng43@huawei.com> # message auto-generated for no-merge-commit merge: !986 merge develop into master add new ops: all_gather_mamtul_v2、matmul_reduce_scatter_v2;update all_gather_mamtul、matmul_reduce_scatter、matmul_all_reduce、moe_update_expert to support Ascend950 Created-by: qq_46353993 Commit-by: cann-robot;lidongsheng Merged-by: cann-robot Description: ## 描述 支持新算子all_gather_mamtul_v2、matmul_reduce_scatter_v2;all_gather_mamtul、matmul_reduce_scatter、matmul_all_reduce、moe_update_expert支持Ascend950 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-transformer!9863 个月前
补充AllGatherMatmul的readme和aclnn头文件中关于int4的描述 Co-authored-by: zhu-mingzhe71<zhumingzhe2@huawei.com> # message auto-generated for no-merge-commit merge: !3709 merge fix_doc into master 补充AllGatherMatmul的readme和aclnn头文件中关于int4的描述 Created-by: zhu-mingzhe71 Commit-by: zhu-mingzhe71 Merged-by: cann-robot Description: ## 描述 <!--在这里详细描述你的改动,包括改动的原因和所采取的方法。--> 补充AllGatherMatmul的readme和aclnn头文件中关于int4的描述 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> <!-- 如果这个PR是为了解决特定的问题单,请在这里描述问题单单号。--> ## 测试 <!--描述进行了哪些测试来验证你的改动。包括但不限于二级冒烟、算子泛化等。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] 🐛 Bug 修复 - [ ] ✨ 新特性 - [ ] ⚡ 性能优化 - [ ] ♻️ 重构 - [ ] 🧪 测试 - [ ] 📦 构建/CI - [ ] 🔧 配置变更 - [ ] 📝 文档更新 - [ ] ⬆️ 依赖升级 - [ ] 🔒 安全修复 - [ ] 🧹 代码清理 - [ ] ❓ 其他,请描述: See merge request: cann/ops-transformer!37091 个月前
README.md

AllGatherMatmulV2

产品支持情况

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

功能说明

  • 算子功能: 完成AllGather通信与MatMul计算融合。在支持x1和x2输入类型为FLOAT16/BFLOAT16的基础上,同时也支持低精度数据类型,此时算子在Matmul计算后会做对应的反量化计算,支持的低精度数据类型与量化方式如下:

    • Ascend 950PR/Ascend 950DT:

      新增了对低精度数据类型FLOAT8_E4M3FN/FLOAT8_E5M2/HIFLOAT8的支持。支持pertensor、perblock、mx量化方式

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

      新增了对低精度数据类型INT8/INT4的支持。支持pertoken/perchannel量化方式

  • 计算公式

    • 情形1:如果x1和x2数据类型为FLOAT16/BFLOAT16时,入参x1进行AllGather后,对x1、x2进行MatMul计算。

    output=AllGather(x1)@x2+biasoutput=AllGather(x1)@x2 + bias

    gatherOut=AllGather(x1)gatherOut=AllGather(x1)

    • 情形2:如果x1和x2数据类型为FLOAT8_E4M3FN/FLOAT8_E5M2/HIFLOAT8的pertensor场景,或者x1和x2数据类型为INT8/INT4的perchannel、pertoken场景,且不输出amaxOut,入参x1进行AllGather后,对x1、x2进行MatMul计算,然后进行dequant操作。

    output=(x1Scale∗x2Scale)∗(AllGather(x1)@x2+bias)output=(x1Scale*x2Scale)*(AllGather(x1)@x2 + bias)

    gatherOut=AllGather(x1)gatherOut=AllGather(x1)

    • 情形3:如果x1和x2数据类型为FLOAT8_E4M3FN/FLOAT8_E5M2/HIFLOAT8的perblock场景,且不输出amaxOut, 当x1为(m, k)、x2为(k, n)时, x1Scale为(ceildiv(m, 128), ceildiv(k, 128))、x2Scale为(ceildiv(k, 128), ceildiv(n, 128))时,入参x1和x1Scale进行AllGather后,对x1、x2进行perblock量化MatMul计算,然后进行dequant操作。

      output=∑0⌊kblockSize=128⌋(AllGather(x1)pr@x2rq∗(AllGather(x1Scale)pr∗x2Scalerq))output=\sum_{0}^{\left \lfloor \frac{k}{blockSize=128} \right \rfloor} (AllGather(x1)_{pr}@x2_{rq}*(AllGather(x1Scale)_{pr}*x2Scale_{rq}))

      gatherOut=AllGather(x1)gatherOut=AllGather(x1)

    • 情形4:如果x1和x2数据类型为FLOAT8_E4M3FN/FLOAT8_E5M2的mx量化场景,x1为(m, k)、x2 为(n, k),且x1Scale为(m, ceilDiv(k, 64), 2)、x2Scale为(n, ceilDiv(k, 64), 2),入参x1和x1Scale进行AllGather后,对x1、x2进行MatMul计算,然后进行dequant操作;

      output=∑0⌊kblockSize=32⌋(AllGather(x1)pr@x2rq∗(AllGather(x1Scale)pr∗x2Scalerq))output=\sum_{0}^{\left \lfloor \frac{k}{blockSize=32} \right \rfloor} (AllGather(x1)_{pr}@x2_{rq}*(AllGather(x1Scale)_{pr}*x2Scale_{rq}))

      gatherOut=AllGather(x1)gatherOut=AllGather(x1)

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
x1 输入 MM左矩阵,即计算公式中的x1。 FLOAT16、BFLOAT16、FLOAT8_E4M3FN、FLOAT8_E5M2、HIFLOAT8、INT8、INT4 ND
x2 输入 MM右矩阵,即计算公式中的x2。 FLOAT16、BFLOAT16、FLOAT8_E4M3FN、FLOAT8_E5M2、HIFLOAT8、INT8、INT4 ND
bias 可选输入 即计算公式中的bias。 FLOAT16、BFLOAT16、FLOAT ND
x1Scale 可选输入 mm左矩阵反量化参数。 FLOAT16、BFLOAT16、FLOAT ND
x2Scale 可选输入 mm右矩阵反量化参数。 FLOAT16、BFLOAT16、FLOAT ND
quantScale 可选输入 即计算公式中的bias。 FLOAT ND
output 输出 AllGather通信与MatMul计算的结果,即计算公式中的output。 FLOAT16、BFLOAT16、FLOAT ND
gatherOut 输出 仅输出all_gather通信后的结果。即公式中的gatherOut。 FLOAT16、BFLOAT16、FLOAT8_E4M3FN、FLOAT8_E5M2、HIFLOAT8、INT8、INT4 ND
amaxOut 可选输出 MM计算的最大值结果,即公式中的amaxOut。 FLOAT ND
blockSize 属性 用于表示mm输出矩阵在M轴方向上和N轴方向上可以用于对应方向上的多少个数的量化。 INT64 -
group 属性 通信域名称。 STRING -
gatherIndex 属性 标识gather目标。 INT64 -
commTurn 属性 通信数据切分数,即总数据量/单次通信量。 INT64 -
streamMode 属性 流模式的枚举。 INT64 -
groupSize 可选属性 用于表示反量化中x1Scale/x2Scale输入的一个数在其所在的对应维度方向上可以用于该方向x1/x2输入的多少个数的反量化。 INT64 -
commMode 属性 通信模式。 STRING -
## 约束说明
  • 确定性计算:

    • 该算子默认确定性实现。
  • Ascend 950PR/Ascend 950DT:

    • 输入x1为2维,其维度为(m, k)。x2必须是2维,其维度为(k, n),轴满足mm算子入参要求,k轴相等,且k轴取值范围为[256, 65535)。
    • bias为1维,shape为(n,)。
    • 输出output为2维,其维度为(m*rank_size, n),rank_size为卡数。
    • 输出gatherout为2维,其维度为(m*rank_size, k),rank_size为卡数。
    • 当x1、x2的数据类型为FLOAT16/BFLOAT16时,output计算输出数据类型和x1、x2保持一致。
    • 当x1、x2的数据类型为FLOAT8_E4M3FN/FLOAT8_E5M2/HIFLOAT8时,output输出数据类型支持FLOAT16、BFLOAT16、FLOAT。
    • 当x1、x2的数据类型为FLOAT16/BFLOAT16/HIFLOAT8时,x1和x2数据类型需要保持一致。
    • 当x1、x2数据类型为FLOAT8_E4M3FN/FLOAT8_E5M2时,x1和x2数据类型可以为其中一种。
    • 当x1、x2数据类型为FLOAT16/BFLOAT16/HIFLOAT8/FLOAT8_E4M3FN/FLOAT8_E5M2时,x2矩阵支持转置/不转置场景,x1矩阵只支持不转置场景。
    • 当groupSize取值为549764202624,bias必须为空。
    • 支持2、4、8、16、32、64卡。
    • allgather(x1)集合通信数据总量不能超过16*256MB,集合通信数据总量计算方式为:m * k * sizeof(x1_dtype) * 卡数。由于shape不同,算子内部实现可能存在差异,实际支持的总通信量可能略小于该值。
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品、Atlas A2 训练系列产品/Atlas A2 推理系列产品:

    • 只支持x2矩阵转置/不转置,x1矩阵仅支持不转置场景。
    • 输入x1必须是2维,其shape为(m, k)。
    • 输入x2必须是2维,其shape为(k, n),轴满足mm算子入参要求,k轴相等,且k轴取值范围为[256, 65535)。
    • bias仅支持输入nullptr。
    • 输出为2维,其shape为(m*rank_size, n), rank_size为卡数。
    • 不支持空tensor。
    • x1和x2的数据类型需要保持一致。
    • x1和x2数据类型为INT4时,k与n必须为偶数。
    • 支持2、4、8卡。

调用说明

调用方式 样例代码 说明
aclnn接口 test_aclnn_all_gather_matmul_v2 通过aclnnAllGatherMatmulV2接口方式调用AllGatherMatmulV2算子。