昇腾社区首页
中文
注册
开发者
下载

简介

概述

CANN(Compute Architecture for Neural Networks)算子库提供了一系列丰富且深度优化、硬件亲和的高性能算子,包括神经网络库(Neural Network,NN)、数学库、计算机视觉库(Computer Vision,CV)和Transformer库等,为网络在AI处理器上的加速计算奠定了基础。

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

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

图1 算子API调用流程

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

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

使用说明

首次阅读本文时,建议先熟悉表1,这将帮助您快速了解算子库的使用场景、算子分类及算子接口等信息。此外,不同算子在不同产品中的支持情况不同,具体请参见表2

  • 对于各类算子接口或算子规格中未声明支持的场景(如产品型号、数据类型、数据格式、数据维度等),不推荐开发者使用,当前版本不保证算子调用效果。
  • 算子二进制包:调用aclnn API时,需安装算子二进制包(Ascend-cann-kernels),调用编译好的算子,二进制包安装介绍参见CANN软件安装指南
  • 头文件/库文件说明:如需调用API,请include依赖的文件,一般头文件默认在“${INSTALL_DIR}/include/”目录,库文件默认在“${INSTALL_DIR}/lib64/”目录,${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。若安装的Ascend-cann-toolkit软件包,以root安装举例,则安装后文件存储路径为:/usr/local/Ascend/ascend-toolkit/latest。
  • 昇腾虚拟化实例:当前融合算子不支持使用。
  • 算子故障处理:调用算子过程中可能会遇到各类异常,请参考“故障案例集 > 算子执行问题,文档列举了典型/高频的算子执行问题,辅助开发者进行问题定位和解决。
表1 使用向导

使用场景

操作指引

说明

依赖的头文件或库文件

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

基本概念

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

-

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

公共接口

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

  • 头文件:aclnn/acl_meta.h
  • 库文件:libnnopbase.so

3. 算子库API有哪些分类

NN算子接口

Neural Network类算子,接口前缀为aclnnXxx,覆盖深度学习算法相关的计算类型,例如常见的Softmax、MatMul、Convolution等。

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

除aclnnInit和aclnnFinalize外,其余接口依赖文件如下:

  • 头文件:aclnnop/aclnn_*.h
  • 动态库:libopapi.so(可被划分如下领域,按需选装
    • libaclnn_ops_infer.so(网络算子推理库)
    • libaclnn_ops_train.so(网络算子训练库)
    • libaclnn_math.so(数学算子库)
    • libaclnn_rand.so(随机数算子库)
  • 静态库:
    • libaclnn_ops_infer_static.a(网络算子推理库)
    • libaclnn_ops_train_static.a(网络算子训练库)
    • libaclnn_math_static.a(数学算子库)
    • libaclnn_rand_static.a(随机数算子库)
说明:
  • aclnnInit和aclnnFinalize依赖头文件为aclnn/aclnn_base.h、库文件为libnnopbase.so。
  • 为兼容旧版本,旧版本NN/融合算子头文件路径是aclnnop/level2/aclnn_*.h,但后续版本该路径会废弃,建议使用新路径aclnnop/aclnn_*.h,防止后续版本出现兼容性问题。

融合算子接口

融合类算子,接口前缀为aclnnXxx,由多个独立基础“小算子”(如向量Vector、矩阵Cube等)融合而成,大算子功能与多个小算子功能等价,且性能收益往往优于小算子。例如常见的Flash Attention、通算融合算子(简称MC2算子)等。

DVPP算子接口

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

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

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

Ascend IR算子规格说明

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

-

5. 主流AI框架原生IR定义的算子信息

AI框架算子支持清单

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

-

6. 算子库相关的其他接口

附录

罗列了内置算子aclnn API开发场景相关的内容,介绍参见aclnn开发接口列表

-

表2 产品支持度表

产品型号

NN算子接口

融合算子接口

DVPP算子接口

CANN算子规格说明

TensorFlow算子清单

Caffe算子清单

ONNX算子清单

Atlas A3 训练系列产品 / Atlas A3 推理系列产品

√(部分支持)

√(部分支持)

x

Atlas A2 训练系列产品 / Atlas A2 推理系列产品

√(部分支持)

x

Atlas 200I/500 A2 推理产品

√(部分支持)

x

x

Atlas 推理系列产品

√(部分支持)

√(部分支持)

x

Atlas 训练系列产品

√(部分支持)

x

x