harmony 鸿蒙NNRt

2023-06-24 浏览 (1328)

NNRt

概述

NNRt(Neural Network Runtime,神经网络运行时)是面向AI领域的跨芯片推理计算运行时,作为中间桥梁连通上层AI推理框架和底层加速芯片,实现AI模型的跨芯片推理计算。提供统一AI芯片驱动接口,实现AI芯片驱动接入OpenHarmony。

Since:

3.2

Version:

2.0

汇总

文件

名称描述
INnrtDevice.idl该文件定义芯片设备相关的接口。
IPreparedModel.idl该文件定义了AI模型推理、获取模型输入tensor维度范围、导出编译后模型等接口。
ModelTypes.idl该文件定义AI模型相关的结构体。
NnrtTypes.idl该文件定义了HDI接口中用到的类型。
NodeAttrTypes.idl该文件定义AI模型算子的参数和功能。

名称描述
INnrtDeviceinterface
定义了与设备相关的接口,实现设备管理和模型编译等操作。
IPreparedModelinterface
定义模型编译后的对象,包含编译后模型导出、模型推理接口。
Tensorstruct
张量结构体。
Nodestruct
算子节点结构体。
SubGraphstruct
子图结构体。
Modelstruct
模型结构体。
SharedBufferstruct
共享内存数据的结构体。
ModelConfigstruct
定义编译模型需要的参数配置。
QuantParamstruct
量化参数结构体。
IOTensorstruct
AI模型的输入输出张量。
Activationstruct
激活类型的算子,所有的激活函数都属于该算子,具体的激活函数类型一句参数来确定。
AddFusionstruct
输入Tensor逐元素相加, 输出x和y的和,数据形状与输入broadcast之后一样,数据类型与较高精度的输入精度一致。
ArgMaxFusionstruct
返回跨轴的tensor前K个索引或者是数值。
AvgPoolFusionstruct
在输入tensor上应用 2D 平均池化。支持int8量化输入。
BatchToSpaceNDstruct
将一个4维tensor的batch维度按block_shape切分成小块,并将这些小块拼接到空间维度。
BiasAddstruct
对给出的输入张量上的各个维度方向上的数据进行偏置。
Caststruct
根据输出张量的类型对张量数据类型进行转换。
Concatstruct
在指定轴上连接张量,将输入张量按给定的轴连接起来。
Conv2DFusionstruct
对将4维的tensor执行带有偏置的二维卷积运算。
Conv2dTransposeFusionstruct
对一个4维的tensor执行带有偏置的二维反卷积。
DivFusionstruct
将两个tensor执行除法运算。
Eltwisestruct
元素级别操作的算子。
ExpandDimsstruct
在给定轴上为tensor添加一个额外的维度。
Fillstruct
根据指定的维度,创建由一个标量填充的tensor。
FullConnectionstruct
对输入数据做全连接。
FusedBatchNormstruct
对一个tensor进行批标准化的运算。
Gatherstruct
根据指定的索引和轴返回输入tensor的切片。
LayerNormFusionstruct
对一个tensor从某一axis开始做层归一化。
LessEqualstruct
对输入x1和x2,计算每对元素的x1<=x2的结果。
MatMulFusionstruct
对输入x1和x2,计算x1和x2的内积。
Maximumstruct
对输入x1和x2,计算x1和x2对应元素最大值,x1和x2的输入遵守隐式类型转换规则,使数据类型一致。
MaxPoolFusionstruct
对输入x,计算 2D 最大值池化。
MulFusionstruct
对输入x1和x2,将x1和x2相同的位置的元素相乘得到output。
OneHotstruct
根据indices指定的位置,生成一个由one-hot向量构成的tensor。
PadFusionstruct
在x指定维度的数据前后,添加指定数值进行增广。
PowFusionstruct
求x的y次幂,输入必须是两个tensor或一个tensor和一个标量。
PReLUFusionstruct
计算x和weight的PReLU激活值。
QuantDTypeCaststruct
数据类型转换。
ReduceFusionstruct
减小x张量的维度。
Reshapestruct
根据inputShape调整input的形状。
Resizestruct
按给定的参数对输入的张量进行变形。
Rsqrtstruct
求x的平方根的倒数。
ScaleFusionstruct
给定一个tensor,计算其缩放后的值。
Shapestruct
输出输入tensor的形状。
SliceFusionstruct
在x各维度,在axes维度中,以begin为起点,截取size长度的切片。
Softmaxstruct
给定一个tensor,计算其softmax结果。
SpaceToBatchNDstruct
将4维张量在空间维度上进行切分成多个小块,然后在batch维度上拼接这些小块。
Splitstruct
算子沿 axis 维度将x拆分成多个张量,张量数量由outputNum指定。
Sqrtstruct
给定一个tensor,计算其平方根。
SquaredDifferencestruct
计算两个输入的差值并返回差值的平方。SquaredDifference算子支持tensor和tensor相减。
Squeezestruct
去除axis中,长度为1的维度。支持int8量化输入。
Stackstruct
将一组tensor沿axis维度进行堆叠,堆叠前每个tensor的维数为n,则堆叠后output维数为n+1。
StridedSlicestruct
根据步长和索引对输入张量进行切片提取。
SubFusionstruct
计算两个输入的差值。
TileFusionstruct
以multiples指定的次数拷贝输入张量。
TopKFusionstruct
查找沿axis轴的前K个最大值和对应索引。
Transposestruct
根据perm对x进行数据重排。
Unsqueezestruct
根据输入axis的值。增加一个维度。

枚举

名称描述
DeviceType : int { OTHER , CPU , GPU , ACCELERATOR }AI计算芯片的类型。
DeviceStatus : int { AVAILABLE , BUSY , OFFLINE , UNKNOWN }用于AI计算芯片的状态。
PerformanceMode : int {PERFORMANCE_NONE , PERFORMANCE_LOW , PERFORMANCE_MEDIUM , PERFORMANCE_HIGH ,PERFORMANCE_EXTREME
}
芯片执行AI计算的性能模式。
Priority : int { PRIORITY_NONE , PRIORITY_LOW , PRIORITY_MEDIUM , PRIORITY_HIGH }AI计算任务的优先级。
Format : byte { FORMAT_NONE = -1 , FORMAT_NCHW = 0 , FORMAT_NHWC = 1 }算子数据排布。需要配合Tensor使用。
DataType : byte {
DATA_TYPE_UNKNOWN = 0 , DATA_TYPE_BOOL = 30 , DATA_TYPE_INT8 = 32 , DATA_TYPE_INT16 = 33 , DATA_TYPE_INT32 = 34 , DATA_TYPE_INT64 = 35 , DATA_TYPE_UINT8 = 37 , DATA_TYPE_UINT16 = 38 , DATA_TYPE_UINT32 = 39 , DATA_TYPE_UINT64 = 40 , DATA_TYPE_FLOAT16 = 42 , DATA_TYPE_FLOAT32 = 43 ,DATA_TYPE_FLOAT64 = 44}
张量的数据类型。需要配合Tensor使用。
QuantType : byte { QUANT_TYPE_NONE , QUANT_TYPE_ALL }量化类型。需要配合Node使用。
NodeType : unsigned int {
NODE_TYPE_NONE = 0 , NODE_TYPE_ACTIVATION = 2 , NODE_TYPE_ADD_FUSION = 5 , NODE_TYPE_ARGMAX_FUSION = 11 ,
NODE_TYPE_AVGPOOL_FUSION = 17 , NODE_TYPE_BATCH_TO_SPACE_ND = 22 , NODE_TYPE_BIAS_ADD = 23 , NODE_TYPE_CAST = 28 ,
NODE_TYPE_CONCAT = 31 , NODE_TYPE_CONV2D_FUSION = 35 , NODE_TYPE_CONV2D_TRANSPOSE_FUSION = 36 , NODE_TYPE_DIV_FUSION = 47 , NODE_TYPE_ELTWISE = 52 , NODE_TYPE_EXPAND_DIMS = 56 , NODE_TYPE_FILL = 66 , NODE_TYPE_FULL_CONNECTION = 67 ,
NODE_TYPE_FUSED_BATCH_NORM = 68 , NODE_TYPE_GATHER = 69 , NODE_TYPE_LAYER_NORM_FUSION = 75 , NODE_TYPE_LESS_EQUAL = 78 ,
NODE_TYPE_MATMUL_FUSION = 89 , NODE_TYPE_MAXIMUM = 90 , NODE_TYPE_MAX_POOL_FUSION = 92 , NODE_TYPE_MUL_FUSION = 99 ,
NODE_TYPE_ONE_HOT = 105 , NODE_TYPE_PAD_FUSION = 107 , NODE_TYPE_POW_FUSION = 110 , NODE_TYPE_PRELU_FUSION = 112 ,
NODE_TYPE_QUANT_DTYPE_CAST = 113 , NODE_TYPE_REDUCE_FUSION = 118 , NODE_TYPE_RESHAPE = 119 , NODE_TYPE_RESIZE = 120 ,
NODE_TYPE_RSQRT = 126 , NODE_TYPE_SCALE_FUSION = 127 , NODE_TYPE_SHAPE = 130 , NODE_TYPE_SLICE_FUSION = 135 ,
NODE_TYPE_SOFTMAX = 138 , NODE_TYPE_SPACE_TO_BATCH_ND = 141 , NODE_TYPE_SPLIT = 145 , NODE_TYPE_SQRT = 146 ,
NODE_TYPE_SQUEEZE = 147 , NODE_TYPE_SQUARED_DIFFERENCE = 149 , NODE_TYPE_STACK = 150 , NODE_TYPE_STRIDED_SLICE = 151 ,
NODE_TYPE_SUB_FUSION = 152 , NODE_TYPE_TILE_FUSION = 160 , NODE_TYPE_TOPK_FUSION = 161 , NODE_TYPE_TRANSPOSE = 162 ,
NODE_TYPE_UNSQUEEZE = 165
}
算子类型。
ResizeMethod : byte { RESIZE_METHOD_UNKNOWN = -1 , RESIZE_METHOD_LINEAR = 0 , RESIZE_METHOD_NEAREST = 1 , RESIZE_METHOD_CUBIC = 2 }调整尺寸的方法。需要配合Resize算子使用。
CoordinateTransformMode : byte { COORDINATE_TRANSFORM_MODE_ASYMMETRIC = 0 , COORDINATE_TRANSFORM_MODE_ALIGN_CORNERS = 1 , COORDINATE_TRANSFORM_MODE_HALF_PIXEL = 2 }坐标变换模式,仅Resize算子使用这些枚举。
NearestMode : byte {
NEAREST_MODE_NORMAL = 0 , NEAREST_MODE_ROUND_HALF_DOWN = 1 , NEAREST_MODE_ROUND_HALF_UP = 2 , NEAREST_MODE_FLOOR = 3 ,
NEAREST_MODE_CEIL = 4
}
临近算法类型。需要配合Resize算子使用。
ActivationType : byte {
ACTIVATION_TYPE_NO_ACTIVATION = 0 , ACTIVATION_TYPE_RELU = 1 , ACTIVATION_TYPE_SIGMOID = 2 , ACTIVATION_TYPE_RELU6 = 3 ,
ACTIVATION_TYPE_ELU = 4 , ACTIVATION_TYPE_LEAKY_RELU = 5 , ACTIVATION_TYPE_ABS = 6 , ACTIVATION_TYPE_RELU1 = 7 ,
ACTIVATION_TYPE_SOFTSIGN = 8 , ACTIVATION_TYPE_SOFTPLUS = 9 , ACTIVATION_TYPE_TANH = 10 , ACTIVATION_TYPE_SELU = 11 ,
ACTIVATION_TYPE_HSWISH = 12 , ACTIVATION_TYPE_HSIGMOID = 13 , ACTIVATION_TYPE_THRESHOLDRELU = 14 , ACTIVATION_TYPE_LINEAR = 15 , ACTIVATION_TYPE_HARD_TANH = 16 , ACTIVATION_TYPE_SIGN = 17 , ACTIVATION_TYPE_SWISH = 18 , ACTIVATION_TYPE_GELU = 19 ,
ACTIVATION_TYPE_UNKNOWN = 20}
激活函数类型。
ReduceMode : byte {
REDUCE_MODE_MEAN = 0 , REDUCE_MODE_MAX = 1 , REDUCE_MODE_MIN = 2 , REDUCE_MODE_PROD = 3 , REDUCE_MODE_SUM = 4 , REDUCE_MODE_SUM_SQUARE = 5 , REDUCE_MODE_ASUM = 6 , REDUCE_MODE_ALL = 7}
用于维度移除的方法,需要配合ReduceFusion算子使用。
EltwiseMode : byte { ELTWISE_MODE_PROD = 0 , ELTWISE_MODE_SUM = 1 , ELTWISE_MODE_MAXIMUM = 2 , ELTWISE_MODE_UNKNOWN = 3 }元素级别运算支持的计算类型,需要配合Eltwise算子使用。
PadMode : byte { PAD_MODE_PAD = 0 , PAD_MODE_SAME = 1 , PAD_MODE_VALID = 2 }填充类型,需要配合AvgPoolFusionAvgPoolFusionConv2DFusionMaxPoolFusion使用。
RoundMode : byte { ROUND_MODE_FLOOR = 0 , ROUND_MODE_CEIL = 1 }小数取整算法,需要配合AvgPoolFusion算子使用。
PaddingMode : byte { PADDING_MODE_CONSTANT = 0 , PADDING_MODE_REFLECT = 1 , PADDING_MODE_SYMMETRIC = 2 , PADDING_MODE_RESERVED = 3 }填充类型,需要配合PadFusion算子使用。
NNRT_ReturnCode : int {
NNRT_SUCCESS = 0 , NNRT_FAILED = 1 , NNRT_NULL_PTR = 2 , NNRT_INVALID_PARAMETER = 3 ,
NNRT_MEMORY_ERROR = 4 , NNRT_OUT_OF_MEMORY = 5 , NNRT_OPERATION_FORBIDDEN = 6 , NNRT_INVALID_FILE = 7 ,
NNRT_INVALID_PATH = 8 , NNRT_INSUFFICIENT_BUFFER = 9 , NNRT_NO_CHANGE = 10 , NNRT_NOT_SUPPORT = 11 ,
NNRT_SERVICE_ERROR = 12 , NNRT_DEVICE_ERROR = 13 , NNRT_DEVICE_BUSY = 14 , NNRT_CANCELLED = 15 ,
NNRT_PERMISSION_DENIED = 16 , NNRT_TIME_OUT = 17 , NNRT_INVALID_TENSOR = 18 , NNRT_INVALID_NODE = 19 ,
NNRT_INVALID_INPUT = 20 , NNRT_INVALID_OUTPUT = 21 , NNRT_INVALID_DATATYPE = 22 , NNRT_INVALID_FORMAT = 23 ,
NNRT_INVALID_TENSOR_NAME = 24 , NNRT_INVALID_SHAPE = 25 , NNRT_OUT_OF_DIMENTION_RANGES = 26 , NNRT_INVALID_BUFFER = 27 ,
NNRT_INVALID_BUFFER_SIZE = 28 , NNRT_INVALID_PERFORMANCE_MODE = 29 , NNRT_INVALID_PRIORITY = 30 , NNRT_INVALID_MODEL = 31 ,
NNRT_INVALID_MODEL_CACHE = 32 , NNRT_UNSUPPORTED_OP = 33
}
NNRt定义的专用错误码,为HDI接口的返回值。

关键字

名称描述
package ohos.hdi.nnrt.v2_0NNRt模块的包路径。

枚举类型说明

ActivationType

enum ActivationType : byte

描述:

激活函数类型。

激活函数使得神经网络模型具有区分非线性函数的能力,这也让神经网络模型可以被应用于众多非线性模型中。NodeAttrTypes.idl文件中拥有ActivationType类型的参数的算子会在运行完成算子的运算之后执行相对应的激活函数。

枚举值描述
ACTIVATION_TYPE_NO_ACTIVATION无激活函数。
ACTIVATION_TYPE_RELUReLU激活函数。逐元素求$ max(x_i, 0) $,负数输出值会被修改为0,正数输出不受影响。
$ \text{ReLU}(x_i) = (x_i)^+ = \max(x_i, 0),$
其中$ x_i $是输入元素。
ACTIVATION_TYPE_SIGMOIDSigmoid激活函数。按元素计算Sigmoid激活函数。Sigmoid函数定义为:
$ \text{Sigmoid}(x_i) = \frac{1}{1 + \exp(-x_i)} $
其中$ x_i $是输入的元素。
ACTIVATION_TYPE_RELU6ReLU6激活函数。ReLU6类似于ReLU,不同之处在于设置了上限,其上限为6,如果输入大于6,输出会被限制为6。ReLU6函数定义为:
$ \text{ReLU6}(x_i) = \min(\max(0, x_i), 6) $
其中$ x_i $是输入的元素。
ACTIVATION_TYPE_ELU指数线性单元激活函数(Exponential Linear Unit activation function,ELU)激活函数。对输入的每个元素计算ELU。ELU函数定义为:
$ ELU(x_{i}) = \begin{cases} x_i, &\text{if } x_i \geq 0; \cr \alpha * (\exp(x_i) - 1), &\text{otherwise.} \end{cases} $
其中,$ x_i $表示输入的元素,$ \alpha $表示alpha参数,该参数通过Activation进行设置。
ACTIVATION_TYPE_LEAKY_RELULeakyReLU激活函数。 LeakyReLU函数定义为:
$ \text{LeakyReLU}(x_i) = \begin{cases} x_i, &\text{if } x_i \geq 0; \cr {\alpha} * x_i, &\text{otherwise.} \end{cases}$
其中,$ x_i $表示输入的元素,$ \alpha $表示alpha参数,该参数通过Activation进行设置。
ACTIVATION_TYPE_ABS计算绝对值的激活函数。函数定义为:
$ \text{abs}(x_i) = |x_i| $
其中,$ x_i $表示输入的元素。
ACTIVATION_TYPE_RELU1ReLU1激活函数。ReLU1函数定义为:
$ \text{ReLU1}(x_i)= \min(\max(0, x_i), 1) $
其中,$ x_i $表示输入的元素。
ACTIVATION_TYPE_SOFTSIGNSoftSign激活函数。SoftSign函数定义如下:
$ \text{SoftSign}(x_i) = \frac{x_i}{1 + |x_i|} $
其中,$ x_i $表示输入的元素。
ACTIVATION_TYPE_SOFTPLUSSoftplus激活函数。Softplus为ReLU函数的平滑近似。可对一组数值使用来确保转换后输出结果均为正值。Softplus函数定义如下:
$ \text{Softplus}(x_i) = \log(1 + \exp(x_i)) $
其中,$ x_i $表示输入的元素。
ACTIVATION_TYPE_TANHTanh激活函数。Tanh函数定义如下:
$ tanh(x) = \frac{\exp(x_i) - \exp(-x_i)}{\exp(x_i) + \exp(-x_i)} = \frac{\exp(2x_i) - 1}{\exp(2x_i) + 1} $
其中,$ x_i $表示输入的元素。
ACTIVATION_TYPE_SELUSELU(Scaled exponential Linear Unit)激活函数。SELU函数定义如下:
$ SELU(x_{i}) = scale * \begin{cases} x_{i}, &\text{if } x_{i} \geq 0; \cr \text{alpha} * (\exp(x_i) - 1), &\text{otherwise.} \end{cases} $
其中,$ x_i $是输入元素,$ \alpha $和$ scale $是预定义的常量( $\alpha=1.67326324$,$scale=1.05070098$)。
ACTIVATION_TYPE_HSWISHHard Swish激活函数。
$ \text{Hardswish}(x_{i}) = x_{i} * \frac{ReLU6(x_{i} + 3)}{6} $
其中,$ x_i $表示输入的元素。
ACTIVATION_TYPE_HSIGMOIDHard Sigmoid激活函数。 Hard Sigmoid函数定义如下:
$ \text{Hardsigmoid}(x_{i}) = max(0, min(1, \frac{x_{i} + 3}{6})) $
其中,$ x_i $表示输入的元素。
ACTIVATION_TYPE_THRESHOLDRELUThresholdedReLU激活函数。类似ReLU激活函数,min数定义如下:
$ \text{ThresholdedReLU}(x_i) = \min(\max(0, x_i), t) $
其中,$ x_i $是输入元素,$ t $是最大值。
ACTIVATION_TYPE_LINEARLinear激活函数。Linear函数定义如下:
$ \text{Linear}(x_i) = x_i $
其中,$ x_i $表示输入的元素。
ACTIVATION_TYPE_HARD_TANHHardTanh激活函数。HardTanh函数定义如下:
$ \text{HardTanh}(x_i) = \begin{cases} \text{max_val} & \text{ if } x_i > \text{ max_val } \ \text{min_val} & \text{ if } x_i < \text{ min_val } \ x_i & \text{ otherwise } \ \end{cases} $
其中,$ x_i $是输入,$ max_val $是最大值,$ min_val $是最小值,这两个参数通过Activation进行设置。
ACTIVATION_TYPE_SIGNSign激活函数。Sign函数定义如下:
$ Sign(x_i) = \begin{cases} -1, &if&nbsp;x_i < 0 \cr 0, &if&nbsp;x_i = 0 \cr 1, &if&nbsp;x_i > 0\end{cases} $
其中,$ x_i $表示输入的元素。
ACTIVATION_TYPE_SWISHSwish激活函数。Swish激活函数定义如下:
$ \text{Swish}(x_i) = x_i * Sigmoid(x_i) $
其中,$ x_i $表示输入的元素。
ACTIVATION_TYPE_GELUGELU(Gaussian error linear unit activation function)高斯误差线性单元激活函数。GELU函数定义如下:
$ GELU(x_i) = x_i*P(X < x_i) $
其中,$ x_i $是输入元素,$ P $是标准高斯分布的累积分布函数。需要通过Activation的approximate参数指定是否使用近似。
ACTIVATION_TYPE_UNKNOWN未知

CoordinateTransformMode

enum CoordinateTransformMode : byte

描述:

坐标变换模式,仅Resize算子使用这些枚举。

以变换 Width 为例, 记 new_i 为resize之后的Tenosr沿X轴的第i个坐标;记 old_i 为输入Tensor沿X的轴的对应坐标;记 newWidth 是resize之后的Tensor沿着X的轴的长度;记 oldWidth 是输入Tenosr沿X的轴的长度。 可以通过下面的公式计算出 old_i :

  • COORDINATE_TRANSFORM_MODE_ASYMMETRIC: $ old_i = newWidth != 0 ? new_i * oldWidth / newWidth : 0 $

  • COORDINATE_TRANSFORM_MODE_ALIGN_CORNERS: $ old_i = newWidth != 1 ? new_i * (oldWidth - 1) / (newWidth - 1) $

  • COORDINATE_TRANSFORM_MODE_HALF_PIXEL: $ old_i = newWidth > 1 ? (new_x + 0.5) * oldWidth / newWidth - 0.5 : 0 $

枚举值描述
COORDINATE_TRANSFORM_MODE_ASYMMETRIC不进行对齐,直接按照比例缩放
COORDINATE_TRANSFORM_MODE_ALIGN_CORNERS对齐图像的4个角
COORDINATE_TRANSFORM_MODE_HALF_PIXEL对齐像素点中心

DataType

enum DataType : byte

描述:

张量的数据类型。需要配合Tensor使用。

枚举值描述
DATA_TYPE_UNKNOWN数据类型未知
DATA_TYPE_BOOL数据类型是BOOL
DATA_TYPE_INT8数据类型是INT8
DATA_TYPE_INT16数据类型是INT16
DATA_TYPE_INT32数据类型是INT32
DATA_TYPE_INT64数据类型是INT64
DATA_TYPE_UINT8数据类型是UINT8
DATA_TYPE_UINT16数据类型是UINT16
DATA_TYPE_UINT32数据类型是UINT32
DATA_TYPE_UINT64数据类型是UINT64
DATA_TYPE_FLOAT16数据类型是FLOAT16
DATA_TYPE_FLOAT32数据类型是FLOAT32
DATA_TYPE_FLOAT64数据类型是FLOAT64

DeviceStatus

enum DeviceStatus : int

描述:

用于AI计算芯片的状态。

枚举值描述
AVAILABLE芯片当前处于可用状态
BUSY芯片当前处于忙碌状态,可能无法及时响应计算任务
OFFLINE芯片当前处于下线状态,无法响应计算任务
UNKNOWN芯片当前处于未知状态

DeviceType

enum DeviceType : int

描述:

AI计算芯片的类型。

枚举值描述
OTHER不属于以下类型的芯片
CPUCPU芯片
GPUGPU芯片
ACCELERATORAI专用加速芯片,比如NPU、DSP

EltwiseMode

enum EltwiseMode : byte

描述:

元素级别运算支持的计算类型,需要配合Eltwise算子使用。

枚举值描述
ELTWISE_MODE_PROD两个tensor对应元素乘积。
ELTWISE_MODE_SUM两个tensor对应元素之差。
ELTWISE_MODE_MAXIMUM两个tensor对应元素的最大值。
ELTWISE_MODE_UNKNOWN未知。

Format

enum Format : byte

描述:

算子数据排布。需要配合Tensor使用。

枚举值描述
FORMAT_NONE用于数据排列,作为Format初始的值。
FORMAT_NCHW数据排列为NCHW。
FORMAT_NHWC数据排列为NHWC。

NearestMode

enum NearestMode : byte

描述:

临近算法类型。需要配合Resize算子使用。

枚举值描述
NEAREST_MODE_NORMAL四舍五入取整
NEAREST_MODE_ROUND_HALF_DOWN向负无穷取整,例如23.5取整为23,−23.5取整为−24
NEAREST_MODE_ROUND_HALF_UP向正无穷取整,例如23.5取整为24,−23.5取整为−23
NEAREST_MODE_FLOOR向下取临近的整数,例如23.5取整为23,−23.5取整为−24
NEAREST_MODE_CEIL向上取临近的整数整,例如23.5取整为24,−23.5取整为−23

NNRT_ReturnCode

enum NNRT_ReturnCode : int

描述:

NNRt定义的专用错误码,为HDI接口的返回值。

枚举值描述
NNRT_SUCCESS成功
NNRT_FAILED失败
NNRT_NULL_PTR空指针
NNRT_INVALID_PARAMETER非法参数
NNRT_MEMORY_ERROR内存错误
NNRT_OUT_OF_MEMORY内存不足
NNRT_OPERATION_FORBIDDEN禁止的操作
NNRT_INVALID_FILE非法文件
NNRT_INVALID_PATH非法路径
NNRT_INSUFFICIENT_BUFFER缓存不足
NNRT_NO_CHANGE无变化
NNRT_NOT_SUPPORT不支持
NNRT_SERVICE_ERROR服务错误
NNRT_DEVICE_ERROR设备错误
NNRT_DEVICE_BUSY设备忙碌
NNRT_CANCELLED操作取消
NNRT_PERMISSION_DENIED拒绝访问
NNRT_TIME_OUT超时
NNRT_INVALID_TENSOR非法tensor
NNRT_INVALID_NODE非法节点
NNRT_INVALID_INPUT非法输入
NNRT_INVALID_OUTPUT非法输出
NNRT_INVALID_DATATYPE非法数据类型
NNRT_INVALID_FORMAT非法数据布局
NNRT_INVALID_TENSOR_NAME非法tensor名称
NNRT_INVALID_SHAPE非法shape
NNRT_OUT_OF_DIMENTION_RANGES超出维度范围
NNRT_INVALID_BUFFER非法缓存
NNRT_INVALID_BUFFER_SIZE非法缓存大小
NNRT_INVALID_PERFORMANCE_MODE非法性能模式
NNRT_INVALID_PRIORITY非法优先级
NNRT_INVALID_MODEL非法模型
NNRT_INVALID_MODEL_CACHE非法模型缓存
NNRT_UNSUPPORTED_OP算子不支持

NodeType

enum NodeType : unsigned int

描述:

算子类型。

枚举值描述
NODE_TYPE_NONE算子类型为NONE
NODE_TYPE_ACTIVATION激活函数类型
NODE_TYPE_ADD_FUSIONADD算子
NODE_TYPE_ARGMAX_FUSIONArgMax算子
NODE_TYPE_AVGPOOL_FUSIONAVGPOOL算子
NODE_TYPE_BATCH_TO_SPACE_NDBatchToSpaceND算子
NODE_TYPE_BIAS_ADDBiasAdd算子
NODE_TYPE_CASTCast算子
NODE_TYPE_CONCATConcat算子
NODE_TYPE_CONV2D_FUSIONConv2D算子,包含了普通卷积、可分离卷积和分组卷积
NODE_TYPE_CONV2D_TRANSPOSE_FUSION二维反卷积算子
NODE_TYPE_DIV_FUSIONDiv算子
NODE_TYPE_ELTWISE元素级别算子
NODE_TYPE_EXPAND_DIMSExpandDims张算子
NODE_TYPE_FILLFill算子
NODE_TYPE_FULL_CONNECTIONFullConnection算子
NODE_TYPE_FUSED_BATCH_NORMBatchNorm算子
NODE_TYPE_GATHERGather算子
NODE_TYPE_LAYER_NORM_FUSIONLayerNorm算子
NODE_TYPE_LESS_EQUALLessEqual算子
NODE_TYPE_MATMUL_FUSIONMatMul算子
NODE_TYPE_MAXIMUMMaximum算子
NODE_TYPE_MAX_POOL_FUSIONMaxPool算子
NODE_TYPE_MUL_FUSIONMul算子
NODE_TYPE_ONE_HOTOneHot算子
NODE_TYPE_PAD_FUSIONPad算子
NODE_TYPE_POW_FUSIONPow算子
NODE_TYPE_PRELU_FUSIONPReLU算子
NODE_TYPE_QUANT_DTYPE_CASTQuantDTypeCast算子
NODE_TYPE_REDUCE_FUSIONReduce算子
NODE_TYPE_RESHAPEReshape算子
NODE_TYPE_RESIZEResize算子
NODE_TYPE_RSQRTRsqrt算子
NODE_TYPE_SCALE_FUSIONScale算子
NODE_TYPE_SHAPEShape算子
NODE_TYPE_SLICE_FUSIONSlice算子
NODE_TYPE_SOFTMAXSoftmax算子
NODE_TYPE_SPACE_TO_BATCH_NDSpaceToBatchND算子
NODE_TYPE_SPLITSplit算子
NODE_TYPE_SQRTSqrt算子
NODE_TYPE_SQUEEZESquaredDifference算子
NODE_TYPE_SQUARED_DIFFERENCESqueeze算子
NODE_TYPE_STACKStack算子
NODE_TYPE_STRIDED_SLICEStridedSlice算子
NODE_TYPE_SUB_FUSIONSub算子
NODE_TYPE_TILE_FUSIONTile算子
NODE_TYPE_TOPK_FUSIONTopK算子
NODE_TYPE_TRANSPOSETranspose算子
NODE_TYPE_UNSQUEEZEUnsqueeze算子

PaddingMode

enum PaddingMode : byte

描述:

填充类型,需要配合PadFusion算子使用。

当输入的张量x= $[[1,2,3],[4,5,6],[7,8,9]]$、paddings= $[[2,2],[2,2]]$时效果如下:

  • paddingMode==PADDING_MODE_CONSTANT并且constantValue = 0时输出为: $[[0. 0. 0. 0. 0. 0. 0.],\ [0. 0. 0. 0. 0. 0. 0.],\ [0. 0. 1. 2. 3. 0. 0.],\ [0. 0. 4. 5. 6. 0. 0.],\ [0. 0. 7. 8. 9. 0. 0.],\ [0. 0. 0. 0. 0. 0. 0.],\ [0. 0. 0. 0. 0. 0. 0.]]\ $

  • paddingMode==PADDING_MODE_REFLECT输出为: $[[9. 8. 7. 8. 9. 8. 7.],\ [6. 5. 4. 5. 6. 5. 4.],\ [3. 2. 1. 2. 3. 2. 1.],\ [6. 5. 4. 5. 6. 5. 4.],\ [9. 8. 7. 8. 9. 8. 7.],\ [6. 5. 4. 5. 6. 5. 4.],\ [3. 2. 1. 2. 3. 2. 1.]]\ $

  • paddingMode==PADDING_MODE_SYMMETRIC输出为: $[[5. 4. 4. 5. 6. 6. 5.],\ [2. 1. 1. 2. 3. 3. 2.],\ [2. 1. 1. 2. 3. 3. 2.],\ [5. 4. 4. 5. 6. 6. 5.],\ [8. 7. 7. 8. 9. 9. 8.],\ [8. 7. 7. 8. 9. 9. 8.],\ [5. 4. 4. 5. 6. 6. 5.]]\ $

枚举值描述
PADDING_MODE_CONSTANT使用常量填充,默认值为0。
PADDING_MODE_REFLECT以数据区的便捷为轴,使填充区和数据区的数据以该轴保持对称。
PADDING_MODE_SYMMETRIC此填充方法类似于 PADDING_MODE_REFLECT,它以待填充区和数据区的交界为轴,使待填充区和数据区的数据以该轴保持对称。
PADDING_MODE_RESERVED预留,暂未使用。

PadMode

enum PadMode : byte

描述:

填充类型,需要配合AvgPoolFusionAvgPoolFusionConv2DFusionMaxPoolFusion使用。

枚举值描述
PAD_MODE_PAD在输入的高度和宽度方向上填充0。 若设置该模式,算子的padding参数必须大于等于0。
PAD_MODE_SAME输出的高度和宽度分别与输入整除 stride 后的值相同。 若设置该模式,算子的padding参数必须为0。
PAD_MODE_VALID在不填充的前提下返回有效计算所得的输出。不满足计算的多余像素会被丢弃。 若设置此模式,则算子的padding参数必须为0。

PerformanceMode

enum PerformanceMode : int

描述:

芯片执行AI计算的性能模式。

枚举值描述
PERFORMANCE_NONE不指定任何性能模式,具体运行模式由芯片定义
PERFORMANCE_LOW低性能模式,执行AI计算速度慢,功耗低
PERFORMANCE_MEDIUM中性能模式,执行AI计算速度较慢,功耗较低
PERFORMANCE_HIGH高性能模式,执行AI计算速度较快,功耗较高
PERFORMANCE_EXTREME最高性能模式,执行AI计算速度快,功耗高

Priority

enum Priority : int

描述:

AI计算任务的优先级。

枚举值描述
PRIORITY_NONE不指定任何任务优先级,具体执行策略由芯片定义
PRIORITY_LOW低优先级,若有更高优先级的任务,芯片会执行更高优先级的任务
PRIORITY_MEDIUM中等优先级,若有更高优先级的任务,芯片会执行更高优先级的任务
PRIORITY_HIGH高优先级,高优先级任务最先执行

QuantType

enum QuantType : byte

描述:

量化类型。需要配合Node使用。

枚举值描述
QUANT_TYPE_NONE不使用量化
QUANT_TYPE_ALLint8全量化

ReduceMode

enum ReduceMode : byte

描述:

用于维度移除的方法,需要配合ReduceFusion算子使用。

枚举值描述
REDUCE_MODE_MEAN使用指定维度所有元素的平均值代替该维度的其他元素,以移除该维度。
REDUCE_MODE_MAX使用指定维度所有元素的最大值代替该维度的其他元素,以移除该维度。
REDUCE_MODE_MIN使用指定维度所有元素的最小值代替该维度的其他元素,以移除该维度。
REDUCE_MODE_PROD使用指定维度所有元素的乘积代替该维度的其他元素,以移除该维度。
REDUCE_MODE_SUM使用指定维度所有元素的加和代替该维度的其他元素,以移除该维度。
REDUCE_MODE_SUM_SQUARE使用指定维度所有元素的平方和替该维度的其他元素,以移除该维度。
REDUCE_MODE_ASUM使用指定维度所有元素的绝对值和代替该维度的其他元素,以移除该维度。
REDUCE_MODE_ALL使用指定维度所有元素的逻辑与代替该维度的其他元素,以移除该维度。

ResizeMethod

enum ResizeMethod : byte

描述:

调整尺寸的方法。需要配合Resize算子使用。

枚举值描述
RESIZE_METHOD_UNKNOWN未知,默认值。
RESIZE_METHOD_LINEAR双线性插值。 假设需要计算未知函数f在点$ (x,y) $的值其中$ x_1 < x < x_2, y_1 < y < y_2$,并且已知四个坐标点的值$ Q_{11} = (x_1, y_1), Q_{12} = (x1, y2), Q_{21} = (x_2, y_1),Q_{22} = (x_2, y_2) $,并且$ f(Q_{11}),f(Q_{12}),f(Q_{21}),f(Q_{22}) $表示四个点的数值,则通过如下公式可计算$ f(x,y) $的值:
$ f(x,y_1) = \frac{x_2-x}{x_2-x_1}f(Q_{11})+\frac{x-x_1}{x_2-x_1}f(Q_{21}) $
$ f(x,y_2) = \frac{x_2-x}{x_2-x_1}f(Q_{12})+\frac{x-x_1}{x_2-x_1}f(Q_{22}) $
$ f(x,y) = \frac{y_2-y}{y_2-y_1}f(x,y_1)+\frac{y-y_1}{y_2-y_1}f(x,y_2) $
RESIZE_METHOD_NEAREST最近临近插值。假设需要计算未知函数f在点$ (x,y) $的值其中$ x_1 < x <x_2, y_1 < y < y_2 $,并且已知四个坐标点的值$ Q_{11} = (x_1, y_1), Q_{12} = (x1, y2), Q_{21} = (x_2, y_1),Q_{22} = (x_2, y_2) $,则从4个点中选择距离点$ (x,y) $最近的点的数值作为$ f(x,y) $的值。
RESIZE_METHOD_CUBIC双三次插值。 双三次插值是取采样点周围16个点的值的加权平均来计算采样点的数值。该参数需要配合Resize的cubicCoeff和coordinateTransformMode参数使用。 当coordinateTransformMode==COORDINATE_TRANSFORM_MODE_HALF_PIXEL时,cubicCoeff=-0.5,其他情况cubicCoeff=-0.75。插值函数的权重函数如下:
$ W(x) = \begin{cases} (cubicCoeff+2)|x|^3 - (cubicCoeff+3)|x|^2 +1 , &\text{if } |x| \leq 1; \cr cubicCoeff|x|^3 - 5cubicCoeff|x|^2 + 8cubicCoeff|x| - 4a, &\text{if } 1 \lt |x| \leq 2; \cr 0, &\text{otherwise.} \end{cases} $

RoundMode

enum RoundMode : byte

描述:

小数取整算法,需要配合AvgPoolFusion算子使用。

枚举值描述
ROUND_MODE_FLOOR向下取临近的整数,例如23.5取整为23,−23.5取整为−24
ROUND_MODE_CEIL向上取临近的整数整,例如23.5取整为24,−23.5取整为−23

你可能感兴趣的鸿蒙文章

harmony 鸿蒙HDI 参数参考

harmony 鸿蒙ActRecognitionEvent

harmony 鸿蒙Activation

harmony 鸿蒙ActivityRecognitionTypes.idl

harmony 鸿蒙AddFusion

harmony 鸿蒙Alignment

harmony 鸿蒙AllocInfo

harmony 鸿蒙ApduSimIORequestInfo

harmony 鸿蒙ArgMaxFusion

harmony 鸿蒙Audio

  • 所属分类: 后端技术
  • 本文标签: 软件 鸿蒙
  • 版权声明: 本文链接 https://seaxiang.com/blog/662a4dcdc12447d183255f58aa333c24