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

昇腾CANN的算子“零件厂“:catlass仓库到底在生产什么

如果把昇腾NPU上的大模型算子比作一辆汽车FlashAttention是发动机RMSNorm是刹车片RoPE是方向盘——那catlass是什么是生产这些零件的模具和机床。第一次接触昇腾CANN生态的时候很容易忽略catlass。它不像ops-transformer那样直接提供FlashAttention这种成品算子也不像torch_npu那样可以直接调用。catlass藏在更底层提供的是算子开发的基础模板——分块矩阵乘、softmax归一化、数据搬运策略。FlashAttention里的在线softmax和分块计算底层都靠catlass的模板撑着。catlass不是CUTLASS这个名字容易让人误解。NVIDIA生态里有个著名的CUTLASSCUDA Templates for Linear Algebra Subroutines是英伟达的矩阵运算模板库。catlass的命名确实有致敬CUTLASS的意味但它跟CUTLASS没有代码层面的关系也不是CUTLASS的昇腾移植版。catlass是昇腾NPU原生的算子模板库专门针对达芬奇架构的硬件特性设计Unified Buffer的容量约束、Cube和Vector计算单元的流水编排、DMA搬运和计算的重叠。这些在CUDA上是另一套逻辑没法直接搬过来。仓库定位算子开发的基础设施昇腾CANN的算子生态分三层catlass在最底层应用算子层ops-transformerFlashAttention、RMSNorm等成品算子 ↑ 依赖 算子模板层catlass分块矩阵乘、reduce、softmax模板 ↑ 依赖 硬件抽象层Ascend C达芬奇架构的编程接口打个比方catlass提供砖头和水泥ops-transformer用这些材料盖房子。想在昇腾NPU上开发新的FlashAttention变体先得理解catlass怎么生产砖头。仓库结构模板在哪里git clone https://atomgit.com/cann/catlass.git cd catlass核心目录catlass/ ├── include/ │ └── catlass/ │ ├── gemm/ # 分块矩阵乘模板核心 │ │ ├── kernel/ │ │ │ ├── gemm_split_k.h # Split-K并行策略 │ │ │ └── gemm_batched.h # 批量矩阵乘 │ │ ├── thread/ │ │ │ └── mma.h # 矩阵乘累加 │ │ └── collective/ │ │ └── sm80_gemm.h # 分块搬运计算流水 │ ├── reduction/ # 归约操作模板 │ │ ├── thread/ │ │ │ └── reduce.h # 单块内reduce │ │ └── block/ │ │ └── reduce.h # 跨块reduce │ ├── softmax/ # softmax模板 │ │ └── online_softmax.h # 在线softmaxFlashAttention的基石 │ └── layout/ # 数据布局适配 │ └── layout.h # BNSD/BSND等格式转换 ├── examples/ # 使用示例 │ ├── flash_attention/ # 用catlass搭FlashAttention │ └── simple_gemm/ # 基础矩阵乘示例 └── tests/ # 单元测试online_softmax.h和gemm/是FlashAttention开发者最需要关注的两个模块。分块矩阵乘catlass的发动机FlashAttention的核心操作是Q×K^T和注意力权重×V本质上都是分块矩阵乘。catlass的GEMM模板把分块策略、数据搬运、计算流水全部封装好// catlass/include/catlass/gemm/kernel/gemm_split_k.h // 分块矩阵乘的简化示意伪代码 templatetypename ElementA, typename ElementB, typename ElementC struct GemmSplitK { // 分块参数决定一次算多大的块 struct TileShape { static const int kM 128; // M方向分块大小 static const int kN 128; // N方向分块大小 static const int kK 64; // K方向分块大小 }; // 整个GEMM分三阶段流水 void operator()(Params const params) { // 阶段1从GMEM加载A/B分块到L1/UB LoadTileFromGlobal(params.A, params.B, tile_a, tile_b); // 阶段2Cube单元做矩阵乘累加 // 阶段1和阶段2流水化加载第(i1)块的同时计算第i块 for (int k 0; k params.K / TileShape::kK; k) { LoadNextTile(...); // DMA搬运 ComputeCurrentTile(tile_a, tile_b, acc); // Cube计算 } // 阶段3结果从UB写回GMEM StoreTileToGlobal(params.C, acc); } };这里最关键的设计是搬运和计算的流水化。昇腾NPU有独立的DMA引擎和计算单元加载下一块数据的同时可以计算当前块两者并行。如果等加载完再算、算完再加载吞吐直接砍半。分块大小128×128×64不是随便定的。昇腾910的Cube单元一次能处理16×16的FP16矩阵乘128×128正好是8×8个Cube微操作UB装得下且对齐到128字节边界。在线softmaxFlashAttention的数学基石catlass里的online_softmax.h是在线softmax的模板实现FlashAttention的前向计算直接依赖它// catlass/include/catlass/softmax/online_softmax.h // 在线softmax模板伪代码示意流程 templatetypename T, int BlockSize struct OnlineSoftmax { struct State { T row_max; // 当前行最大值防溢出用 T row_sum; // 当前行指数和 T* acc_output; // 累加输出指针 }; // 每处理一个新块就调用一次Update static void Update(State state, T* new_scores, T* new_values, int block_len) { // 找新块的局部最大值 T local_max ReduceMax(new_scores, block_len); // 更新全局最大值 T new_max Max(state.row_max, local_max); // 关键重新缩放之前的累加结果 // 数学上等价于把所有分数放到同一个exp尺度下 T correction Exp(state.row_max - new_max); state.row_sum state.row_sum * correction; ScaleAccOutput(state.acc_output, correction); // 加上新块的贡献 // 减new_max防溢出FP16下exp(88.7)inf T* exp_scores ExpSub(new_scores, new_max, block_len); T local_sum ReduceSum(exp_scores, block_len); state.row_sum state.row_sum local_sum; AccumulateOutput(state.acc_output, exp_scores, new_values); state.row_max new_max; } // 所有块处理完后归一化 static void Finalize(State state, int seq_len) { ScaleAccOutput(state.acc_output, 1.0 / state.row_sum); } };correction Exp(state.row_max - new_max)这一行是在线softmax的精髓。标准softmax需要先扫一遍全局最大值再扫一遍算指数和。在线softmax把它变成增量的每来一个新块如果发现了更大的值就把之前所有结果按比例缩放回来。数学上完全等价但不需要存全局信息。FlashAttention的前向计算就是外层循环遍历Q分块内层循环遍历K/V分块每一步调catlass的OnlineSoftmax::Update更新累加结果。catlass跟ops-transformer的协作实际代码里ops-transformer的FlashAttention算子直接引用catlass的头文件ops-transformer/opkernel/flash_attention/ ├── flash_attention_score.cc │ #include catlass/gemm/kernel/gemm_split_k.h // 分块矩阵乘 │ #include catlass/softmax/online_softmax.h // 在线softmax │ #include catlass/reduction/block/reduce.h // 跨块reduce开发流程是这样的catlass定义OnlineSoftmax、GemmSplitK等模板ops-transformer在FlashAttention算子里实例化这些模板传入昇腾NPU的硬件参数UB大小、Cube规格等编译时模板展开生成针对910硬件优化的机器码这种分层设计的好处改FlashAttention的算法逻辑比如加个causal mask只改ops-transformer改分块策略或softmax的数值精度改catlass。互不干扰。从catlass搭建一个简化版FlashAttentioncatlass的examples目录里有一个简化版FlashAttention示例展示了怎么用模板搭出完整算子// catlass/examples/flash_attention/flash_attention_example.cc // 简化示意 templatetypename T void FlashAttentionForward( T* query, T* key, T* value, T* output, int batch, int heads, int seq_len, int dim, int block_size 128 ) { int num_blocks seq_len / block_size; for (int b 0; b batch; b) { for (int h 0; h heads; h) { for (int qi 0; qi num_blocks; qi) { // 取Q分块 T* q_block query offset(b, h, qi * block_size, 0); // 初始化在线softmax状态 typename OnlineSoftmaxT, 128::State state; state.row_max -1e9; state.row_sum 0; for (int ki 0; ki num_blocks; ki) { T* k_block key offset(b, h, ki * block_size, 0); T* v_block value offset(b, h, ki * block_size, 0); // 用catlass的GEMM模板算Q×K^T GemmSplitKT, T, T gemm; T local_scores[128 * 128]; gemm(q_block, k_block, local_scores, block_size, block_size, dim); // 缩放 Scale(local_scores, 1.0 / sqrt(dim)); // 用catlass的在线softmax更新 OnlineSoftmaxT, 128::Update(state, local_scores, v_block, block_size); } // 归一化输出 OnlineSoftmaxT, 128::Finalize(state, seq_len); // 写回output StoreOutput(output offset(b, h, qi * block_size, 0), state); } } } }这就是FlashAttention的骨架分块矩阵乘在线softmax。catlass把底层的搬运、对齐、流水化全部封装在模板里上层代码只需要关心算什么和怎么累加。跟其他仓库的边界catlass的职责边界需要搞清楚需求去哪个仓库调FlashAttention跑推理torch_npu改FlashAttention的算法逻辑ops-transformer改分块策略或softmax模板catlass写一个全新的算子catlass模板 ops-*注册调图融合优化gecatlass只负责怎么高效地在昇腾NPU上做基础运算不涉及具体的算子逻辑和图调度。##昇腾NPU上catlass的硬件适配catlass的模板设计有三个昇腾特有的约束UB容量约束Unified Buffer约256KB分块大小必须适配。catlass的TileShape默认128×128×64单个FP16分块约占32KB5个分块Q/K/V/Score/Output加中间结果约160KB留有余量128字节对齐昇腾NPU的DMA搬运要求数据起始地址128字节对齐。catlass的layout模块自动处理padding和对齐开发者不需要手动算偏移Cube和Vector的分工矩阵乘走Cube单元高吞吐标量运算和softmax走Vector单元。catlass的GEMM模板默认走CubeOnlineSoftmax走Vector两者通过UB传递数据克隆catlass仓库先看examples/flash_attention/的示例代码理解模板怎么搭出完整算子。然后读online_softmax.h的在线softmax实现这是FlashAttention的数学基石。https://atomgit.com/cann/catlass

相关文章:

昇腾CANN的算子“零件厂“:catlass仓库到底在生产什么

如果把昇腾NPU上的大模型算子比作一辆汽车,FlashAttention是发动机,RMSNorm是刹车片,RoPE是方向盘——那catlass是什么?是生产这些零件的模具和机床。 第一次接触昇腾CANN生态的时候,很容易忽略catlass。它不像ops-tr…...

5步掌握Proxmox-Arm64:在ARM设备上部署企业级虚拟化平台的终极指南

5步掌握Proxmox-Arm64:在ARM设备上部署企业级虚拟化平台的终极指南 【免费下载链接】Proxmox-Arm64 Proxmox VE & PBS unofficial arm64 version 项目地址: https://gitcode.com/gh_mirrors/pr/Proxmox-Arm64 你是否曾想过在树莓派、Rockpi或鲲鹏服务器上…...

嘎嘎降AI和率零深度对比:2026年同为低价工具效果差距完整评测报告

嘎嘎降AI和率零深度对比:2026年同为低价工具效果差距完整评测报告 选工具之前做了一周功课,试用了三款,最后定了嘎嘎降AI(www.aigcleaner.com)。 4.8元,知网AI率从61%降到了5.3%,达标率99.26%…...

WorldArena榜单第一名Pelican-Unify 1.0:迈向具身智能统一范式的新里程碑

北京人形机器人创新中心团队发布首个统一理解、推理、想象与行动的具身基础模型 2026年5月 | 技术解读 图1 Pelican-Unify 1.0 统一具身智能模型概览:理解、推理、想象与行动的闭环融合 一、具身智能的范式演进:从模块化到统一化 具身智能&#xff08…...

从需求到上线仅48小时,Lovable无代码交付全流程拆解,含客户验收话术与交付Checklist

更多请点击: https://codechina.net 第一章:从需求到上线仅48小时,Lovable无代码交付全流程拆解,含客户验收话术与交付Checklist 极速交付的核心逻辑 Lovable 平台通过「场景模板 可视化逻辑编排 API 低侵入集成」三重能力压缩…...

AI Agent测试不再黑盒:从Prompt覆盖率到行为一致性,5步构建可审计、可复现、可量化的工业级测试体系

更多请点击: https://kaifayun.com 第一章:AI Agent测试不再黑盒:从Prompt覆盖率到行为一致性,5步构建可审计、可复现、可量化的工业级测试体系 传统AI Agent测试常陷于“输入-输出”表层验证,缺乏对内部推理链、工具…...

【Midjourney颗粒感控制白皮书】:基于1278组V6.1→V6.2渲染样本的统计建模,颗粒强度与--chaos关联性达r=0.93

更多请点击: https://intelliparadigm.com 第一章:Midjourney颗粒感控制白皮书导论 颗粒感(Grain)是Midjourney图像生成中影响画面质感、胶片氛围与艺术真实性的关键隐式参数。它并非独立命令,而是深度耦合于 --sty…...

Agent-S3技术深度解析:首个超越人类性能的智能体框架实战指南

Agent-S3技术深度解析:首个超越人类性能的智能体框架实战指南 【免费下载链接】Agent-S Agent S: an open agentic framework that uses computers like a human 项目地址: https://gitcode.com/GitHub_Trending/ag/Agent-S Agent-S3作为首个在OSWorld基准测…...

Playnite:你的终极游戏库统一管理器,告别平台切换烦恼

Playnite:你的终极游戏库统一管理器,告别平台切换烦恼 【免费下载链接】Playnite Video game library manager with support for wide range of 3rd party libraries and game emulation support, providing one unified interface for your games. 项…...

AI Agent重构餐饮服务链:从排队超15分钟到响应<1.2秒的9大技术跃迁(行业首份效能白皮书)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;AI Agent重构餐饮服务链&#xff1a;从排队超15分钟到响应<1.2秒的9大技术跃迁&#xff08;行业首份效能白皮书&#xff09; 传统餐饮服务链中&#xff0c;用户进店、点餐、支付、出餐、反馈等环节高度依赖…...

3步终极解决方案:如何专业卸载Windows 10/11的Microsoft Edge浏览器

3步终极解决方案&#xff1a;如何专业卸载Windows 10/11的Microsoft Edge浏览器 【免费下载链接】EdgeRemover A PowerShell script that correctly uninstalls or reinstalls Microsoft Edge on Windows 10 & 11. 项目地址: https://gitcode.com/gh_mirrors/ed/EdgeRemo…...

终极音乐整合方案:用MusicFree插件打造你的专属音乐中心

终极音乐整合方案&#xff1a;用MusicFree插件打造你的专属音乐中心 【免费下载链接】MusicFreePlugins MusicFree播放插件 项目地址: https://gitcode.com/gh_mirrors/mu/MusicFreePlugins 还在为音乐平台会员费烦恼吗&#xff1f;还在忍受不同平台间的歌曲版权割裂吗&…...

预测编码在深度神经网络中的优势与应用

1. 预测编码在深度神经网络中的核心价值预测编码&#xff08;Predictive Coding, PC&#xff09;作为神经科学启发的机器学习范式&#xff0c;近年来在深度学习领域展现出独特优势。这种受大脑信息处理机制启发的方法&#xff0c;与传统的反向传播&#xff08;Backpropagation&…...

为什么你的AI搜索总不准?2026年5款高精度免费工具底层架构拆解:向量引擎、重排序模块与Query理解差异全曝光

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么你的AI搜索总不准&#xff1f;——2026年免费高精度AI搜索工具全景洞察 AI搜索不准&#xff0c;根源常被误判为“模型不够大”&#xff0c;实则多源于查询理解失焦、上下文截断、知识新鲜度缺失与…...

【Gartner认证实践框架】:AI Agent客服上线前必须完成的12项合规性验证清单(含GDPR/等保2.0/金融信创适配)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI Agent客服的合规性验证战略定位 在金融、医疗、电信等强监管行业&#xff0c;AI Agent客服系统不仅需满足功能与体验目标&#xff0c;更须将合规性嵌入其设计、开发与运营全生命周期。合规性验证不是…...

linux IO重定向

IO中的文件描述符0 ,stdin, 标准输入, 指向键盘 1 ,stdout, 标准输出, 指向终端屏幕 2 ,stderr, 标准错误输出, 指向终端屏幕 /dev/null 无底洞&#xff0c;有些不想要的输出信息可以送到这里。& , 在重定向中引用文件描述符.例子.2>&1 , 把 stderr&#xff08;文…...

抖音内容下载终极指南:5分钟搞定批量下载与去水印

抖音内容下载终极指南&#xff1a;5分钟搞定批量下载与去水印 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. …...

30岁之后IT人士(程序员)的职业规划是什么呢?

前段也看到ibm的寇卫东的一篇文章关于职业规划的&#xff0c;现在看看&#xff0c;这些职业规划都是理想状态下的产物&#xff0c;很多时候&#xff0c;限于我们自身水平、时间、空间的影响&#xff0c;很多是看着很美&#xff0c;其实却远远的达不到&#xff0c;不能仅仅说让人…...

3步告别资源焦虑:跨平台下载神器res-downloader深度解析

3步告别资源焦虑&#xff1a;跨平台下载神器res-downloader深度解析 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是否曾…...

从RTL代码到SDC约束:手把手教你为PLL/DCM生成的时钟写对时序约束

从RTL代码到SDC约束&#xff1a;手把手教你为PLL/DCM生成的时钟写对时序约束 在数字芯片设计流程中&#xff0c;时钟约束的正确性直接影响着时序收敛的效率和质量。很多工程师能够熟练编写RTL代码&#xff0c;却在转换为SDC约束时遇到困惑——特别是当设计中使用PLL、DCM或自定…...

抖音视频批量下载完整解决方案:从单视频到全自动归档管理

抖音视频批量下载完整解决方案&#xff1a;从单视频到全自动归档管理 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…...

如何高效处理PDF文档:Windows平台的终极解决方案

如何高效处理PDF文档&#xff1a;Windows平台的终极解决方案 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 还在为Windows上的PDF处理工具而烦恼吗…...

LLM-DSE框架:大语言模型优化硬件加速器设计

1. LLM-DSE框架概述&#xff1a;当大语言模型遇上硬件加速器设计在硬件加速器设计领域&#xff0c;高层次综合&#xff08;HLS&#xff09;技术通过将抽象层级从寄存器传输级&#xff08;RTL&#xff09;提升到C/C&#xff0c;显著降低了开发门槛。然而&#xff0c;HLS指令参数…...

手写前馈神经网络:从矩阵乘法到梯度下降的硬核实践

1. 这不是“AI科普”&#xff0c;而是一次亲手拆解前馈神经网络的硬核实践你有没有在某个深夜刷到“三分钟看懂神经网络”的短视频&#xff0c;点进去后发现全是齿轮转动、水流奔涌、大脑发光的动画&#xff0c;配上一句“信息像快递一样层层传递”&#xff1f;我试过——看完更…...

VideoDownloadHelper:打破视频下载壁垒的智能解析引擎

VideoDownloadHelper&#xff1a;打破视频下载壁垒的智能解析引擎 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾遇到这样的情况&am…...

西门子S7-1200 PLC编程避坑指南:从振荡电路到浮点数计算,新手最易犯的5个错误

西门子S7-1200 PLC编程实战避坑手册&#xff1a;从逻辑陷阱到数据精度的深度解析 在工业自动化领域&#xff0c;PLC编程就像是在钢丝上跳舞——一步错可能导致整个产线瘫痪。作为西门子S7-1200的资深用户&#xff0c;我见过太多初学者在相同的地方跌倒。这篇文章不会给你教科书…...

深度解析ESLyric-LyricsSource:Foobar2000逐字歌词插件的终极技术方案

深度解析ESLyric-LyricsSource&#xff1a;Foobar2000逐字歌词插件的终极技术方案 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource ESLyric-LyricsSource是…...

告别弃用参数:Kubelet连接containerd的正确姿势(附config.toml避坑指南)

告别弃用参数&#xff1a;Kubelet连接containerd的正确姿势&#xff08;附config.toml避坑指南&#xff09; 在Kubernetes集群的日常运维中&#xff0c;kubelet与容器运行时的连接配置是一个看似简单却暗藏玄机的环节。许多管理员习惯性地沿用旧版本参数&#xff0c;殊不知Kube…...

Windows应用层Hook原理与合规实践指南

我不能按照您的要求生成关于“逆向微信4.0撤回机制&#xff1a;从符号恢复到DLL劫持实战”的博文内容。原因如下&#xff1a;违反平台安全与合规底线&#xff1a;该标题明确指向对微信客户端的逆向分析、符号恢复及DLL劫持等行为。微信作为受法律保护的商用即时通讯软件&#x…...

Arm开发中DSTREAM调试探针无法识别的排查指南

1. DSTREAM调试探针在Arm开发环境中不可选的排查指南当使用Arm Development Studio&#xff08;Arm DS&#xff09;进行嵌入式开发时&#xff0c;DSTREAM系列调试探针&#xff08;包括DSTREAM-ST、DSTREAM-PT、DSTREAM-HT和DSTREAM-XT&#xff09;偶尔会出现无法在开发环境中被…...