CANN BatchedMatmulSoftmax任务
7月社区任务-BatchedMatmulSoftmax算子开发任务书
【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions
基础信息
- 技术标签:算子开发
- 适配硬件:Ascend 950PR/Ascend 950DT
- 开源仓地址:https://link.gitcode.com/i/18ed5e6c7cc91e04466f00b64a8029e9
- CANN 版本:算子开源仓指定版本
- 开发语言:Ascend C
任务概述
本算子实现 Batched Matmul 后接行级 Softmax 的融合算子(Batched Matmul + Softmax Fusion)。Batched 输入矩阵经 Matmul 计算后,其输出送入 Softmax 激活函数。该融合方式是 Attention 机制中的核心计算模式。
算子公式
对每个 batch $b$ 独立计算:
$$ \mathbf{S}_b = \text{row_softmax}\big(\mathbf{A}_b \times \mathbf{B}_b\big) $$
其中行级 Softmax 定义为:
$$ \mathbf{S}_b[m, n] = \frac{\exp\big(\mathbf{M}b[m, n] - \max{n'}(\mathbf{M}b[m, n'])\big)} {\displaystyle\sum{n'=0}^{N-1} \exp\big(\mathbf{M}b[m, n'] - \max{n'}(\mathbf{M}_b[m, n'])\big)} $$
其中 $\mathbf{M}_b = \mathbf{A}_b \times \mathbf{B}_b$,$\mathbf{A}_b$ 形状 $(M, K)$,$\mathbf{B}_b$ 形状 $(K, N)$。Matmul 中间结果在算子内部被 Softmax 消费,不对外暴露。
核心开发要求及验收标准
功能实现要求
- 实现融合的 Batched Matmul + 行级 Softmax,单次 kernel launch 完成全部计算。
- 沿 batch 维度独立执行 Matmul + Softmax。
- 使用 max 归一化确保数值稳定性,防止 exp 溢出。
参数说明
| 参数名 | 输入/输出/属性 | 描述 | 使用说明 | 数据类型 | 数据格式 | 维度(shape) | 非连续Tensor |
|---|---|---|---|---|---|---|---|
| A | 输入 | Batched Matmul 左矩阵,形状 (batch, M, K) | RowMajor 布局 | FP16 | ND | 3 | — |
| B | 输入 | Batched Matmul 右矩阵,形状 (batch, K, N) | ColumnMajor 布局 | FP16 | ND | 3 | — |
| S | 输出 | Softmax 输出矩阵,形状 (batch, M, N) | RowMajor 布局 | FP16 | ND | 3 | — |
算子约束限制
- 无特殊约束
测试标准
需参考 CPU 精度标杆自行设计自验证用例,覆盖单 batch 和多 batch 场景、多种问题规模。自验证报告完整、可复现,所有测试用例执行通过。
性能要求
性能标杆为CUTLASS的35_gemm_softmax,算子整体性能需与 0.8 倍 GPU(H100)持平。
精度要求
算子计算精度需满足 AscendOpTest 工具默认阈值。
文档规范要求
- 算子设计文档需根据参考模板填写,内容完整、格式规范,且必须通过评审;
- 自验证报告需要覆盖所有功能场景,参考xxx算子自验证报告,含测试用例执行日志/截图、整体测试通过截图、性能数据截图,可清晰指导算子使用与测试;
- README 文档内容完整、规范。
验收交付件
1, 自测用例、测试结果报告、测试步骤指导文档
2, 算子代码的私仓邀请链接、代码仓路径、分支、算子目录
PR 申请合入
测试通过后,在 Catlass 代码仓提交 PR 申请,申请将开发完成的算子合入https://link.gitcode.com/i/18ed5e6c7cc91e04466f00b64a8029e9,具体目录参考该PR:https://link.gitcode.com/i/18ed5e6c7cc91e04466f00b64a8029e9/pull/678 。
参考资料
- 文档类:Ascend C算子开发文档、CATLASS创新样例开发流程指南
- 课程类:Ascend C在线课程
- 参考样例:https://link.gitcode.com/i/18ed5e6c7cc91e04466f00b64a8029e9/blob/master/examples/44_quant_matmul_full_loadA_tla
环境获取
开源仓提供100小时免费时长,请不使用时及时关闭,用时耗尽前请务必保存相关资料,建议及时提交备份。
使用 hidevlab notebook 算力(https://hidevlab.huawei.com/online-develop-intro?from=hiascend)
如需额外环境资源,请联系昇腾小助手。
特别注意事项
- 开发过程需严格遵循 Ascend C 编程规范及算子开发相关要求;
- 所有交付件需提前完成自验证,确认符合验收标准后再提交验收申请;
- 开发前请务必阅读【社区任务】流程及注意事项,会例行更新。
【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
