harmony 鸿蒙NNRt

  • 2023-06-24
  • 浏览 (760)

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模型算子的参数和功能。

名称 描述
INnrtDevice interface
定义了与设备相关的接口,实现设备管理和模型编译等操作。
IPreparedModel interface
定义模型编译后的对象,包含编译后模型导出、模型推理接口。
Tensor struct
张量结构体。
Node struct
算子节点结构体。
SubGraph struct
子图结构体。
Model struct
模型结构体。
SharedBuffer struct
共享内存数据的结构体。
ModelConfig struct
定义编译模型需要的参数配置。
QuantParam struct
量化参数结构体。
IOTensor struct
AI模型的输入输出张量。
Activation struct
激活类型的算子,所有的激活函数都属于该算子,具体的激活函数类型一句参数来确定。
AddFusion struct
输入Tensor逐元素相加, 输出x和y的和,数据形状与输入broadcast之后一样,数据类型与较高精度的输入精度一致。
ArgMaxFusion struct
返回跨轴的tensor前K个索引或者是数值。
AvgPoolFusion struct
在输入tensor上应用 2D 平均池化。支持int8量化输入。
BatchToSpaceND struct
将一个4维tensor的batch维度按block_shape切分成小块,并将这些小块拼接到空间维度。
BiasAdd struct
对给出的输入张量上的各个维度方向上的数据进行偏置。
Cast struct
根据输出张量的类型对张量数据类型进行转换。
Concat struct
在指定轴上连接张量,将输入张量按给定的轴连接起来。
Conv2DFusion struct
对将4维的tensor执行带有偏置的二维卷积运算。
Conv2dTransposeFusion struct
对一个4维的tensor执行带有偏置的二维反卷积。
DivFusion struct
将两个tensor执行除法运算。
Eltwise struct
元素级别操作的算子。
ExpandDims struct
在给定轴上为tensor添加一个额外的维度。
Fill struct
根据指定的维度,创建由一个标量填充的tensor。
FullConnection struct
对输入数据做全连接。
FusedBatchNorm struct
对一个tensor进行批标准化的运算。
Gather struct
根据指定的索引和轴返回输入tensor的切片。
LayerNormFusion struct
对一个tensor从某一axis开始做层归一化。
LessEqual struct
对输入x1和x2,计算每对元素的x1<=x2的结果。
MatMulFusion struct
对输入x1和x2,计算x1和x2的内积。
Maximum struct
对输入x1和x2,计算x1和x2对应元素最大值,x1和x2的输入遵守隐式类型转换规则,使数据类型一致。
MaxPoolFusion struct
对输入x,计算 2D 最大值池化。
MulFusion struct
对输入x1和x2,将x1和x2相同的位置的元素相乘得到output。
OneHot struct
根据indices指定的位置,生成一个由one-hot向量构成的tensor。
PadFusion struct
在x指定维度的数据前后,添加指定数值进行增广。
PowFusion struct
求x的y次幂,输入必须是两个tensor或一个tensor和一个标量。
PReLUFusion struct
计算x和weight的PReLU激活值。
QuantDTypeCast struct
数据类型转换。
ReduceFusion struct
减小x张量的维度。
Reshape struct
根据inputShape调整input的形状。
Resize struct
按给定的参数对输入的张量进行变形。
Rsqrt struct
求x的平方根的倒数。
ScaleFusion struct
给定一个tensor,计算其缩放后的值。
Shape struct
输出输入tensor的形状。
SliceFusion struct
在x各维度,在axes维度中,以begin为起点,截取size长度的切片。
Softmax struct
给定一个tensor,计算其softmax结果。
SpaceToBatchND struct
将4维张量在空间维度上进行切分成多个小块,然后在batch维度上拼接这些小块。
Split struct
算子沿 axis 维度将x拆分成多个张量,张量数量由outputNum指定。
Sqrt struct
给定一个tensor,计算其平方根。
SquaredDifference struct
计算两个输入的差值并返回差值的平方。SquaredDifference算子支持tensor和tensor相减。
Squeeze struct
去除axis中,长度为1的维度。支持int8量化输入。
Stack struct
将一组tensor沿axis维度进行堆叠,堆叠前每个tensor的维数为n,则堆叠后output维数为n+1。
StridedSlice struct
根据步长和索引对输入张量进行切片提取。
SubFusion struct
计算两个输入的差值。
TileFusion struct
以multiples指定的次数拷贝输入张量。
TopKFusion struct
查找沿axis轴的前K个最大值和对应索引。
Transpose struct
根据perm对x进行数据重排。
Unsqueeze struct
根据输入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_0 NNRt模块的包路径。

枚举类型说明

ActivationType

enum ActivationType : byte

描述:

激活函数类型。

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

枚举值 描述
ACTIVATION_TYPE_NO_ACTIVATION 无激活函数。
ACTIVATION_TYPE_RELU ReLU激活函数。逐元素求$ max(x_i, 0) $,负数输出值会被修改为0,正数输出不受影响。
$ \text{ReLU}(x_i) = (x_i)^+ = \max(x_i, 0),$
其中$ x_i $是输入元素。
ACTIVATION_TYPE_SIGMOID Sigmoid激活函数。按元素计算Sigmoid激活函数。Sigmoid函数定义为:
$ \text{Sigmoid}(x_i) = \frac{1}{1 + \exp(-x_i)} $
其中$ x_i $是输入的元素。
ACTIVATION_TYPE_RELU6 ReLU6激活函数。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_RELU LeakyReLU激活函数。 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_RELU1 ReLU1激活函数。ReLU1函数定义为:
$ \text{ReLU1}(x_i)= \min(\max(0, x_i), 1) $
其中,$ x_i $表示输入的元素。
ACTIVATION_TYPE_SOFTSIGN SoftSign激活函数。SoftSign函数定义如下:
$ \text{SoftSign}(x_i) = \frac{x_i}{1 + |x_i|} $
其中,$ x_i $表示输入的元素。
ACTIVATION_TYPE_SOFTPLUS Softplus激活函数。Softplus为ReLU函数的平滑近似。可对一组数值使用来确保转换后输出结果均为正值。Softplus函数定义如下:
$ \text{Softplus}(x_i) = \log(1 + \exp(x_i)) $
其中,$ x_i $表示输入的元素。
ACTIVATION_TYPE_TANH Tanh激活函数。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_SELU SELU(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_HSWISH Hard Swish激活函数。
$ \text{Hardswish}(x{i}) = x{i} * \frac{ReLU6(x_{i} + 3)}{6} $
其中,$ x_i $表示输入的元素。
ACTIVATION_TYPE_HSIGMOID Hard Sigmoid激活函数。 Hard Sigmoid函数定义如下:
$ \text{Hardsigmoid}(x{i}) = max(0, min(1, \frac{x{i} + 3}{6})) $
其中,$ x_i $表示输入的元素。
ACTIVATION_TYPE_THRESHOLDRELU ThresholdedReLU激活函数。类似ReLU激活函数,min数定义如下:
$ \text{ThresholdedReLU}(x_i) = \min(\max(0, x_i), t) $
其中,$ x_i $是输入元素,$ t $是最大值。
ACTIVATION_TYPE_LINEAR Linear激活函数。Linear函数定义如下:
$ \text{Linear}(x_i) = x_i $
其中,$ x_i $表示输入的元素。
ACTIVATION_TYPE_HARD_TANH HardTanh激活函数。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_SIGN Sign激活函数。Sign函数定义如下:
$ Sign(x_i) = \begin{cases} -1, &if x_i < 0 \cr 0, &if x_i = 0 \cr 1, &if x_i > 0\end{cases} $
其中,$ x_i $表示输入的元素。
ACTIVATION_TYPE_SWISH Swish激活函数。Swish激活函数定义如下:
$ \text{Swish}(x_i) = x_i * Sigmoid(x_i) $
其中,$ x_i $表示输入的元素。
ACTIVATION_TYPE_GELU GELU(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 不属于以下类型的芯片
CPU CPU芯片
GPU GPU芯片
ACCELERATOR AI专用加速芯片,比如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_FUSION ADD算子
NODE_TYPE_ARGMAX_FUSION ArgMax算子
NODE_TYPE_AVGPOOL_FUSION AVGPOOL算子
NODE_TYPE_BATCH_TO_SPACE_ND BatchToSpaceND算子
NODE_TYPE_BIAS_ADD BiasAdd算子
NODE_TYPE_CAST Cast算子
NODE_TYPE_CONCAT Concat算子
NODE_TYPE_CONV2D_FUSION Conv2D算子,包含了普通卷积、可分离卷积和分组卷积
NODE_TYPE_CONV2D_TRANSPOSE_FUSION 二维反卷积算子
NODE_TYPE_DIV_FUSION Div算子
NODE_TYPE_ELTWISE 元素级别算子
NODE_TYPE_EXPAND_DIMS ExpandDims张算子
NODE_TYPE_FILL Fill算子
NODE_TYPE_FULL_CONNECTION FullConnection算子
NODE_TYPE_FUSED_BATCH_NORM BatchNorm算子
NODE_TYPE_GATHER Gather算子
NODE_TYPE_LAYER_NORM_FUSION LayerNorm算子
NODE_TYPE_LESS_EQUAL LessEqual算子
NODE_TYPE_MATMUL_FUSION MatMul算子
NODE_TYPE_MAXIMUM Maximum算子
NODE_TYPE_MAX_POOL_FUSION MaxPool算子
NODE_TYPE_MUL_FUSION Mul算子
NODE_TYPE_ONE_HOT OneHot算子
NODE_TYPE_PAD_FUSION Pad算子
NODE_TYPE_POW_FUSION Pow算子
NODE_TYPE_PRELU_FUSION PReLU算子
NODE_TYPE_QUANT_DTYPE_CAST QuantDTypeCast算子
NODE_TYPE_REDUCE_FUSION Reduce算子
NODE_TYPE_RESHAPE Reshape算子
NODE_TYPE_RESIZE Resize算子
NODE_TYPE_RSQRT Rsqrt算子
NODE_TYPE_SCALE_FUSION Scale算子
NODE_TYPE_SHAPE Shape算子
NODE_TYPE_SLICE_FUSION Slice算子
NODE_TYPE_SOFTMAX Softmax算子
NODE_TYPE_SPACE_TO_BATCH_ND SpaceToBatchND算子
NODE_TYPE_SPLIT Split算子
NODE_TYPE_SQRT Sqrt算子
NODE_TYPE_SQUEEZE SquaredDifference算子
NODE_TYPE_SQUARED_DIFFERENCE Squeeze算子
NODE_TYPE_STACK Stack算子
NODE_TYPE_STRIDED_SLICE StridedSlice算子
NODE_TYPE_SUB_FUSION Sub算子
NODE_TYPE_TILE_FUSION Tile算子
NODE_TYPE_TOPK_FUSION TopK算子
NODE_TYPE_TRANSPOSE Transpose算子
NODE_TYPE_UNSQUEEZE Unsqueeze算子

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_ALL int8全量化

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 < y2$,并且已知四个坐标点的值$ Q{11} = (x_1, y1), Q{12} = (x1, y2), Q_{21} = (x_2, y1),Q{22} = (x_2, y2) $,并且$ 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-x1}f(Q{11})+\frac{x-x_1}{x_2-x1}f(Q{21}) $
$ f(x,y_2) = \frac{x_2-x}{x_2-x1}f(Q{12})+\frac{x-x_1}{x_2-x1}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 < y2 $,并且已知四个坐标点的值$ Q{11} = (x_1, y1), Q{12} = (x1, y2), Q_{21} = (x_2, y1),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

0  赞