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

CANN-ops-nn和ops-transformer-昇腾NPU两个算子仓库怎么分工

CANN-ops-nn和ops-transformer-昇腾NPU两个算子仓库怎么分工

刚接触 CANN 的人最常问:ops-nn 和 ops-transformer 到底谁管什么?我在 PyTorch 里写F.linear,底层走的是 ops-nn 还是 ops-transformer?答案是:走 ops-nn,除非 ATB 或 graph-autofusion 把你的调用链改造成了融合路径。

分工逻辑

ops-nn:通用神经网络算子。不管你跑什么模型——CNN、RNN、Transformer、扩散模型——都用 ops-nn 的基础算子。覆盖广,单个算子性能优化到位,但不会替你做跨算子的融合编排。

ops-transformer:Transformer 专属融合算子。只管 Transformer 架构里的热点计算模式。覆盖窄,但每个算子都是高度定制的融合实现。

用一句话概括:ops-nn 是工具箱,ops-transformer 是定制家具。工具箱里的锤子螺丝刀通用但需要你自己组合;定制家具直接放到指定位置就能用,但只适合特定的房间格局。

上游依赖关系

ops-transformer 的融合算子内部调用了 ops-nn 的基础算子。以 FlashAttention 为例:

FlashAttention kernel 内部: → Cube 单元:MatMul(调用 ops-blas 的 GEMM 指令) → Vector 单元:Softmax(调用 ops-math 的 Softmax 实现) → Cube 单元:MatMul(再次调用 GEMM) → Vector 单元:RoPE(调用 ops-nn 的 RotaryEmbedding 基础实现)

ops-transformer 不是从零造轮子。它把 ops-nn/ops-math/ops-blas 的基础算子按照 FlashAttention 的计算模式编排成一个 kernel,但底层的基本计算单元还是复用的。

依赖链:

opbase → ops-blas/ops-math/ops-nn → ops-transformer → ATB ↑ 基础组件 ↑ 原子算子 ↑ 融合编排 ↑ 高层API

实际调用的分界线

当你在昇腾NPU上跑 PyTorch 模型,torch_npu 的算子分发逻辑:

  1. 检查 ops-transformer 是否有对应的融合算子
  2. 如果有,检查输入是否满足融合条件(维度对齐、dtype 匹配等)
  3. 满足 → 走 ops-transformer;不满足 → fallback 到 ops-nn
  4. 如果 ops-transformer 没有对应算子 → 走 ops-nn

这个分发过程对用户透明。你写F.scaled_dot_product_attention(q, k, v),torch_npu 自动选择 FlashAttention(ops-transformer)或标准 Attention(ops-nn)。

什么时候只靠 ops-nn 就够

  • 你的模型不是标准 Transformer 架构
  • 你在做模型调试,需要逐步检查中间结果
  • 你的输入形状不满足融合算子的对齐要求
  • 你在训练小模型(融合的 kernel launch 节省对小 batch 不明显)

什么时候必须用 ops-transformer

  • 大模型推理(Llama 7B 以上),Attention 和 FFN 是绝对瓶颈
  • 长序列场景(序列长度 > 2K),FlashAttention 的 O(N) 显存优势不可替代
  • MoE 模型,MergedMatMul 和 MC2 是刚需
  • 分布式训练,MC2 的通算融合是唯一能让通信不占 40% 时间的方法

一个容易搞混的例子

torch.nn.functional.linear在昇腾NPU上调的是 ops-nn 的 MatMul + Bias。但如果你在 ATB 里加载一个 Llama 模型,ATB 会把连续的 Q Linear + K Linear + V Linear 替换成 ops-transformer 的 MergedMatMul + RotaryEmbedding 融合算子。

同一个F.linear调用,走 ATB 路径和走 PyTorch eager 路径,底层跑的是不同的算子实现。性能差异可能达到 2-3 倍。

这就是为什么 ATB 的推理服务比纯 PyTorch 快得多——不是 ATB 有什么魔法,是它把 ops-nn 的基础算子替换成了 ops-transformer 的融合算子。


理解了 ops-nn 和 ops-transformer 的分工,遇到性能问题就知道该查哪一层。基础算子慢→查 ops-nn 的 tiling 和融合接口;融合不够→看 ops-transformer 有没有覆盖你的计算模式。两个仓库:

https://atomgit.com/cann/ops-nn

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

相关文章:

  • 从GitHub到海浪模拟:手把手教你配置WAVEWATCHⅢ 6.07.0的完整开发与测试环境
  • AUTODYN新手避坑指南:用cm-g-us单位制搞定炸药冲击仿真(附完整模型文件)
  • Proteus仿真STC89C52:除了点亮LED,你的电路图真的画对了吗?(附原理分析)
  • 别再硬编码了!ABAP Text Elements 三分钟搞定报表字段中文显示(附图标添加技巧)
  • 别再只用Modbus了!手把手教你用S7-200的PPI协议实现两台PLC数据互传
  • ARM SVE架构LD1H指令详解与性能优化
  • SpringBoot 2.6.2 + MyBatis-Plus 3.5.2 集成人大金仓Kingbase 8.6.0保姆级教程(含本地JAR安装避坑)
  • Jetson Orin Nano 新手避坑:从零部署YoloV5,我踩过的那些环境配置的‘雷’
  • Mac/Win双平台保姆级教程:从零配置ADB环境到连接真机/模拟器
  • 仓库盘点、物流交接?用UniApp+PDA扫码提升效率的实战配置与避坑指南
  • 2026年热门的装配流水线/浙江注塑机流水线/浙江转弯机流水线/浙江流水线公司对比推荐 - 行业平台推荐
  • 别再只会用@Injectable了!NestJS Providers的四种高级玩法(含useFactory异步实战)
  • 虹德豆制品2026年4月口碑解读,用户满意度高吗?虹德豆制品,虹德豆制品口碑好不好 - 品牌推荐师
  • 实战指南:如何将SPIN的超像素思想,迁移到你的图像修复项目里(附思路)
  • 告别‘偏科’模型:用CAST双流架构搞定视频动作识别,兼顾时空理解
  • 保姆级教程:在CentOS 7上用Docker搞定Zabbix 5.0 + MySQL 8.0,监控H3C交换机不掉坑
  • 告别轮询!用STM32 RTC内部唤醒实现超低功耗数据采集(附STM32L476+CubeIDE工程)
  • 保姆级教程:用YOLO-for-K210在Maix Dock上训练一个‘干脆面君’检测模型
  • 深入拆解:IGT-DSER网关如何把AB PLC的标签(TAG)映射成Modbus地址?一个案例讲透
  • StarRocks单机伪集群部署实战:一台服务器玩转FE、BE、Broker全节点
  • 告别单调地图!用QGIS的Graduated渲染,5分钟让你的降雨量数据‘开口说话’
  • 2026年4月3M防火封堵厂商推荐,3M防火封堵,应对火灾快速响应 - 品牌推荐师
  • 如何永久免费解锁Cursor Pro全部功能:终极解决方案完全指南
  • APK Installer:在Windows上轻松安装Android应用的完整指南
  • 用ESP32和EC11编码器做个无极调光台灯,Arduino代码全解析(附防抖电路)
  • SpringBoot 2.7项目里,用Knife4j 4.3.0给API文档换个‘高级脸’(OpenAPI3实战)
  • STM32F103C8T6的Flash只有64K/128K?KEIL里芯片选型与启动文件配置避坑指南
  • Halcon深度学习工具DLT V22.06保姆级安装教程(附大恒图像官网下载与中文设置)
  • 101、运动控制中的状态观测器:龙伯格观测器
  • 用Matlab给变形镜建模:从高斯函数到贝塞尔曲线,两种响应函数仿真全流程