简介

概述

CANN(Compute Architecture for Neural Networks)算子库提供了一系列丰富且深度优化、硬件亲和的高性能算子,为网络在AI处理器上的加速计算奠定了基础。

算子库在CANN架构中的位置如图1所示,主要由如下子库组成:

  • 本算子库提供的算子均为系统内置算子,如需自定义算子,请参考《Ascend C算子开发指南》完成算子开发。
  • 本算子库中部分算子源码已在Gitcode CANN开源项目开放,请单击Link了解“算子库”组件项目。
图1 算子库架构图

为方便开发者调用上述算子,提供了一套基于C的API(如aclnn API)执行算子,无需额外提供IR(Intermediate Representation)定义。该调用方式被称为“单算子API执行”,调用流程如图2所示,更详细的流程介绍请参见“单算子调用流程”。

图2 算子API调用流程

本文不仅提供算子规格说明、算子接口说明,还详细介绍了不同AI深度学习框架(如TensorFlow、Caffe等)下IR(Intermediate Representation)定义的算子规格信息,支持开发者自行构建所需的网络模型。

使用说明

使用向导

首次阅读本文时,建议先熟悉表1,它将帮助您快速了解算子库的使用场景、算子分类及算子接口等信息。

头文件/库文件说明:如需调用算子API,请include依赖的文件,一般头文件默认在“${INSTALL_DIR}/include/”目录,库文件默认在“${INSTALL_DIR}/lib64/”目录,${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。以root用户安装为例,安装后文件默认存储路径为:/usr/local/Ascend/cann。

表1 使用向导

使用场景

操作指引

说明

依赖的头文件或库文件

1. 算子库使用前要了解哪些基础知识

基本概念

算子库相关的基本概念、术语、关键技术等介绍,辅助用户更好理解算子介绍文档。

-

2. 算子库API调用时依赖哪些公共接口

公共接口

调用算子接口时依赖的公共Meta接口,如创建aclTensor、aclScalar、aclIntArray等。

  • 头文件:aclnn/acl_meta.h、aclnn/aclnn_base.h(仅包含aclnnInit和aclnnFinalize)
  • 库文件:libnnopbase.so

3. 算子接口有哪些分类(aclnn)

Math类接口

数学计算类算子库,提供Add、Abs等算子。接口前缀为aclnnXxx。

  • 头文件:引用每类总头文件后无需引用单API的头文件。
    • 每类API依赖的总头文件(推荐):aclnnop/aclnn_ops_math.h、aclnnop/aclnn_ops_nn.h、aclnnop/aclnn_ops_cv.h、aclnnop/aclnn_ops_transformer.h
    • 每个API依赖的头文件:aclnnop/aclnn_*.h(*表示具体算子名)
  • 动态库:引用总库文件后无需引用单类API的库文件,两种库文件不支持同时引用。
    • aclnn API依赖的总库文件:libopapi.so
    • 每类API依赖的库文件(推荐):libopapi_math.so、libopapi_nn.so、libopapi_cv.so、libopapi_transformer.so
说明:
  • 从CANN 8.5.0版本开始,libaclnn_ops_infer、libaclnn_ops_train、libaclnn_math、libaclnn_rand静态库(*.a)和动态库(*.so)废弃,请不要再使用。请使用最新libopapi前缀的动态库文件。
  • 从CANN 8.5.0版本开始,推荐引用每类API对应的子库so文件以提升算子编译效率。不推荐使用整库libopapi.so。
  • 从CANN 7.0.0版本开始,算子头文件路径不推荐使用aclnnop/level2/aclnn_*.h,请使用新头文件路径aclnnop/aclnn_*.h。

NN类接口

Neural Network,即神经网络类算子库,提供Matmul等算子。接口前缀为aclnnXxx。

目前该类算子API在整个算子库中占最大比重。

CV类接口

Computer Vision,即计算机视觉类算子库,提供GridSample等算子。接口前缀为aclnnXxx。

Transformer类接口

大模型计算类算子库,提供FlashAttention、MC2(通算融合)、MoE(Mixture of Experts)等算子。接口前缀为aclnnXxx。

4. 媒体数据处理有哪些接口(acldvpp)

媒体数据处理接口(acldvpp)

Digital Vision Pre-Processing算子,提供高性能视频/图片编解码、图像裁剪缩放等预处理API。接口前缀acldvppXxx。

  • 头文件:acldvppop/acldvpp_base.h和acldvppop/acldvpp_op_api.h
  • 库文件:libacl_dvpp_op.so

5. 算子库中基于Ascend IR定义的算子信息

Ascend IR算子规格说明

罗列了基于Ascend IR定义的算子信息。

-

6. AI框架原生IR定义的算子信息

AI框架算子支持清单

罗列了主流AI框架原生IR定义的算子信息(如TensorFlow、Caffe等)。

-

7. 算子库的相关接口

附录

提供开发内置算子aclnn API依赖的框架接口等,具体参见aclnn开发接口列表。

-