上个月有人在社区问:"昇腾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

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐