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 } | 填充类型,需要配合AvgPoolFusion,AvgPoolFusion,Conv2DFusion,MaxPoolFusion使用。 |
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
描述:
填充类型,需要配合AvgPoolFusion,AvgPoolFusion,Conv2DFusion,MaxPoolFusion使用。
枚举值 | 描述 |
---|---|
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 < 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 |