算子开发

什么是算子?

深度学习算法由一个个计算单元组成,可以称这些计算单元为算子(Operator,简称OP)。

在网络模型中,算子对应层中的计算逻辑,例如:卷积层(Convolution Layer)是一个算子;全连接层(Fully-connected Layer, FC layer)中的权值求和过程,是一个算子。

在数学领域,一个函数空间到函数空间上的映射O:X→Y,都称为算子;再例如:tanh、ReLU等,为在网络模型中被用做激活函数的算子。

广义的讲,对任何函数进行某一项操作都可以认为是一个算子,比如微分算子,不定积分算子等。

什么是Ascend C算子?

Ascend C算子是一种高性能计算加速器芯片Ascend的计算操作符。它是一种基于硬件的计算加速器,可以在Ascend芯片上实现高效的计算加速,提高计算效率和性能。

Ascend C算子库包含了多种常用的算子,如卷积、池化、全连接、归一化等,同时还支持自定义算子的开发。它采用了高度优化的算法和数据结构,可以充分利用Ascend芯片的硬件资源,实现高效的计算加速。

Ascend C算子库还提供了丰富的API接口和开发工具,方便开发者进行算子的调用和开发。

如何基于CANN进行算子开发?

CANN支持用户使用多种方式来开发自定义算子,包括TBE DSL、TBE TIK、AICPU三种开发方式。

如何获取自定义算子安装包?

算子开发过程完成后,可以编译自定义算子工程,生成自定义算子安装包*.run(编译生成算子包的操作系统版本与架构需要与执行算子包部署操作的操作系统版本与架构相同)。

  1. 进入算子工程目录修改build.sh脚本,配置算子编译所需环境变量。
  2. 执行如下命令,进行算子工程编译。

    ./build.sh

  3. 编译成功后,会在当前目录下创建build_out目录,并在build_out目录下生成自定义算子安装包custom_opp_<target os>_<target architecture>.run。

如何部署自定义算子包?

进入算子工程路径下的build_out目录,以运行用户执行如下命令,安装自定义算子包。

./custom_opp_<target os>_<target architecture>.run

命令执行成功后,自定义算子包中的相关文件部署到CANN算子库中。

如何获取算子开发样例工程?

单击GiteeGithub,进入Ascend samples开源仓,参见README中的“版本说明”下载配套版本的sample包,从“cplusplus/level1_single_api/4_op_dev/1_custom_op”目录中获取样例。

此样例包含了TBE算子、AI CPU算子以及TensorFlow Scope融合规则开发的代码样例,同时提供了算子编译规则文件。可以直接基于此样例编译出算子安装包,也可以基于此样例追加自己的自定义算子实现代码,进行算子的开发。

更多样例可在CANN软件安装后文件存储路径中的“tools/msopgen/template/custom_operator_sample”目录下获取。

CANN当前支持哪些算子类型?

CANN算子有两种类型,TBE算子与AI CPU算子。