当前位置: 首页 > news >正文

CANN MatmulPermute算子开发

7月社区任务-MatmulPermute算子开发任务书

【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions

基础信息

  • 技术标签:算子开发
  • 适配硬件:Ascend 950PR/Ascend 950DT
  • 开源仓地址:https://link.gitcode.com/i/0e48052c815508181d7d1346f9573c34
  • CANN 版本:算子开源仓指定版本
  • 开发语言:Ascend C

任务概述

本算子实现 Matmul 后接输出张量维度重排(Permute)的融合算子。Matmul 计算结果在写入显存时按照 Tensor4DPermute0213 规则重新排列。

算子公式

标准 Matmul:$\mathbf{D} = \mathbf{A} \times \mathbf{B}$,输出形状 $(M, N)$。

融合 Permute 后,输出按以下规则写入:

$$ \text{Matrix}(M, N) \xrightarrow{\text{reshape}} \text{Tensor4D}(M/S_1, S_1, S_2, N/S_2) \xrightarrow{\text{permute}[0,2,1,3]} \text{Tensor4D}(M/S_1, S_2, S_1, N/S_2) $$

核心开发要求及验收标准

功能实现要求

  1. 实现 Matmul + 融合输出 Tensor4DPermute0213,单次 kernel launch 完成全部计算。
  2. $S_1$、$S_2$ 为编译期常数,由 host 侧组装时传入模板参数。
  3. 后处理实现需支持泛化 $S_1$/$S_2$,验收时 $S_1=8, S_2=4$。
  4. 输入 $M$ 需被 $S_1$ 整除,$N$ 需被 $S_2$ 整除。

参数说明

参数名输入/输出/属性描述使用说明数据类型数据格式维度(shape)非连续Tensor
A输入Matmul 左矩阵,形状 (M, K)RowMajor 布局FP16ND2
B输入Matmul 右矩阵,形状 (K, N)RowMajor 布局FP16ND2
S1编译时属性reshape 第一维因子M % S1 == 0INT320
S2编译时属性reshape 第二维因子N % S2 == 0INT320
D输出Matmul 输出矩阵按 Tensor4DPermute0213 写入显存FP16ND4 (permuted)

算子约束限制

  • $M$ 需被 $S_1$ 整除,$N$ 需被 $S_2$ 整除

测试标准

需参考 CPU 精度标杆自行设计自验证用例,覆盖多种问题规模和 $S_1/S_2$ 组合。自验证报告完整、可复现,所有测试用例执行通过。

性能要求

性能标杆为CUTLASS的39_gemm_permute,算子整体性能需与 0.8 倍 GPU(H100)持平。

精度要求

算子计算精度需满足 AscendOpTest 工具默认阈值。

文档规范要求

  1. 算子设计文档需根据参考模板填写,内容完整、格式规范,且必须通过评审;
  2. 自验证报告需要覆盖所有功能场景,参考xxx算子自验证报告,含测试用例执行日志/截图、整体测试通过截图、性能数据截图,可清晰指导算子使用与测试;
  3. README 文档内容完整、规范。

验收交付件

1, 自测用例、测试结果报告、测试步骤指导文档

2, 算子代码的私仓邀请链接、代码仓路径、分支、算子目录

PR 申请合入

测试通过后,在 Catlass 代码仓提交 PR 申请,申请将开发完成的算子合入https://link.gitcode.com/i/0e48052c815508181d7d1346f9573c34,具体目录参考该PR:https://link.gitcode.com/i/0e48052c815508181d7d1346f9573c34/pull/678 。

参考资料

  1. 文档类:Ascend C算子开发文档、CATLASS创新样例开发流程指南
  2. 课程类:Ascend C在线课程
  3. 参考样例:https://link.gitcode.com/i/0e48052c815508181d7d1346f9573c34/blob/master/examples/44_quant_matmul_full_loadA_tla

环境获取

  1. 开源仓提供100小时免费时长,请不使用时及时关闭,用时耗尽前请务必保存相关资料,建议及时提交备份。

  2. 使用 hidevlab notebook 算力(https://hidevlab.huawei.com/online-develop-intro?from=hiascend)

  3. 如需额外环境资源,请联系昇腾小助手。

特别注意事项

  1. 开发过程需严格遵循 Ascend C 编程规范及算子开发相关要求;
  2. 所有交付件需提前完成自验证,确认符合验收标准后再提交验收申请;
  3. 开发前请务必阅读【社区任务】流程及注意事项,会例行更新。

【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.gsyq.cn/news/1641765.html

相关文章:

  • 低成本高精度时钟合成方案:CS2200-CP与STM32F031K6实践
  • 如何快速开始Pillar Valley游戏开发:10个新手必学技巧
  • RetinexNet实战教程:5分钟完成低光图像增强,附代码示例
  • Pillar Valley游戏美术资源管理:Three.js材质与纹理的最佳实践
  • 10分钟掌握防撤回神器:RevokeMsgPatcher从新手到高手的完整指南
  • Project Restoration技术架构深度解析:游戏补丁开发原理与实践
  • Coding Coach社区治理指南:开源项目的协作与贡献流程
  • Vue Content Loading:打造Facebook风格SVG加载卡片的终极指南
  • Twitter API Client部署指南:从开发到生产环境的最佳实践
  • Team IDE中的Zookeeper和Kafka管理:集群配置与消息处理实战
  • 嵌入式Linux设备驱动开发:Mastering Embedded Linux Programming中的GPIO和I2C实战
  • StreamPETR可视化工具使用教程:3D检测结果的可视化分析
  • Pillar Valley游戏性能监控终极指南:使用Analytics进行用户行为分析
  • 如何配置Vulkan开发环境?Windows/Linux/MacOS平台搭建教程
  • 如何用Flowframes实现视频帧率翻倍:AI插帧的终极指南
  • VimGolf挑战机制深度剖析:分数计算与排行榜算法揭秘
  • Kokoro TTS终极指南:10分钟掌握命令行AI语音合成神器
  • Vue Content Loading与其他加载组件对比:为什么它更胜一筹?[特殊字符]
  • GitHub Green Software Directory入门指南:什么是绿色软件及其3大核心原则
  • Yt高级功能终极指南:版权声明、资产管理和批量报告一键掌握
  • 为什么选择kiUi?揭秘这款OpenGL后端UI库的核心优势
  • Serverless Node.js Starter vs 其他框架:为什么它是Node.js无服务器开发的首选
  • 如何快速使用d2s-editor:暗黑破坏神2存档编辑器的完整入门指南
  • OpenAI Responses Starter App错误处理与调试:常见问题解决方案
  • MiniCPM-V 4.6 部署实战:基于 GPUStack 与 SGLang 的端侧多模态模型部署
  • 为什么选择Upmin Admin Ruby?Rails开发者必备的10个理由
  • kiUi性能优化技巧:让你的OpenGL界面流畅运行的10个方法
  • Traduccion项目完全指南:如何参与You Don‘t Know JS西班牙语翻译
  • d3d8to9完整指南:让老游戏在Windows 10/11上完美运行的免费解决方案
  • 终极Sunshine游戏串流卸载指南:如何彻底清理并释放系统资源