已合并
【FEATURE】A2/A3 ACLNN Addmm/Baddbmm/AddmmWeightNz 支持 broadcast bias 路由 GemmV3 #8784
HKFLYE创建于 8月17日
【FEATURE】A2/A3 ACLNN Addmm/Baddbmm/AddmmWeightNz 支持 broadcast bias 路由 GemmV3 #8784
已合并
Pull Request已成功合入, 合并人@CANN-robot
(感谢 HKFLYE 的贡献)atomgit-bot
8月17日 评论:
8月17日 评论:
变更摘要
本 PR 主要调整 A2/A3(DAV_2201)上 aclnnAddmm、aclnnBaddbmm、aclnnAddmmWeightNz 的 ACLNN 路由逻辑,使 cubeMathType=USE_FP32_ADD 且存在 broadcast bias 的场景能够直接路由至 GemmV3 完成矩阵乘、alpha/beta 缩放和 bias 广播,同时补齐相应 OpDef 类型声明与 A2/A3 的 binary Kernel 配置,并清理了原有的 broadcast 限制校验。
主要改动
- 清理 broadcast bias 路由限制:在
cube_util.cpp/cube_util.h中删除CheckAddmmTensorShapeNeedBroadcast,并将CheckCubeMathTypeForAddMm简化为仅校验cubeMathType取值和平台能力,不再因 bias 与矩阵乘输出 shape 不一致而拒绝USE_FP32_ADD。 - 调整 Addmm/Baddbmm 的 GemmV3 路由:
aclnn_addmm.cpp与aclnn_baddbmm.cpp中移除needBroadcast判断,改为校验 bias dtype 与矩阵输入 dtype 一致或为DT_FLOAT,使USE_FP32_ADD和 16in32out 场景可直接走ExecGemmV3WithAlphaBetaOp;同时区分enableFp32Output与enableGemm16In32Out,避免 FP16/BF16 输出误用 16in32out。 - 放开 AddmmWeightNz 的 USE_FP32_ADD 路由:
aclnn_addmm.cpp中删除routeCubeMathType4ToCubeMathType0DAV_2201调用,允许cubeMathType=USE_FP32_ADD时通过CheckGemmV3WithAlphaBeta直接路由至GemmV3,并支持 broadcast bias 与 ND×NZ 输入组合。 - 补齐 GemmV3 类型声明与 Kernel 配置:
gemm_v3_def.cpp新增 FP16/BF16 的 ND×ND 输入、FP32 输出及 ND×NZ 输入、低精度输出共四组类型/格式组合;ascend910b和ascend910_93的gemm_v3_binary.json新增GemmV3_ND_NZ_ND_ND_FP16_FP16_FP16_FP16与GemmV3_ND_NZ_ND_ND_BF16_BF16_BF16_BF16两个同类型输出 Kernel。 - 同步 tiling 结构字段命名:
gemm_v3_tiling_data.h与gemm_v3_base_tiling.cpp将reservedBiasBroadcast字段重命名为reserved,并同步更新其赋值。


不准确?
atomgit-bot
8月17日 评论:
8月17日 评论:
8月17日 添加了label:stat/needs-squash
8月17日 添加了label:cann-cla/yes
此处折叠了57条消息 查看更多
CANN-robot
8月18日 评论:
8月18日 评论:
The following users do not have permission to comment /lgtm or /approve on any module in this PR:
void_ptr


8月18日 添加了label:approved
8月18日 关闭了关联的issue
8月18日 合入了pull request
CANN-robot
8月18日 评论:
8月18日 评论:
Pull Request 已合并或已关闭。
If you want to solve this problem, you can click here to do it in the FAQs.


描述
本 PR 适配 Addmm、Baddbmm 及 AddmmWeightNz 的 ACLNN 接口路由,使 A2/A3(DAV_2201)上的 broadcast bias 场景能够直接使用 GemmV3 完成矩阵乘、alpha/beta 缩放及 bias broadcast。
主要修改如下:
1. 清理 broadcast bias 路由限制
CheckAddmmTensorShapeNeedBroadcast。CheckCubeMathTypeForAddMm,仅保留cubeMathType取值及平台能力校验。cubeMathType=USE_FP32_ADD。2. 调整 Addmm 和 Baddbmm 的 GemmV3 路由
cubeMathType=USE_FP32_ADD时,允许 broadcast bias 进入 GemmV3。3. 调整 AddmmWeightNz 的 GemmV3 路由
cubeMathType=USE_FP32_ADD转换为cubeMathType=KEEP_DTYPE的逻辑。cubeMathType=USE_FP32_ADD时,支持 AddmmWeightNz 直接路由至 GemmV3。4. 补齐 GemmV3 OpDef 类型声明
补充以下四组类型和格式组合:
前两组用于 ND×ND 低精度 bias 的 16in32out 场景,后两组用于 AddmmWeightNz 在
cubeMathType=USE_FP32_ADD下保持低精度输出的场景。5. 补齐 A2/A3 GemmV3 binary 配置
在以下配置中补充 ND×NZ 同类型输出 Kernel:
ascend910b/gemm_v3_binary.jsonascend910_93/gemm_v3_binary.json新增配置:
GemmV3_ND_NZ_ND_ND_FP16_FP16_FP16_FP16GemmV3_ND_NZ_ND_ND_BF16_BF16_BF16_BF16未修改
ascend950和ascend350的 binary 配置。6. 支持的 bias broadcast shape
Addmm/AddmmWeightNz
输出 shape 为
[M,N]:[N]、[1,N][M,1][1]、[1,1][M,N]Baddbmm
输出 shape 为
[B,M,N]:[N]、[1,N]、[1,1,N][M,1]、[1,M,1][1]、[1,1]、[1,1,1][B,1,1][B,M,N]关联的Issue
Issue #4844
测试
1. ATK 精度泛化用例
在 A2/A3 环境执行2000条 ATK L0 双标杆精度泛化用例:
精度用例覆盖:
cubeMathType=USE_FP32_ADD;双标杆精度首轮结果为 1998/2000 通过,两条失败用例定点复检均通过,未发现稳定复现的精度问题。
2. 性能验证
执行100条三通路性能对比用例:
对比以下三条通路:
GemmV3 与 PPMatMul 使用相同的原始 shape、物理布局、transpose 和 contiguous 条件。
性能结果:
文档更新
更新以下 ACLNN 接口文档:
文档更新内容包括:
类型标签
AI/Agent生成声明