CANN-ops-transformer仓库全景-昇腾NPU大模型算子该去哪找
上个月有人在社区问:"昇腾NPU上跑 Llama,FlashAttention 在哪个仓库?"底下回复五花八门,有人说在 CANN 安装包里,有人说在 samples 里。都不对。FlashAttention、MoE 融合、MC2 通算融合,全在 ops-transformer 这一个仓库里。CANN 的 55 个 AtomGit 开源仓库分工很细,搞混了就是浪费时间。这篇把 ops-transformer 的定位和能力摊开讲清楚。
ops-transformer 是什么
ops-transformer 是 CANN 算子库中专门服务 Transformer 架构大模型的进阶算子仓库。它不是基础算子——矩阵乘法在 ops-blas,普通激活函数在 ops-nn——ops-transformer 只放那些"大模型专属"的复合算子。
在 CANN 五层架构里,它位于第二层昇腾计算服务层的 AOL 算子库中,是算子库的最高层。下游直接被 ATB(ascend-transformer-boost)和 cann-recipes 推理/训练配方调用,上游依赖 opbase(算子基础组件)和 ops-nn/ops-math 的基础算子。
核心算子清单
| 算子 | 解决什么问题 | 一句话原理 |
|---|---|---|
| FlashAttention | 长序列 Attention 显存爆+慢 | 分块计算,砍掉 O(N²) 中间矩阵 |
| FlashAttention V2 | FlashAttention 的进一步优化 | 更细粒度的分块+反向传播融合 |
| MoE 融合 | MoE 模型通信吃掉稀疏加速 | Gate+计算+通信三层融合 |
| MC2 通算融合 | All-to-All 通信阻塞计算 | 通信计算流水线重叠 |
| MergedMatMul | 多路 Linear 合并 | 共享输入的多个 MatMul 融合成一个 |
| RotaryEmbedding | 位置编码算力浪费 | RoPE 计算融入 Attention kernel |
这几个算子覆盖了大模型推理和训练中最耗时的环节。不是每个场景都需要全部用上,但 Llama/Qwen/DeepSeek 这类主流模型,FlashAttention + MoE 融合 + MC2 基本是标配。
和其他仓库的关系
ops-transformer 不是孤立的。它的算子最终要被 ATB 封装成高层 API,被 cann-recipes 嵌入完整的推理/训练流程。
依赖链是这样的:
opbase → ops-math/ops-nn/ops-blas → ops-transformer → ATB → cann-recipes
opbase 提供基础数据结构和内存管理,ops-math 和 ops-nn 提供单个 MatMul、Softmax 这些原子算子,ops-transformer 把它们组装成 FlashAttention 这种复合算子,ATB 再把这些算子编排成完整的模型推理流程。
graph-autofusion 是另一条线——它在图编译阶段自动把 ops-transformer 的算子和前后的算子融合,不需要你手动指定。
为什么这些算子不在 ops-nn 里
因为它们不是"算子"级别的东西。ops-nn 里的 MatMul、LayerNorm 是单个数学操作,而 FlashAttention 是一组操作的特定编排方式。同样的 MatMul + Softmax,标准 Attention 和 FlashAttention 的执行顺序和内存访问模式完全不同。
把它们放到独立仓库还有个好处:ops-transformer 的迭代速度可以比 ops-nn 更快。大模型领域的新算子(Ring Attention、Mamba 的 scan 算子等)几乎每个月都有新方案,ops-transformer 可以快速跟进,不影响 ops-nn 的稳定性。
仓库结构
ops-transformer/
├── op_host/ # 算子注册、tiling 策略(Ascend C 编写)
├── op_kernel/ # 算子核心实现(Ascend C)
├── op_tiling/ # 多场景 tiling 参数
├── tests/ # 单算子测试
└── examples/ # PyTorch/ATB 调用示例
op_tiling 目录是性能调优的关键。昇腾NPU的 Cube 和 Vector 单元对数据分块大小有特定要求,tiling 参数决定了算子在硬件上的执行效率。CANN 的 AOE 调优引擎可以自动搜索最优 tiling,但大部分场景下仓库自带的默认值已经够用。
拿到仓库后先做什么
git clone https://atomgit.com/cann/ops-transformer.git
cd ops-transformer
# 先看 examples/flash_attention/ 目录
# 里面有完整的 PyTorch 调用示例和性能对比脚本
如果你想贡献算子——比如把某个 Attention 变体适配到昇腾NPU——op_host 和 op_kernel 的代码结构很清晰,照着 FlashAttention 的实现改就行。Ascend C 的语法和 CUDA C 相似度很高,有 GPU 算子开发经验的话上手不难。
如果你的团队刚开始在昇腾NPU上做大模型,ops-transformer 是第一个要熟悉的仓库。先跑通 FlashAttention 的 example,再逐步把 MoE 融合和 MC2 接入你的推理流程。仓库在这里:
https://atomgit.com/cann/ops-transformer
更多推荐




所有评论(0)