模型算子支持列表
使用限制说明
本章节主要介绍D-Robotics 处理器支持的 Caffe
和 ONNX
算子情况,其他未列出的算子因D-Robotics 处理器 bpu硬件限制,暂不支持。
术语概念:
-
BPU加速 :D-Robotics 处理器可以进行加速的算子(一定约束条件下),如果不满足约束条件,则会在CPU进行计算
-
CPU计算 :当前已经在D-Robotics ARM CPU上进行优化的算子,支持onnx opset10与opset11。
-
CPU计算※ :暂时未集成的CPU算子。
其他注意事项:
-
RDK X3所有BPU上运行的算子均遵守一般限制:input_batch ≤ 128。
-
RDK Ultra 和 RDK X5所有BPU上运行的算子均遵守一般限制:1. 输入输出维度均为4,对于支持非四维情况的op,会在约束中显性标识; 2. shape:H,W,C ∈ [1, 65536],
N <= 4096;3. N x C x H x W <= 1G bytes
。 -
支持
Caffe 1.0
基础算子以及常用扩展算子,支持onnxopset10
和opset11
算子,对于无法满足BPU加速约束条件的算子将会退化到ARM CPU进行计算。 -
Cast
,Constant
,Dropout
,Reshape
,Squeeze
,Unsqueeze
,Shape
这些算子(OP)无法直接运行在BPU上,但在一些情况下(常量折叠)算法工具链会将其优化掉进而实现支持的效果。 -
标记为PyTorch的算子(OP)为官方的opset11不包含的算子,D-Robotics 算法工具链提供了导出脚本可以将其从PyTorch导出到D-Robotics 自定义的onnx OP中。
-
基于tensorlfow-onnx(https://github.com/onnx/tensorflow-onnx)转换工具,支持将
tensorlfow1.*
版本的算子稳定的转换到opset6-opset11版本的ONNX模型格式,但是Tensroflow2.*
当前支持还属于实 验版本。 -
关于OP主动量化被动量化的说明:一个符合本章节约束条件的OP仍然运行在CPU的主要原因是该OP属于被动量化OP,算法工具链会根据OP的计算特性和BPU底层逻辑等多方面考虑设计量化逻辑,当前量化逻辑分为:主动量化,被动量化,手动量化。量化逻辑更多信息请阅读:算法工具链中的主动量化和被动量化逻辑 章节。
RDK X3支持的Caffe算子列表
caffe算子名称 | CPU计算/BPU加速 | X3 BPU支持约束 | CPU支持约束 |
---|---|---|---|
Convolution | BPU加速 | Kernel宽高取值范围:HxW=[1,7]x[1,7] 输入输出Channel取值范围 (one group) <= 2048 (对于非dilated、group、depthwise conv等普通卷积,可以放宽至 <=4096 )。stride无限制。 Dilation取值范围:只支持设置为2的幂次方,且必须能够被stride整除。 h_dilated 和 w_dilated 可以不同但要求 h_diated <= w_dilated 。单个 Kernel 总体大小限制: HxWxC <= 32768 。不支持配置axis,默认为1 | 仅支持4维Conv计算。 auto_pad 属性不支持。 type约束支持:float, int32, int8。 pads 属性约束``[Hstart, Wstart, Hend, Wend]`(pads长度等于4)并且 Hstart == Hend,Wstart == Wend。 |
Deconvolution | BPU加速 | Kernel 宽高取值范围:HxW=[2,14]x[2,14]。 输入输出Channel数值取值范围: C <= 2048 。 Padding宽高取值范围: HxW=[0,(Kernel_H-1)/2]x[0,(Kernel_W-1)/2] 。 Stride取值范围:Stride ∈ 4 。 stride_h ≦ stride_w 。 Dilation ∈ 1。 不支持配置axis属性。 | 不支持output_shape和output_padding参数; auto_pad参数只支持NOTSET模式; 不支持axis |
MaxUnpool | CPU计算 | --- | from_type支持: - X:type约束:仅支持float类型。 - I:Tensor(int64)。 to_type支持:type约束:仅支持float类型。 |
Pooling | BPU加速 | 共有四种Pooling算子即MaxPooling,AveragePooling,GlobalMaxPooling,GlobalAveragePooling。 对四种Pooling的约束分别为: MaxPooling: Kernel宽高的取值范围为:[1,64]x[1,64] 。 Stride取值范围为:[1,185]。 Padding值需要大于等于零。 AveragePooling: Kernel HxW=[1, 7]x[1, 7], Stride ∈185。 GlobalAveragePooling: 假设输入shape为NCHW, 则输入宽高需满足 HxW <= 8192 。 GlobalMaxPooling: 假设输入shape为NCHW,则输入宽高取值范围为HxW=[1,1024]x[1,1024]。 | 无 |
SPP | CPU计算 | 不支持 | 支持pyramid_height,2^n 次pooling, n<7 ; pooling kernel 小于等于 255; 支持pool,配置可选值为 {0,1} |
InnerProduct | BPU加速 | InnerProduct将被转化为Conv实现。 假设InnerProduct的输入feature map的shape为NCHW : 1. 如果HW均小于等于7,则Gemm的限制等同于Conv。 2. 如果H和W均为1,那么C的限制为 <= 16384 ;否则 C的大小限制为 <= 2048 。 3. 如果Gemm后是一个BPU支持的节点,Gemm会进行低精度int8输出,此时的输入宽高限制为: H x W/8 x C/4 <= 1024。 4. 如果Gemm后是一个非BPU支持的节点,Gemm会进行高精度int32输出,此时的输入宽高限制为: H x W/8 x C/4 < 2048 。 不支持配置axis属性 | 无 |
LRN | CPU计算 | 不支持 | local_size 支持、 alpha支持、 beta 支持、 norm_region 支持,配置可选值 {ACROSS_CHANNELS, WITHIN_CHANNEL } 、 k 支持 |
MVN | CPU计算 | 不支持 | normalize_variance支持,配置可选值为1、 across_channels支持,配置可选值为1、 仅支持Float32类型的计算。 |
BatchNorm | BPU加速 | 无限制 | 无 |
ELU | CPU计算 | 不支持 | 无 |
BNLL | CPU计算 | 不支持 | 无 |
PReLU | BPU加速 | 无限制 | 无 |
ReLU/LeakyRelu | BPU加速 | 无限制 | 无 |
Sigmoid | BPU加速 | 对于一个输入维度为1CHW的tensor,仅支持min(8W4C对齐后的shape,32C对齐后的shape) <=8192 的情况。 8W4C:实际运行时tensor的W维度padding至8的整数倍,C维度padding至4的整数倍。 32C:实际运行时tensor的C维度padding至32的整数倍。 在两个对齐方式中取对齐后shape最小值,判断是否 <=8192 。 | 无 |
TanH | BPU加速 | 无限制 | 无 |
Eltwise | BPU加速 | operation目前支持Add和Mul,暂不支持减。 Add: 输入channel大小 M<= 2048 支持以下几种情况: 1. Add的两个输入shape为NCHW和NCHW; 2. Add的两个输入shape为NCHW和NC11(Add的两个输入 都需要是其它op的输出) Mul: Mul的两个输入都需要是四维并且C的大小需要 <= 2048 。 同时仅支持如下shape的相乘: 1. (1xCxHxW vs 1xCxHxW)。 2. (1xCxHxW vs 1xCx1x1)。 3. (1xCxHxW vs 1x1x1x1)。 | 无 |
Bias | BPU加速 | 参考Eltwise等于Add的情况 | 无 |
Scale | BPU加速 | 参考Eltwise等于Mul的情况 | 无 |
AbsVal | CPU计算 | 不支持 | 无 |
Exp | BPU加速 | 无限制 | 无 |
Log | CPU计算 | 不支持 | 无 |
Power | BPU加速 | 无限制 | 无 |
Threshold | CPU计算 | 不支持 | 无 |
Reduction | CPU计算 | 不支持 | operation 支持 SUM、ASUM、 SUMSQ、MEAN ; axis 支持; 仅支持Float32类型的计算。 |
Softmax | CPU计算 | 不支持 | 无 |
ArgMax | BPU加速 | 仅支持 axis=1,c<=64 。 不支持配置top_k != 1 | 无 |
Concat | BPU加速 | 输入输出Channel:C<=2048 | 无 |
Split | BPU加速 | 无限制 | 无 |
Slice | BPU加速 | 无限制 | 无 |
Reshape | CPU计算 | 不支持(一些场景下可以融合) | shape 支持[1,4]个 shape_dim 配置 ; axis 支持[-4,3]范围内可配,不支 持 N 维度,默认值 0,遵循 caffe 规则 ; num_axes 支持[-1,3]范围内可配,默认 值-1 表示对 axis 起始的所有 轴进行变换 |
Flatten | CPU计算 | 不支持(一些场景下可以融合) | axis 取值范围[-4,3],默认值 为 1,-4 与 0 含义相同。 只支持End_axis == -1。 |
Crop | CPU计算 | 不支持 | 无 |
Dropout | BPU加速 | 无限制 | 无 |
LSTM | BPU加速 | 仅支持batch=1 | -- |
Normalize | CPU计算 | 不支持 | type约束:仅支持float类型。 |
PassThrough | BPU加速 | 支持mode=DCR 和 mode=CRD。 仅支持H和W方向的重新排列,并且仅支持blocksize=2的重排列。 举例:NxCxHxW -> Nx(4C)x(H/2)x(W/2)。 | type约束:仅支持float类型。 |
CReLU | CPU计算 | 不支持 | type约束:仅支持float类型。 |
RReLU | CPU计算 | 不支持 | 无 |
Permute | CPU计算 | 不支持 | - 支持nhwc2nchw,perm:[0, 3, 1, 2]。 - 支持nchw2nhwc,perm:[0, 2, 3, 1]。 - 支持指定perm维度转换,数据类型仅支持float,int8,int32。 |
MatMul | BPU加速 | 对于两个输入分别为featuremap和weight的场景(即featuremap与常量相乘) 其中第一个输入是featuremap,第二个输入是weight,以下几种场景均可优化到BPU上运行: - K vs KxN、K vs 1xKxN、K vs 1x1xKxN - MxK vs K、MxK vs KxN、MxK vs 1x1xKxN - 1xMxK vs K、1xMxK vs 1xKxN - 1x1xMxK vs K、1x1xMxK vs 1xKxN、1x1xMxK vs 1x1xKxN - BxMxK vs KxN (B>=1) - 1xBxMxK vs KxN (B>=1) - AxBxMxK vs KxN (A>1,B>1) - 其中第一个输入是weight,第二个输入是featuremap,以下场景可优化到BPU上运行: - 1xBxMxK vs 1x1xKxN (B>1) 对于两个输入均为featuremap的场景(即两个featuremap相乘),以下场景可优化到BPU上运行: - 1xBxMxK vs 1x1xKxN (B>=1) | type约束:仅支持float类型。 |
Upsample | BPU加速 | 输入featuremap需为四维NCHW,并且只支持在H和W维度上进行resize; 放大系数factor支持2的幂数倍如2,4,8,16,32等; 支持H维度和W维度的放大系数不同但需要满足 H_factor <= W_factor | 无 |
ROIPooling | CPU计算 | 不支持 | 无 |
PSROIPooling | CPU计算 | 不支持 | 无 |
RDK X3支持的ONNX算子列表
ONNX算子名称 | CPU计算/BPU加速 | X3 BPU支持约束 | CPU支持约束 |
---|---|---|---|
Abs | CPU计算 | -- | type约束:仅支持float类型。 |
Acos | CPU计算 | -- | type约束:仅支持float类型。 |
Acosh | CPU计算 | -- | type约束:仅支持float类型。 |
Add | BPU加速 | 输入channel大小 M<= 2048 支持以下几种情况: 1. Add的两个输入shape为NCHW和NCHW; 2. Add的两个输入shape为NCHW和NC11(Add的两个输入都需要是其它op的输出); 3.作为resnet中的short-cut子结构的Add,会被融合到上一个conv中加速计算。 | - 支持相同输入shape计算。 - 支持输入1是标量或者输入2是标量的计算。 - 支持broadcast计算,最大维度是5。 |
And | CPU计算 | -- | - 支持相同输入shape计算。 - 支持输入1是标量或者输入2是标量的计算。 - 支持broadcast计算,最大维度是5。 |
ArgMax | BPU加速 | 1. 输入维度为四维输入NCHW。 2. 仅支持沿C维度进行argmax,即axis=1。 3. C <= 64 | type约束:仅支持float类型。 |
ArgMin | CPU计算 | -- | type约束:仅支持float类型。 |
Asin | CPU计算 | -- | type约束:仅支持float类型。 |
Asinh | CPU计算 | -- | type约束:仅支持float类型。 |
Atan | CPU计算 | -- | type约束:仅支持float类型。 |
Atanh | CPU计算 | -- | type约束:仅支持float类型。 |
AveragePool | BPU加速 | Kernel HxW=[1, 7]x[1, 7], Stride ∈185 | auto_pad 属性不支持。 仅支持四维Tensor计算。 |
BatchNormalization | BPU加速 | 优化阶段会被融合到上一个conv中支持 | type约束:仅支持float类型。 支持第1个维度是channel的数据排布方式计算。 |
BitShift | CPU计算※ | -- | -- |
Cast | CPU计算 | -- | from_type支持double, float, bool, int64, uint32, int32, uint16, int16, uint8, int8。 to_type支持double, float, bool, int64, uint32, int32, uint16, int16, uint8, int8。 |
Ceil | CPU计算 | -- | type约束:仅支持float类型。 |
Clip | BPU加速 | 无限制。 | type约束:仅支持float类型。 仅有2个输入时,默认为min参数。 |
Compress | CPU计算※ | -- | -- |
Concat | BPU加速 | 输入输出Channel:C<=2048 。 | -- |
ConcatFromSequence | CPU计算※ | -- | -- |
Constant | BPU加速 | 会通过常量折叠将其优化为数值存储 | 目前不支持sparse_tensor属性。 type约束:仅支持float类型。 |
ConstantOfShape | BPU加速 | 会通过常量折叠将其优化为数值存储 | type约束支持:float,int32,int8。 |
Conv | BPU加速 | Kernel宽高取值范围:HxW=[1,7]x[1,7]。 输入输出Channel取值范围 (one group) <= 2048 (对于非dilated、group、depthwise conv等普通卷积,可以放宽至<=4096 )。 stride无限制,,但对于Conv后接Add(resnet shortcut-connecting) Stride取值范围为:2。 Dilation取值范围:只支持设置为2的幂次方,且必须能够被stride整除。 h_dilated和w_dilated可以不同但要求 h_diated<=w_dilated 。 单个Kernel总体大小限制: HxWxC <= 32768 | 仅支持4维Conv计算。 auto_pad 属性不支持。 type约束支持:float,int32,int8。 pads属性约束:[Hstart, Wstart, Hend, Wend](pads长度等于4)并且Hstart==Hend,Wstart==Wend。 |
ConvInteger | CPU计算※ | -- | -- |
ConvTranspose | BPU加速 | Kernel 宽高取值范围:HxW=[2,14]x[2,14]。 输入输出Channel数值取值范围: C <= 2048 。 Padding宽高取值范围:HxW=[0,(Kernel_H-1)/2]x[0,(Kernel_W-1)/2]。 Stride取值范围: Stride ∈ {2, 4} 。 stride_h ≦ stride_w 。 Dilation ∈ {(1, 1)} | auto_pad属性不支持。 type约束支持:float,int32,int8。 |
Cos | BPU加速 | 对于一个输入维度为1CHW的tensor,仅支持 CxHxW <= 8192 的情况 | type约束:仅支持float类型。 |
Cosh | CPU计算 | -- | type约束:仅支持float类型。 |
CumSum | CPU计算 | -- | from_type: x:type约束仅支持float类型。 axis:type约束仅支持int32类型。 to_type:type约束仅支持float类型。 |
DepthToSpace | BPU加速 | 支持mode=DCR 和 mode=CRD。 仅支持H和W方向的重新排列,并且仅支持blocksize=2的重排列。 举例:NxCxHxW -> Nx(C/4)x(2H)x(2W) | from_type支持: - type约束仅支持float类型。 - 仅支持4维度Tensor计算。 to_type支持: - type约束仅支持float类型。 - 仅支持4维度Tensor计算。 |
DequantizeLinear | CPU计算 | -- | -- |
Det | CPU计算※ | -- | -- |
Div | BPU加速 | 1. 只支持两个输入均为featuremap(不支持输入来自于常量); 2. 对input shape的约束请参考Mul算子 | - 支持相同输入shape计算。 - 支持输入1是标量或者输入2是标量的计算。 - 支持broadcast计算,最大维度是5。 |
Dropout | BPU加速 | 该算子推理阶段不参加计算, 会被移除优化 | -- |
Einsum | CPU计算※ | -- | -- |
Elu | CPU计算 | -- | type约束:仅支持float类型。 |
Equal | CPU计算 | -- | - 支持相同输入shape计算。 - 支持输入1是标量或者输入2是标量的计算。 - 支持broadcast计算,最大维度是5。 |
Erf | CPU计算 | -- | type约束:支持float、double数据类型。 |
Exp | BPU加速 | -- | type约束:仅支持float类型。 |
Expand | CPU计算 | -- | -- |
EyeLike | CPU计算 | -- | -- |
Flatten | CPU计算 | -- | -- |
Floor | CPU计算 | -- | type约束:仅支持float类型。 |
GRU | CPU计算 | -- | - direction属性仅支持forward类型。 - type约束:仅支持float类型。 - 仅支持输入个数是3、4、6。 - 输出个数是2。 |
Gather | CPU计算 | -- | from_type支持: - input:type约束支持: float,int64,int32,int8,uint64,uint32,uint8。 - indices:type约束支持int32, int64。 to_type支持:type约束支持: float,int64,int32,int8,uint64,uint32,uint8。 |
GatherElements | CPU计算 | -- | -- |
GatherND | CPU计算 | -- | from_type支持: - input:type约束支持float,int32,int8。 - indices:tensor(int64)。 to_type支持:type约束支持float,int32,int8。 |
Gemm | BPU加速 | Gemm将被转化为Conv实现。 假设Gemm的输入feature map的shape为NCHW: 1. 如果HW均小于等于7,则Gemm的限制等同于Conv。 2. 如果H和W均为1,那么C的限制为 <= 16384 ;否则 C的大小限制为 <= 2048 。 3. 如果Gemm后是一个BPU支持的节点,Gemm会进行低精度int8输出,此时的输入宽高限制为: H x W/8 x C/4 <= 1024 。 4. 如果Gemm后是一个非BPU支持的节点,Gemm会进行高精度int32输出,此时的输入宽高限制为: H x W/8 x C/4 < 2048 。 | type约束:仅支持float类型。 |
GlobalAveragePool | BPU加速 | 假设输入shape为NCHW, 则输入宽高需满足 HxW <= 8192 | 无 |
GlobalLpPool | CPU计算 | -- | - type约束:支持float和double类型。 - 仅支持四维Tensor计算。 |
GlobalMaxPool | BPU加速 | 假设输入shape为NCHW, 则输入宽高取值范围为HxW=[1,1024]x[1,1024] | - type约束仅支持float类型。 - 仅支持四维Tensor。 |
Greater | CPU计算 | -- | - 支持相同输入shape计算。 - 支持输入1是标量或者输入2 是标量的计算。 - 支持broadcast计算,最大维度是5。 |
HardSigmoid | CPU计算 | -- | type约束仅支持float类型。 |
Hardmax | CPU计算※ | -- | -- |
Identity | CPU计算 | -- | -- |
If | CPU计算※ | -- | -- |
InstanceNormalization | CPU计算 | -- | - type约束仅支持float类型。 - 支持第1个维度是channel的数据排布方式计算。 |
IsInf | CPU计算※ | -- | -- |
IsNaN | CPU计算※ | -- | -- |
LRN | CPU计算 | -- | - type约束仅支持float类型。 - 仅支持四维Tensor。 |
LSTM | BPU加速 | 仅支持batch_size=1 | - 不支持属性设置。 - type约束仅支持float类型。 - 仅支持输入个数是3、4、8。 - 输出个数是2。 |
LeakyRelu | BPU加速 | 无 | 无 |
Less | CPU计算 | -- | - 支持相同输入shape计算。 - 支持输入1是标量或者输入2是标量的计算。 - 支持broadcast计算,最大维度是5。 |
LessOrEqual | CPU计算 | - 支持相同输入shape计算。 - 支持输入1是标量或者输入2是标量的计算。 - 支持broadcast计算,最大维度是5。 | |
Log | CPU计算 | -- | type约束:仅支持float类型。 |
LogSoftmax | CPU计算 | -- | type约束:仅支持float类型。 |
Loop | CPU计算※ | -- | -- |
LpNormalization | CPU计算 | -- | - p范数仅支持1或者2。 - type约束支持double类型和float类型。 |
LpPool | CPU计算 | -- | - auto_pad属性不支持。 - type约束支持double类型和float类型。 - 仅支持4维计算。 |
MatMulInteger | CPU计算※ | -- | -- |
MatMul | BPU加速 | 对于两个输入分别为featuremap和weight的场景(即featuremap与常量相乘) 其中第一个输入是featuremap,第二个输入是weight,以下几种场景均可优化到BPU上运行: - K vs KxN、K vs 1xKxN、K vs 1x1xKxN - MxK vs K、MxK vs KxN、MxK vs 1x1xKxN - 1xMxK vs K、1xMxK vs 1xKxN - 1x1xMxK vs K、1x1xMxK vs 1xKxN、1x1xMxK vs 1x1xKxN - BxMxK vs KxN (B>=1) - 1xBxMxK vs KxN (B>=1) - AxBxMxK vs KxN (A>1,B>1) - 其中第一个输入是weight,第二个输入是featuremap,以下场景可优化到BPU上运行: - 1xBxMxK vs 1x1xKxN (B>1) 对于两个输入均为featuremap的场景(即两个featuremap相乘),以下场景可优化到BPU上运行: - 1xBxMxK vs 1x1xKxN (B>=1) | type约束:仅支持float类型。 |
Max | CPU计算 | -- | - 支持1-∞个输入。 - 支持相同输入shape计算。 - 支持输入1是标量或者输入2是标量的计算。 - 支持broadcast计算,最大维度是5。 |
MaxPool | BPU加速 | Kernel宽高的取值范围为:[1, 64]x[1, 64]。 Stride取值范围为:[1,185]。 Padding值需要大于等于零。 MaxPool不支持dilation。 | 1. dilation只支持1x1。 2. 只支持数据行优先存储。 3. auto_pad属性不支持。 4. storage_order属性不支持。 5. 仅支持四维Tensor计算。 |
MaxRoiPool | CPU计算 | -- | 无 |
Mean | CPU计算※ | -- | -- |
Min | CPU计算 | -- | - 支持1-∞个输入。 - 支持相同输入shape计算。 - 支持输入1是标量或者输入2是标量的计算。 - 支持broadcast计算,最 大维度是5。 |
Mod | CPU计算※ | -- | -- |
Mul | BPU加速 | Mul的两个输入都需要是四维并且C的大小需要 <= 2048 。 同时仅支持如下shape的相乘: 1. (1xCxHxW vs 1xCxHxW)。 2. (1xCxHxW vs 1xCx1x1)。 3. (1xCxHxW vs 1x1x1x1) 。 注意:输入的取值不能为0。 | - 支持相同输入shape计算。 - 支持输入1是标量或者输入2是标量的计算。 - 支持broadcast计算,最大维度是5。 |
Multinomial | CPU计算※ | -- | -- |
Neg | CPU计算 | -- | -- |
NonZero | CPU计算 | -- | - type约束支持:float,int32,int8。 - 支持1维计算。 - 支持4维计算。 |
Not | CPU计算 | -- | -- |
OneHot | CPU计算 | -- | -- |
Or | CPU计算 | -- | - 支持相同输入shape计算。 - 支持输入1是标量或者输入2是标量的计算。 - 支持broadcast计算,最大维度是5。 |
PRelu | BPU加速 | -- | - type约束支持:仅支持float类型。 - from_type:X和slope。 - to_type:Y。 - X的shape为data_shape,slope的为slope_shape ,shape约束如下: - data_shape == slope_shape。 - slope_shape.ProdSize() == 1。 - X和slope仅支持NCHW排布的4维度计算,并且N、C维度值相等。 - HxW 与1x1( slope_shape )。 - HxW与Hx1( slope_shape )。 - HxW与1xW( slope_shape )。 - X是4维度 && slope是3维度 && data_shape[1] == slope_shape [0] && slope_shape [1] == 1 && slope_shape [2] == 1。 |
Pad | BPU加速 | 支持mode = Constant。 仅支持H,W维度的pad。 | Pad-10: - type约束仅支持float类型。 - 仅支持NCHW排布的4维Tensor。 - 属性pads的约束如下: - len(pads) == 8 && pads[i] >=0 && pads[0] == 0 && pads[1] == 0 && pads[4] == 0 && pads[5] == 0。 Pad-11: - from_type支持: - data:type约束仅支持float类型。 - pads : tensor(int64)。 - constant_value (optional):type约束仅支持float类型。 - to_type支持:type约束仅支持float类型。 - 仅支持4维Tensor。 - 仅支持2/3维度填充。 |
Pow | BPU加速 | 只支持第二个输入(exponent)为单个值。 | - type约束支持:double, float,int64, int32。 - 支持相同输入shape的计算。 - 支持输入1是标量或者输入2是标量的计算。 - 支持broadcast计算,最大维度是5。 - 仅支持X和Y相同type。 |
QLinearConv | CPU计算※ | -- | -- |
QLinearMatMul | CPU计算※ | -- | -- |
QuantizeLinear | CPU计算 | -- | -- |
RNN | CPU计算 | -- | - type约束:仅支持float类型。 - 属性约束:direction属性仅支持forward。 - 输入约束:仅支持X、W、R输入,不支持可选输入B、sequence_lens、initial_h设置。 - 输出约束:仅支持Y_h的输出,shape [num_directions, batch_size, hidden_size]。 |
RandomNormal | CPU计算※ | -- | -- |
RandomNormalLike | CPU计算※ | -- | -- |
RandomUniform | CPU计算 | -- | -- |
RandomUniformLike | CPU计算 | -- | -- |
Range | CPU计算 | -- | type约束支持:float,int64,int32,int16。 |
Reciprocal | BPU加速 | -- | -- |
ReduceL1 | CPU计算 | -- | -- |
ReduceL2 | CPU计算 | -- | -- |
ReduceLogSum | CPU计算 | -- | 仅支持float、double数据类型 |
ReduceLogSumExp | CPU计算 | -- | type约束支持float、double数据类型。 |
ReduceMax | CPU计算 | -- | axes支持0, 1或者等于输入数据的维数 |
ReduceMean | BPU加速 | input featuremap需为四维,并且axes=[2, 3] | axes支持0, 1或者等于输入数据的维数 |
ReduceMin | CPU计算 | -- | -- |
ReduceProd | CPU计算 | -- | -- |
ReduceSum | CPU计算 | -- | axes支持0, 1或者等于输入数据的维数 |
ReduceSumSquare | CPU计算 | -- | axes支持0, 1或者等于输入数据的维数 |
Relu | BPU加速 | 会被融合到前一个conv中 | type约束:仅支持float类型。 |
Reshape | CPU计算 | -- | -- |
Resize | BPU加速 | 1. 输入featuremap需为四维NCHW,并且只支持在H和W维度上进行resize,onnx opset=11时支持roi输入(pytorch转换的模型需手动修改算子添加roi输入,roi只支持常量输入),roi输入只支持H和W维度,roi输入只在tf_crop_and_resize模式下起作用。 2. 属性mode支持nearest和linear两种模式。 3. 支持放大和缩小。 4. 对于mode=nearest,放大系数factor支持2的幂数倍如2,4,8,16,32等;支持H维度和W维度的放大系数不同但需要满足 H_factor <= W_factor 。 5. 对于onnx opset=11,属性coordinate_transformation_mode支持half_pixel,pytorch_half_pixel, asymmetric,align_corners和tf_crop_and_resize,当coordinate_transformation_mode=tf_crop_and_resize时,需要保证roi输入转换得到的边界坐标为整数。 | resize-10 - 输入等于2时,使用opset10。 - 输入数据是4维Tensor。 resize-11 - 输入大于2时,使用opset11。 - 输入数据是4维Tensor。 - coordinate_transformation_mode在nearest, linear模式下支持half_pixel, asymmetric, align_corners和pytorch_half_pixel四种,在cubic模式下只支持half_pixel。 - extrapolation_value属性不支持。 |
ReverseSequence | CPU计算 | -- | -- |
RoiAlign | CPU计算 | -- | -- |
Round | CPU计算 | -- | -- |
Scan | CPU计算※ | -- | -- |
Scatter (deprecated) | CPU计算※ | -- | -- |
ScatterElements | CPU计算 | -- | from_type支持: - data:type约束支持:float,int32,int8。 - indices:type约束仅支持int32类型。 - updates:type约束支持:float,int32,int8。 to_type支持:type约束支持:float,int32,int8。 |
ScatterND | CPU计算 | -- | from_type支持: - data:type约束支持:float,int32,int8。 - updates : type约束支持:float,int32,int8。 to_type支持:type约束支持:float,int32,int8。 |
Selu | CPU计算 | -- | type约束:仅支持float类型。 |
SequenceAt | CPU计算※ | -- | -- |
SequenceConstruct | CPU计算※ | -- | -- |
SequenceEmpty | CPU计算※ | -- | -- |
SequenceErase | CPU计算※ | -- | -- |
SequenceInsert | CPU计算※ | -- | -- |
SequenceLength | CPU计算※ | -- | -- |
Shape | BPU加速 | 会通过常量折叠将其优化为数值存储 | -- |
Shrink | CPU计算※ | -- | -- |
Sigmoid | BPU加速 | 对于一个输入维度为1CHW的tensor,仅支持min(8W4C对齐后的shape,32C对齐后的shape) <=8192 的情况。 8W4C:实际运行时tensor的W维度padding至8的整数倍,C维度padding至4的整数倍。 32C:实际运行时tensor的C维度padding至32的整数倍。 在两个对齐方式中取对齐后shape最小值,判断是否 <=8192 。 | type约束:仅支持float类型。 |
Sign | CPU计算 | -- | 无 |
Sin | BPU加速 | 对于一个输入维度为1CHW的tensor,仅支持CxHxW <= 8192 的情况 | type约束:仅支持float类型。 |
Sinh | CPU计算 | -- | type约束:仅支持float类型。 |
Size | BPU加速 | 会通过常量折叠将其优化为数值存储 | -- |
Slice | BPU加速 | 无限制 | 无 |
Softmax | BPU加速 | 默认运行在CPU上,当该op输入为四维且axis=1,并且作为模型输出节点时,可以通过run_on_bpu指定该节点将其运行在BPU上。 | type约束:仅支持float类型。 |
Softplus | BPU加速 | 对于一个输入维度为1CHW的tensor,仅支持CxHxW <= 8192 的情况 | type约束:仅支持float类型。 |
Softsign | CPU计算 | -- | type约束:仅支持float类型。 |
SpaceToDepth | BPU加速 | 支持mode=DCR 和 mode=CRD。 仅支持H和W方向的重新排列,并且仅支持blocksize=2的重排列。 举例:NxCxHxW -> Nx(4C)x(H/2)x(W/2) | type约束:仅支持float类型。 |
Split | BPU加速 | 1. 只支持输入大小为NCHW; 2. 原始输入的长度必须是每个被切分的tensor长度的倍数; 3. 只支持沿着C,H,W维度的切分,也就是axis支持等于1,2,3; 4. split数应可以整除 | type约束:仅支持float类型。 |
SplitToSequence | CPU计算※ | -- | -- |
Sqrt | BPU加速 | 对于一个输入维度为1CHW的tensor,仅支持CxHxW <= 8192 的情况 | type约束:仅支持float类型。 |
Squeeze | CPU计算 | 如果该op出现在模型中的常量计算子结构中,会被常量折叠优化删除掉,不参与推理 | -- |
StringNormalizer | CPU计算※ | -- | -- |
Sub | CPU计算 | -- | - 支持相同输入shape计算。 - 支持输入1是标量或者输入2是标量的计算。 - 支持broadcast计算,最大维度是5。 |
Sum | BPU加速 | 限制条件等同于Add | type约束:仅支持float类型。 |
Tan | CPU计算 | -- | type约束:仅支持float类型。 |
Tanh | BPU加速 | 对于一个输入维度为1CHW的tensor,仅支持CxHxW <= 8192 的情况 | type约束:仅支持float类型。 |
TfIdfVectorizer | CPU计算※ | -- | -- |
ThresholdedRelu | CPU计算 | -- | type约束:仅支持float类型。 |
Tile | CPU计算 | -- | type约束:仅支持float,int64,int32,uint64,uint32类型。 |
TopK | CPU计算 | -- | - type约束:仅支持float类型。 - 仅支持opset-10。 |
Transpose | CPU计算 | -- | - 支持nhwc2nchw,perm:[0, 3, 1, 2]。 - 支持nchw2nhwc,perm:[0, 2, 3, 1]。 - 支持指定perm维度转换,数据类型仅支持float,int8,int32。 |
Unique | CPU计算※ | -- | -- |
Unsqueeze | CPU计算 | 如果该op出现在模型中的常量计算子结构中,会被常量折叠优化删除掉,不参与推理 | -- |
Upsample (resize替代) | BPU加速 | -- | Upsample-(resize-10) - 输入等于2时,使用opset10。 - 输入数据是4维Tensor。 Upsample-(resize-11) - 输入大于2时,使用opset11。 - 输入数据是4维Tensor。 - coordinate_transformation_mode在nearest, linear模式下支持half_pixel, asymmetric, align_corners和pytorch_half_pixel四种,在cubic模式下只支持half_pixel。 - extrapolation_value属性不支持。 |
Where | CPU计算 | -- | type约束支持float和int64类型。 condition的shape为cond_shape,X的shape为x_shape,Y的shape为y_shape ,output的shape为o_shape,shape约束如下: - 仅支持cond_shape == o_shape情况下: - x_shape == o_shape的broadcast。 - y_shape == o_shape的broadcast。 - 仅支持cond_shape.NDim() == 4 && o_shape.NDim() == 4 && N维度值相同 && C维度值相同: - 1x1(cond_shape)与HxW (o_shape)。 - Hx1(cond_shape)与HxW(o_shape)。 - 1xW(cond_shape)与HxW(o_shape)。 |
Xor | CPU计算※ | -- | -- |
Function | CPU计算※ | -- | -- |
Celu | CPU计算※ | -- | -- |
DynamicQuantizeLinear | CPU计算※ | -- | -- |
GreaterOrEqual | CPU计算 | -- | - 支持相同输入shape计算。 - 支持输入1是标量或者输入2是标量的计算。 - 支持broadcast计算,最大维度是5。 |
MeanVarianceNormalization | CPU计算※ | -- | -- |
GridSample(PyTorch) | CPU计算※ | -- |