前言
本文介绍了TBE的基本知识、概念以及两种开发场景
TBE基础知识
TBE(Tensor Boost Engine)自定义算子开发工具:
- 一款华为自研的NPU算子开发工具
- 在TVM(Tensor Virtual Machine)框架基础上扩展
- 提供了一套Python API来实施开发活动
TBE基本概念
NPU
NPU(Neural-network Processing Unit),神经网络处理器。
在维基百科中,NPU这个词条被直接指向了“人工智能加速器”,释义是这样的:
“人工智能加速器(英语:AI accelerator)是一类专用于人工智能(特别是人工神经网络、机器视觉、机器学习等)硬件加速的微处理器或计算系统。典型的应用包括机器人学、物联网等数据密集型应用或传感器驱动的任务。”
本文中,NPU可以特指为昇腾910处理器。
算子
- 算子基本概念
算子是一个函数空间到函数空间上的映射O:X→X;广义的讲,对任何函数进行某一项操作都可以认为是一个算子。于我们而言,我们所开发的算子是网络模型中涉及到的计算函数。在Caffe中,算子对应层中的计算逻辑,例如:卷积层(Convolution Layer)中的卷积算法,是一个算子;全连接层(Fully-connected Layer, FC layer)中的权值求和过程,是一个算子。 - 算子举例:
在网络模型中被用作激活函数的算子:tanh ReLU Sigmoid等
- 算子类型(Type):
算子的type,代表算子的类型,例如卷积算子的类型为Convolution,在一个网络中同一类型的算子可能存在多个。 - 算子名称(Name):
算子的名称,用于标识网络中的某个算子,同一网络中算子的名称需要保持唯一。如下图所示conv1,pool1,conv2都是此网络中的算子名称,其中conv1与conv2算子的类型为Convolution,表示分别做一次卷积运算。
- 张量(Tensor):
Tensor是TBE算子中的数据,包括输入数据与输出数据,TensorDesc(Tensor描述符)是对输入数据与输出数据的描述,TensorDesc数据结构包含如下属性:
- 形状(Shape):
张量的形状,以(D0, D1, … ,Dn-1)的形式表示,D0到Dn是任意的正整数。
如形状(3,4)表示第一维有3个元素,第二维有4个元素,(3,4)表示一个3行4列的矩阵数组。
在形状的中括号中有多少个数字,就代表这个张量是多少维的张量。形状的第一个元素要看张量最外层的中括号中有几个元素,形状的第二个元素要看张量中从左边开始数第二个中括号中有几个元素,依此类推。例如:
- 张量形状的物理含义:
假设我们有这样一个shape=(4, 20, 20, 3)。
假设有一些照片,每个像素点都由红/绿/蓝3色组成,即shape里面3的含义,照片的宽和高都是20,也就是20*20=400个像素,总共有4张的照片,这就是shape=(4, 20, 20, 3)的物理含义。
- 形状(Shape):