赞
踩
1.知道什么场景下需要进行自定义算子开发
2.了解CANN提供的几种算子类型及如何选择开发方式
3.了解CANN算子的编译运行流程以及算子交付件的作用
4.了解算子的基本概念
1.具有Python以及C++语言程序开发能力
2.了解CANN的基本架构
算子定义:深度学习算法由一个个计算单元组成,我们称这些计算单元为算子(Operator,简称OP)。在网络模型中,算子对应层或节点的计算逻辑。图中每个结点均为一个算子:
加速库/计算库:针对某种计算逻辑开发一个通用实现
NN(NeuralNetwork)算子库:覆盖了包括TensorFlow、Pytorch、Mindspore、ONNX框架在内的常用深度学习算法的计算类型,在算子库中占有最大比重。
BLAS(Basic LinearAlgebra Subprograms)算子库基础线性代数程序集,是进行向量和矩阵等基本线性代数作的数库。
DVPP(DigitalVideoPre-Processor)算子库:提供高性能的视频编解码、图片编解码、图像裁剪缩放等预处理力。
AIPP(AIPre-Processing)算子库:主要实现改变图像尺寸、色域转换(转换图格式)、减均值/乘系数(图像归一化),并与模型理过程融合,以满足推理输入要求。HCCL (Huawvei Collective Communication Library)算子库:提供单机多卡以及多机多卡间的Broadcast,allreduce,reducescatter,allgather等集合通信功能在分布式训练中提供高效的数据传输能力。
一般场景下,开发者无需自己开发算子,但若遇到以下场景,开发者需要考虑进行自定义算子的开发。训练场景下,将第三方框架(例如TensorFlow、PyTorch等)的网络训练脚本迁移到异腾平台时遇到了不支持的算子。
推理场景场景下,将第三方框架模型(例如TensorFlow、Caffe、ONNX等)使用ATC工具转换为适配异腾平台的离线模型时遇到了不支持的算子。
网络调优时,发现某算子性能较低,想重新开发一个高性能算子替换性能较低的算子。
推理场景下,若应用程序中的某些逻辑涉及到数学运算(例如查找最大值,进行数据类型转换等)开发者可以将这些操作通过自定义算子的方式进行实现,然后在应用程序中对算子进行调用,从而利用昇腾AI处理器进行加速.
例如,针对一个分类应用,我们想从分类模型的推理结果中查找可能性最大的+前5个标识,则可以实现一个查找最大值的算子(例如ArgMax),后续就可以直接通过AscendcL接口调用此算子实现对推理结果的后处理。
1第三方架网络模型首需要过解析,转为中间的IR(lntermediateRepresentation)Graph。这一步需要算子适配插件实现第三方框架算子到CANN算子的映射
2 然后调用每一个算子的IR(算子原型),进行基本参数校验、静态内存的推导等。算子的原型定义了每个算子在异腾AI处理器上的运行约束,包括输入输出属性的各种特征。
3 图编译器会进行一些图的拆分优化动作,并会根据算子信息库进行算子的匹配选择,优先基于TBE算子信息库判断算子支持度,若TBE不支持,再基于AICPU算子信息库判断是否支持
4 匹配到算子后,图编译器会对我们开发的算子实现代码进行编译,生成算子的Task信息
5. 图编译完成后,最终生成可执行的om模型
算子是一个函数空间到函数空间上的映射:X→X;广义的讲,对任何函数进行某一项操作都可以认为是一个算子。于我们而言,我们所开发的算子是网络模型中涉及到的计算函数。在Caffe中,算子对应层中的计算逻辑,例如:卷积层(ConvolutionLayer)中的卷积算法,是一个算子;全连接层(Fully-connected Layer,Fclayer)中的权值求和过程,是一个算子。
算子的type,代表算子的类型,例如卷积算子的类型为Convolution,在一个网络中同一类型的算子可能存在多个。
算子的名称,用于标识网络中的某个算子,同一网络中算子的名称需要保持唯一。如下图所示conv1,pool1conv2都是此网络中的算子名称,其中conv1与conv2算子的类型为Convolution,表示分别做一次卷积运算。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。