☰
132个NPU算子接口速查:ops-multimodal-fusion API清单与torch.ops调用详解
2026/9/26 0:58:52 网站建设 项目流程

132个NPU算子接口速查:ops-multimodal-fusion API清单与torch.ops调用详解

【免费下载链接】ops-multimodal-fusion基于 AscendC 的 PyTorch 自定义多模态算子库项目地址: https://gitcode.com/cann/ops-multimodal-fusion

ops-multimodal-fusion是基于 AscendC 的 PyTorch 自定义多模态算子库,提供132 个高性能 NPU 算子接口,全部通过torch.ops.ops_multimodal_fusion.<算子名>统一调用,编译为 Python wheel 包,pip 安装即用。本文是完整的API 清单速查与torch.ops 调用详解:10 大算子分类、三步安装上手、源码路径对照,帮你 5 分钟找到并跑通任意算子 🚀

一、为什么需要这个 NPU 算子库

在 LLM 推理加速、多模态模型部署中,框架原生算子往往覆盖不到特殊数学函数(贝塞尔、艾里函数)、稀疏/嵌套张量、量化推理等场景。ops-multimodal-fusion 正好补齐这块:

特性说明
🎯PyTorch 原生集成通过 PyTorch 扩展机制注册算子,import 后自动加载,无需额外注册
⚡Fast Kernel Launch使用<<<>>>直调方式启动 kernel,降低启动开销,适合低时延推理
🖥️多芯片覆盖支持 Atlas A2(ascend910b)、Atlas A3(ascend910_93)、950 系列(ascend950),对应 arch22 / arch35 两套架构
📦wheel 交付编译产物为 wheel 包,pip install即可,不侵入现有训练/推理代码

当前已验证配套的 CANN 版本为CANN 9.0.0(master 分支),需安装 Toolkit 包 + Ops 包。

二、一眼看懂 API 清单:132 个 NPU 算子分类速查

完整接口签名(参数、返回值、数据类型)请查阅 接口文档,芯片支持矩阵请查阅 接口支持清单。这里按用途把 132 个算子归为 10 类,方便快速定位:

分类数量代表算子典型场景
逐元素数学与激活33absaddmulexpsingelusigmoidswi_glu基础数学、激活函数
特殊函数29bessel_j0airy_aidigammazetachebyshev_polynomial_t科学计算、信号处理
统计与归约13summeanmaxnormkthvaluepdistlogcumsumexp聚合统计、归约
池化 / 卷积 / 上采样10avg_pool2dadaptive_avg_pool2ddepthwise_conv3dupsample_linear1dCV 特征提取
随机分布采样9multinomialpoissondirichletexponentialgamma随机采样、仿真
索引访问9index_copyindex_reduceputtaketril_indicesc2_boolean_mask数据重排、稀疏索引
损失与评估8c2_accuracymulti_margin_losscdist_backwardc2_lars训练损失、评估指标
嵌套与稀疏7nested_bmmnested_add_padsparse_binary_intersectsparse_mask_projection变长嵌套张量、稀疏交集
归一化与 RNN 单元5layer_normrms_norm_gatedweight_normgru_celllstm_cellLLM / 序列模型
量化与矩阵8dynamic_quantdequant_swiglu_quantsemi_structured_linearaddmvmatrix_exp_util低精度推理、矩阵运算

💡 命名规律:算子名即目录名。看到算子名dequant_swiglu_quant,源码就在applications/llm/dequant_swiglu_quant/,测试在tests/dequant_swiglu_quant/,一一对应,非常好找。

三、三步上手:编译、安装、调用 NPU 算子

第 1 步:准备环境并获取源码

先安装 CANN 9.0.0 的Toolkit 包和对应型号的Ops 包(Ops 包需与 Toolkit 同目录),然后配置环境变量:

source ${install_path}/cann/set_env.sh

再克隆算子仓库:

git clone https://gitcode.com/cann/ops-multimodal-fusion

第 2 步:一条命令编译 wheel

bash build.sh --soc=${soc_version}

--soc参数按实际硬件取值(默认ascend950):

  • Atlas A2 训练/推理系列 →ascend910b
  • Atlas A3 训练/推理系列 →ascend910_93
  • 950 系列 →ascend950

脚本会依次执行:安装构建依赖 → 清理旧构建 → 编译 wheel。结束时打印 wheel 绝对路径,产物形如:

dist/ops_multimodal_fusion-1.0.0+ascend950-cp310-cp310-linux_*.whl

第 3 步:安装并调用算子

⚠️ 注意:请勿在源码目录内执行pip install,否则可能导致卸载异常。建议拷贝到/tmp等目录再安装。

cd /tmp && pip install /path/to/dist/ops_multimodal_fusion-*.whl --force-reinstall --no-deps

以abs算子为例,完整调用只有 5 行:

import torch import torch_npu import ops_multimodal_fusion # 所有算子在 import 时自动加载 x = torch.randn(32, 64, dtype=torch.float32).npu() result = torch.ops.ops_multimodal_fusion.abs(x) print(result.shape) # torch.Size([32, 64]) print(result.dtype) # torch.float32 print(result.device) # npu:输出仍在 NPU 上

torch.ops 调用规则详解

理解了 3 条规则,132 个算子都会调:

  1. 统一命名空间:torch.ops.ops_multimodal_fusion.<算子名>,算子名与目录名完全一致,例如torch.ops.ops_multimodal_fusion.gelu(x)、torch.ops.ops_multimodal_fusion.layer_norm(x, gamma, beta);
  2. 输入先行上卡:张量先.npu()再传入,算子在 NPU 上执行,输出自动保留在 NPU;
  3. 多输出直接解包:如layer_norm输出单张量,而lstm_cell返回(hy, cy)元组、dequant_swiglu_quant返回双张量,按需解包即可。

每个算子的精确签名(默认参数、数据类型支持)都在 接口文档 中按「接口签名 / 功能 / 参数 / 返回值 / 支持的数据类型 / 支持的芯片 / 调用示例」七段式给出,可直接复制示例运行。

四、如何定位任意算子:源码与测试路径对照表

仓库结构对新手非常友好,一个算子一个目录,四类文件固定位置:

要找什么相对路径示例
Kernel 实现applications/llm/<算子名>/arch35/<算子名>.ascapplications/llm/gelu/arch35/gelu.asc
构建配置applications/llm/<算子名>/arch35/CMakeLists.txtapplications/llm/gelu/arch35/CMakeLists.txt
单元测试tests/<算子名>/test_<算子名>.pytests/gelu/test_gelu.py
API 文档docs/zh/api_list.md全部 132 个算子

常见算子的源码与测试对照:

算子算子实现测试文件
absapplications/llm/abs/arch22/abs.asc、applications/llm/abs/arch35/abs.asctests/abs/test_abs.py
layer_normapplications/llm/layer_norm/arch35/layer_norm.asctests/layer_norm/test_layer_norm.py
dynamic_quantapplications/llm/dynamic_quant/arch35/dynamic_quant.asctests/dynamic_quant/test_dynamic_quant.py
nested_bmmapplications/llm/nested_bmm/arch35/nested_bmm.asctests/nested_bmm/test_nested_bmm.py
dequant_swiglu_quantapplications/llm/dequant_swiglu_quant/arch35/dequant_swiglu_quant.asctests/dequant_swiglu_quant/test_dequant_swiglu_quant.py

Python 包入口位于 包初始化文件,内部会为每个算子加载对应的动态库libops_multimodal_fusion_<算子名>.so,因此「import 即全部就绪」。

五、芯片支持与数据类型:调用前的两个检查点

✅检查芯片:并非所有算子都支持所有芯片。例如abs在 arch22(Atlas A2/A3)和 arch35(950 系列)都有实现;而adaptive_avg_pool2d、layer_norm、swi_glu等多数算子目前仅支持950 系列(arch35)。逐个算子的支持状态见 接口支持清单(表格按ascend910b / ascend910_93 / ascend950三列标注)。

✅检查数据类型:主流支持torch.float32、torch.float16;部分算子有差异:

  • bitwisenot仅支持INT32/INT16;
  • any额外支持INT32/BOOL;
  • avg_pool2d、bessel_j0等目前仅FP32。

调用前对照文档中的数据表格确认 dtype,是避免报错的最快方式。

六、验证与调优:测试、调试、性能采集

功能验证、问题定位、性能分析三步都有一套标准做法:

1. 跑通官方测试:每个算子都有现成用例,以abs为例:

pytest tests/abs/ -v

预期看到test_abs_interface PASSED等结果即部署成功;回归全部算子则执行pytest tests/ -v。

2. 打印调试:在测试中对输入输出加print(shape / dtype / 前 10 个元素),快速定位精度异常,调试方法详见 算子调试调优。

3. 性能采集:功能正确后用msprof采集算子性能:

msprof --output=./prof_out pytest tests/abs/test_abs.py

命令结束会自动解析并导出性能数据文件。

七、常见问题 FAQ ❓

Q1:调用时提示找不到torch.ops.ops_multimodal_fusion?确认代码中已import ops_multimodal_fusion(算子在该包 import 时自动注册),且安装的是与当前 SoC 匹配的 wheel。

Q2:wheel 命名里的+ascend950是什么?这是编译时的 SoC 版本标识,wheel 只适配对应芯片,跨芯片请使用(或重新编译)对应--soc产出的包。

Q3:abs 为什么有 arch22 和 arch35 两套实现?arch22 面向 Atlas A2/A3,arch35 面向 950 系列。多数新算子仅实现 arch35,这是芯片支持差异的来源,详见 接口支持清单。

Q4:想在源码目录里直接 pip install 吗?不要。README 明确提示:请勿在源码目录内执行 pip install,否则会引发卸载异常。

Q5:想自己加一个算子?参考 算子开发指南 和 目录结构说明,按「一个算子一个目录」的规范在applications/llm/下新增即可,仓库自带完整的开发工作流与模板。

写在最后

ops-multimodal-fusion 把 132 个 NPU 算子整理成了「目录即清单、import 即可用」的规范形态:用API 清单定位算子 → 用torch.ops 命名空间调用 → 用pytest 样例验证 → 用msprof调优。按本文的路径对照表,任何一个算子的源码、测试、文档都能在 10 秒内找到,建议收藏备用 ⭐

【免费下载链接】ops-multimodal-fusion基于 AscendC 的 PyTorch 自定义多模态算子库项目地址: https://gitcode.com/cann/ops-multimodal-fusion

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询