openharmony 鸿蒙 _n_n_rt_v20

2025-06-16 浏览 (1)

NNRt (V2_0)

概述

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

起始版本: 3.2

汇总

文件

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

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

枚举类型说明

ActivationType

enum ActivationType : byte

描述

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

起始版本: 3.2

枚举值描述
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\ x_i < 0 \cr 0, &if\ x_i = 0 \cr 1, &if\ 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 是输入tensor沿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 $

起始版本: 3.2

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

DataType

enum DataType : byte

描述

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

起始版本: 3.2

枚举值描述
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计算芯片的状态。

起始版本: 3.2

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

DeviceType

enum DeviceType : int

描述

AI计算芯片的类型。

起始版本: 3.2

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

EltwiseMode

enum EltwiseMode : byte

描述

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

起始版本: 3.2

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

Format

enum Format : byte

描述

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

起始版本: 3.2

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

NearestMode

enum NearestMode : byte

描述

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

起始版本: 3.2

枚举值描述
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接口的返回值。

起始版本: 4.0

枚举值描述
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

描述

算子类型。

起始版本: 3.2

枚举值描述
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.]]\ $

起始版本: 3.2

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

PadMode

enum PadMode : byte

描述

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

起始版本: 3.2

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

PerformanceMode

enum PerformanceMode : int

描述

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

起始版本: 3.2

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

Priority

enum Priority : int

描述

AI计算任务的优先级。

起始版本: 3.2

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

QuantType

enum QuantType : byte

描述

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

起始版本: 3.2

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

ReduceMode

enum ReduceMode : byte

描述

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

起始版本: 3.2

枚举值描述
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算子使用。

起始版本: 3.2

枚举值描述
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算子使用。

起始版本: 3.2

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

你可能感兴趣的鸿蒙文章

harmony 鸿蒙NNRt HDI 参考

harmony 鸿蒙Activation

harmony 鸿蒙Activation

harmony 鸿蒙AddFusion

harmony 鸿蒙AddFusion

harmony 鸿蒙ArgMaxFusion

harmony 鸿蒙ArgMaxFusion

harmony 鸿蒙AvgPoolFusion

harmony 鸿蒙AvgPoolFusion

harmony 鸿蒙BatchToSpaceND

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