news 2026/5/10 6:22:32

CATLASS量化矩阵全载TLA

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CATLASS量化矩阵全载TLA

CATLASS Quant Matmul Full LoadA Tla 样例介绍

【免费下载链接】catlass本项目是CANN的算子模板库,提供NPU上高性能矩阵乘及其相关融合类算子模板样例。项目地址: https://gitcode.com/cann/catlass

原型设计

名称/Name类型/Class数据类型/Dtype维度/Dims格式/Format描述/Description
matAinTensorint8[m, k]ND左矩阵
matBinTensorint8[n, k]ND右矩阵,支持转置
scaleinTensorfloat[n]NDperChannel量化系数
perTokenScaleinTensorfloat[m]NDperToken量化系数
matDoutTensorbf16[m, n]ND输出矩阵

样例实现

CATLASS44_quant_matmul_full_loadA_tla样例算子是基于CATLASS Gemm API实现的昇腾亲和Matmul算子,针对大尺寸矩阵计算场景优化设计,关键算子组件包括以下几部分:

  • Example组装:quant_matmul_full_loadA_tla.cpp

  • Kernel实现

    • 主Kernel文件:quant_matmul_full_loadA_tla.hpp
  • Block组件,包含:

    • 全载专门的mmad组件block_mmad_pingpong_full_loadA_tla.hpp
    • 反量化后处理组件block_epilogue_per_token_dequant_tla.hpp;
    • 多核全载用的swizzleGemmIdentityBlockSwizzleL1FullLoad

方案设计

  • 如下图所示,模板库矩阵有关键参数L1TileShape<M, N, K>,C矩阵按照L1TileShape::ML1TileShape::N参数切分基本块并分核,而后普通Matmul模板会将A矩阵中L1TileShape::M * L1TileShape::K大小的矩阵块载入L1,而A矩阵全载模板会直接将L1TileShape::M * K大小的矩阵块载入L1,而对于B矩阵,普通模板和A矩阵全载模板都是载入L1TileShape::K * L1TileShape::N大小的矩阵块L1。

  • A矩阵全载模板相较普通模板的流水变动如下图所示,使用全载方案,在计算一开始就经MTE2完整搬入A矩阵的数据块,而后pingpong搬入B矩阵执行计算。

  • 采用A矩阵全载模板时,需要一半的L1空间以放入L1TileShape::M * problemShape.K的数据,若L1空间不够A矩阵全载,则返回报错。
  • A矩阵全载时,N轴越大,单核越能多次复用L1中的A矩阵、无需再从GM或L2Cache搬运A矩阵,性能收益就越大。
  • A矩阵全载时,N轴较小,无法复用A矩阵,性能收益较00_basic_matmul可能会出现劣化。
  • problemShape.M > L1TileShape::M,可使用GemmIdentityBlockSwizzleL1FullLoad<SwizzleOffset, SwizzleDirection, AicCoreNum>策略,使得每个核需要处理的基本块尽可能地连在一起,提升A矩阵分核全载时的块间复用率。
  • problemShape.M <= L1TileShape::M,即M方向不切块分核,此时使用GemmIdentityBlockSwizzle策略即可适用,常用的策略参数选取可参考swizzle_explanation。
  • 以20个cube核为例,常用的GemmIdentityBlockSwizzle策略的基本块分核顺序为0-1-2-...-18-19-0-1-2...-18-19-0-1-2...,每个核需要处理的基本块跳跃分布,而GemmIdentityBlockSwizzleL1FullLoad策略的基本块分核顺序为0-0...-0-1-1...-1-2-2...-19,每个核需要处理的基本块连续分布。

性能收益

使用相同tileShape和swizzle参数,相比标杆样例12_quant_matmul,具备A矩阵全载特性的样例性能平均提升5%~15%,这是由于全载实现减少了计算过程中的A矩阵搬运,提升了全载矩阵的数据复用率,可参考下表。

[M,N,K]12_quant_matmul44_quant_matmul_full_loadA_tla
[512, 4096, 1024]33.26 us31.73 us
[128,16384, 1024]38.68 us37.05 us
[1024, 4096, 1024]42.66 us41.96 us
[512,8192,1024]52.36 us44.05 us
[128,16384,2048]53.77 us52.75 us

说明:

  • 标杆为QuantMatmul算子。
  • 统计耗时均为核函数总耗时,使用msprof工具得到。
  • 上述测试例中A、B及输出矩阵均为layout::RowMajor排布方式。
  • 测试环境说明:NPU型号为910B1,CANN包版本为9.0.0。

【免费下载链接】catlass本项目是CANN的算子模板库,提供NPU上高性能矩阵乘及其相关融合类算子模板样例。项目地址: https://gitcode.com/cann/catlass

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 6:22:08

aiflows框架:构建模块化AI工作流的开源解决方案

1. 项目概述&#xff1a;当AI工作流成为团队协作的“操作系统”如果你和我一样&#xff0c;在AI应用开发这条路上摸爬滚打了好几年&#xff0c;肯定经历过这样的场景&#xff1a;一个看似简单的智能客服项目&#xff0c;背后是十几个独立的脚本——一个负责调用大语言模型API&a…

作者头像 李华
网站建设 2026/5/10 6:19:42

本地AI代理桥接器:统一调用多云端大模型的轻量级解决方案

1. 项目概述与核心价值最近在折腾一些本地AI应用和自动化流程时&#xff0c;遇到了一个挺典型的问题&#xff1a;我手头有一些功能强大的云端API服务&#xff0c;比如OpenAI的ChatGPT、Claude&#xff0c;或者一些图像生成模型&#xff0c;但出于数据隐私、网络延迟、成本控制或…

作者头像 李华
网站建设 2026/5/10 6:15:37

ARM7TDMI-S处理器架构与嵌入式系统优化指南

1. ARM7TDMI-S处理器架构深度解析 ARM7TDMI-S是ARM公司推出的经典32位RISC处理器&#xff0c;采用冯诺依曼架构设计。作为ARMv4T架构的代表性实现&#xff0c;它在嵌入式系统领域具有里程碑意义。这款处理器最显著的特点是支持双指令集——标准的32位ARM指令集和压缩的16位Thum…

作者头像 李华
网站建设 2026/5/10 6:13:16

ChatGPT-RetrievalQA数据集解析:用合成数据训练检索模型的实践指南

1. 项目概述与核心问题最近在信息检索和自然语言处理社区里&#xff0c;一个话题讨论得挺热&#xff1a;既然像ChatGPT这样的大语言模型已经能生成相当不错的答案&#xff0c;我们为什么还需要传统的检索模型&#xff1f;更进一步&#xff0c;ChatGPT生成的这些答案&#xff0c…

作者头像 李华
网站建设 2026/5/10 6:13:08

浏览器扩展开发实战:实现网页搜索框自动聚焦与键盘导航优化

1. 项目概述&#xff1a;一个提升网页搜索效率的浏览器扩展 如果你和我一样&#xff0c;是个重度键盘使用者&#xff0c;那么你一定经历过这种场景&#xff1a;打开一个电商网站或者在线词典&#xff0c;准备搜索商品或单词时&#xff0c;手不得不离开键盘&#xff0c;挪动鼠标…

作者头像 李华