跳到主要内容

模型算子支持列表

使用限制说明

本章节主要介绍D-Robotics 处理器支持的 CaffeONNX 算子情况,其他未列出的算子因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 基础算子以及常用扩展算子,支持onnx opset10opset11 算子,对于无法满足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支持约束
ConvolutionBPU加速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。
DeconvolutionBPU加速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
MaxUnpoolCPU计算---from_type支持:
- X:type约束:仅支持float类型。
- I:Tensor(int64)。
to_type支持:type约束:仅支持float类型。
PoolingBPU加速共有四种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]。
SPPCPU计算不支持支持pyramid_height,2^n 次pooling, n<7 ;
pooling kernel 小于等于 255;
支持pool,配置可选值为 {0,1}
InnerProductBPU加速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属性
LRNCPU计算不支持local_size 支持、
alpha支持、
beta 支持、
norm_region 支持,配置可选值{ACROSS_CHANNELS, WITHIN_CHANNEL }
k 支持
MVNCPU计算不支持normalize_variance支持,配置可选值为1
across_channels支持,配置可选值为1
仅支持Float32类型的计算。
BatchNormBPU加速无限制
ELUCPU计算不支持
BNLLCPU计算不支持
PReLUBPU加速无限制
ReLU/LeakyReluBPU加速无限制
SigmoidBPU加速对于一个输入维度为1CHW的tensor,仅支持min(8W4C对齐后的shape,32C对齐后的shape) <=8192的情况。
8W4C:实际运行时tensor的W维度padding至8的整数倍,C维度padding至4的整数倍。
32C:实际运行时tensor的C维度padding至32的整数倍。
在两个对齐方式中取对齐后shape最小值,判断是否<=8192
TanHBPU加速无限制
EltwiseBPU加速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)。
BiasBPU加速参考Eltwise等于Add的情况
ScaleBPU加速参考Eltwise等于Mul的情况
AbsValCPU计算不支持
ExpBPU加速无限制
LogCPU计算不支持
PowerBPU加速无限制
ThresholdCPU计算不支持
ReductionCPU计算不支持operation 支持 SUM、ASUM、 SUMSQ、MEAN ;
axis 支持;
仅支持Float32类型的计算。
SoftmaxCPU计算不支持
ArgMaxBPU加速仅支持 axis=1,c<=64
不支持配置top_k != 1
ConcatBPU加速输入输出Channel:C<=2048
SplitBPU加速无限制
SliceBPU加速无限制
ReshapeCPU计算不支持(一些场景下可以融合)shape 支持[1,4]个 shape_dim 配置 ;
axis 支持[-4,3]范围内可配,不支 持 N 维度,默认值 0,遵循 caffe 规则 ;
num_axes 支持[-1,3]范围内可配,默认 值-1 表示对 axis 起始的所有 轴进行变换
FlattenCPU计算不支持(一些场景下可以融合)axis 取值范围[-4,3],默认值 为 1,-4 与 0 含义相同。
只支持End_axis == -1。
CropCPU计算不支持
DropoutBPU加速无限制
LSTMBPU加速仅支持batch=1--
NormalizeCPU计算不支持type约束:仅支持float类型。
PassThroughBPU加速支持mode=DCR 和 mode=CRD。
仅支持H和W方向的重新排列,并且仅支持blocksize=2的重排列。
举例:NxCxHxW -> Nx(4C)x(H/2)x(W/2)。
type约束:仅支持float类型。
CReLUCPU计算不支持type约束:仅支持float类型。
RReLUCPU计算不支持
PermuteCPU计算不支持- 支持nhwc2nchw,perm:[0, 3, 1, 2]。
- 支持nchw2nhwc,perm:[0, 2, 3, 1]。
- 支持指定perm维度转换,数据类型仅支持float,int8,int32。
MatMulBPU加速对于两个输入分别为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类型。
UpsampleBPU加速输入featuremap需为四维NCHW,并且只支持在H和W维度上进行resize;
放大系数factor支持2的幂数倍如2,4,8,16,32等;
支持H维度和W维度的放大系数不同但需要满足 H_factor <= W_factor
ROIPoolingCPU计算不支持
PSROIPoolingCPU计算不支持

RDK X3支持的ONNX算子列表

ONNX算子名称CPU计算/BPU加速X3 BPU支持约束CPU支持约束
AbsCPU计算--type约束:仅支持float类型。
AcosCPU计算--type约束:仅支持float类型。
AcoshCPU计算--type约束:仅支持float类型。
AddBPU加速输入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。
AndCPU计算--- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
ArgMaxBPU加速1. 输入维度为四维输入NCHW。
2. 仅支持沿C维度进行argmax,即axis=1。
3. C <= 64
type约束:仅支持float类型。
ArgMinCPU计算--type约束:仅支持float类型。
AsinCPU计算--type约束:仅支持float类型。
AsinhCPU计算--type约束:仅支持float类型。
AtanCPU计算--type约束:仅支持float类型。
AtanhCPU计算--type约束:仅支持float类型。
AveragePoolBPU加速Kernel HxW=[1, 7]x[1, 7], Stride ∈185auto_pad 属性不支持。
仅支持四维Tensor计算。
BatchNormalizationBPU加速优化阶段会被融合到上一个conv中支持type约束:仅支持float类型。
支持第1个维度是channel的数据排布方式计算。
BitShiftCPU计算※----
CastCPU计算--from_type支持double, float, bool, int64, uint32, int32, uint16, int16, uint8, int8。
to_type支持double, float, bool, int64, uint32, int32, uint16, int16, uint8, int8。
CeilCPU计算--type约束:仅支持float类型。
ClipBPU加速无限制。type约束:仅支持float类型。
仅有2个输入时,默认为min参数。
CompressCPU计算※----
ConcatBPU加速输入输出Channel:C<=2048--
ConcatFromSequenceCPU计算※----
ConstantBPU加速会通过常量折叠将其优化为数值存储目前不支持sparse_tensor属性。
type约束:仅支持float类型。
ConstantOfShapeBPU加速会通过常量折叠将其优化为数值存储type约束支持:float,int32,int8。
ConvBPU加速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。
ConvIntegerCPU计算※----
ConvTransposeBPU加速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。
CosBPU加速对于一个输入维度为1CHW的tensor,仅支持 CxHxW <= 8192的情况type约束:仅支持float类型。
CoshCPU计算--type约束:仅支持float类型。
CumSumCPU计算--from_type:
x:type约束仅支持float类型。
axis:type约束仅支持int32类型。
to_type:type约束仅支持float类型。
DepthToSpaceBPU加速支持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计算。
DequantizeLinearCPU计算----
DetCPU计算※----
DivBPU加速1. 只支持两个输入均为featuremap(不支持输入来自于常量);
2. 对input shape的约束请参考Mul算子
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
DropoutBPU加速该算子推理阶段不参加计算, 会被移除优化--
EinsumCPU计算※----
EluCPU计算--type约束:仅支持float类型。
EqualCPU计算--- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
ErfCPU计算--type约束:支持float、double数据类型。
ExpBPU加速--type约束:仅支持float类型。
ExpandCPU计算----
EyeLikeCPU计算----
FlattenCPU计算----
FloorCPU计算--type约束:仅支持float类型。
GRUCPU计算--- direction属性仅支持forward类型。
- type约束:仅支持float类型。
- 仅支持输入个数是3、4、6。
- 输出个数是2。
GatherCPU计算--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。
GatherElementsCPU计算----
GatherNDCPU计算--from_type支持:
- input:type约束支持float,int32,int8。
- indices:tensor(int64)。
to_type支持:type约束支持float,int32,int8。
GemmBPU加速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类型。
GlobalAveragePoolBPU加速假设输入shape为NCHW, 则输入宽高需满足 HxW <= 8192
GlobalLpPoolCPU计算--- type约束:支持float和double类型。
- 仅支持四维Tensor计算。
GlobalMaxPoolBPU加速假设输入shape为NCHW, 则输入宽高取值范围为HxW=[1,1024]x[1,1024]- type约束仅支持float类型。
- 仅支持四维Tensor。
GreaterCPU计算--- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
HardSigmoidCPU计算--type约束仅支持float类型。
HardmaxCPU计算※----
IdentityCPU计算----
IfCPU计算※----
InstanceNormalizationCPU计算--- type约束仅支持float类型。
- 支持第1个维度是channel的数据排布方式计算。
IsInfCPU计算※----
IsNaNCPU计算※----
LRNCPU计算--- type约束仅支持float类型。
- 仅支持四维Tensor。
LSTMBPU加速仅支持batch_size=1- 不支持属性设置。
- type约束仅支持float类型。
- 仅支持输入个数是3、4、8。
- 输出个数是2。
LeakyReluBPU加速
LessCPU计算--- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
LessOrEqualCPU计算- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
LogCPU计算--type约束:仅支持float类型。
LogSoftmaxCPU计算--type约束:仅支持float类型。
LoopCPU计算※----
LpNormalizationCPU计算--- p范数仅支持1或者2。
- type约束支持double类型和float类型。
LpPoolCPU计算--- auto_pad属性不支持。
- type约束支持double类型和float类型。
- 仅支持4维计算。
MatMulIntegerCPU计算※----
MatMulBPU加速对于两个输入分别为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类型。
MaxCPU计算--- 支持1-∞个输入。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
MaxPoolBPU加速Kernel宽高的取值范围为:[1, 64]x[1, 64]。
Stride取值范围为:[1,185]。
Padding值需要大于等于零。
MaxPool不支持dilation。
1. dilation只支持1x1。
2. 只支持数据行优先存储。
3. auto_pad属性不支持。
4. storage_order属性不支持。
5. 仅支持四维Tensor计算。
MaxRoiPoolCPU计算--
MeanCPU计算※----
MinCPU计算--- 支持1-∞个输入。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
ModCPU计算※----
MulBPU加速Mul的两个输入都需要是四维并且C的大小需要 <= 2048
同时仅支持如下shape的相乘:
1. (1xCxHxW vs 1xCxHxW)。
2. (1xCxHxW vs 1xCx1x1)。
3. (1xCxHxW vs 1x1x1x1) 。
注意:输入的取值不能为0。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
MultinomialCPU计算※----
NegCPU计算----
NonZeroCPU计算--- type约束支持:float,int32,int8。
- 支持1维计算。
- 支持4维计算。
NotCPU计算----
OneHotCPU计算----
OrCPU计算--- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
PReluBPU加速--- 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。
PadBPU加速支持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维度填充。
PowBPU加速只支持第二个输入(exponent)为单个值。- type约束支持:double, float,int64, int32。
- 支持相同输入shape的计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
- 仅支持X和Y相同type。
QLinearConvCPU计算※----
QLinearMatMulCPU计算※----
QuantizeLinearCPU计算----
RNNCPU计算--- type约束:仅支持float类型。
- 属性约束:direction属性仅支持forward。
- 输入约束:仅支持X、W、R输入,不支持可选输入B、sequence_lens、initial_h设置。
- 输出约束:仅支持Y_h的输出,shape [num_directions, batch_size, hidden_size]。
RandomNormalCPU计算※----
RandomNormalLikeCPU计算※----
RandomUniformCPU计算----
RandomUniformLikeCPU计算----
RangeCPU计算--type约束支持:float,int64,int32,int16。
ReciprocalBPU加速----
ReduceL1CPU计算----
ReduceL2CPU计算----
ReduceLogSumCPU计算--仅支持float、double数据类型
ReduceLogSumExpCPU计算--type约束支持float、double数据类型。
ReduceMaxCPU计算--axes支持0, 1或者等于输入数据的维数
ReduceMeanBPU加速input featuremap需为四维,并且axes=[2, 3]axes支持0, 1或者等于输入数据的维数
ReduceMinCPU计算----
ReduceProdCPU计算----
ReduceSumCPU计算--axes支持0, 1或者等于输入数据的维数
ReduceSumSquareCPU计算--axes支持0, 1或者等于输入数据的维数
ReluBPU加速会被融合到前一个conv中type约束:仅支持float类型。
ReshapeCPU计算----
ResizeBPU加速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属性不支持。
ReverseSequenceCPU计算----
RoiAlignCPU计算----
RoundCPU计算----
ScanCPU计算※----
Scatter (deprecated)CPU计算※----
ScatterElementsCPU计算--from_type支持:
- data:type约束支持:float,int32,int8。
- indices:type约束仅支持int32类型。
- updates:type约束支持:float,int32,int8。
to_type支持:type约束支持:float,int32,int8。
ScatterNDCPU计算--from_type支持:
- data:type约束支持:float,int32,int8。
- updates : type约束支持:float,int32,int8。
to_type支持:type约束支持:float,int32,int8。
SeluCPU计算--type约束:仅支持float类型。
SequenceAtCPU计算※----
SequenceConstructCPU计算※----
SequenceEmptyCPU计算※----
SequenceEraseCPU计算※----
SequenceInsertCPU计算※----
SequenceLengthCPU计算※----
ShapeBPU加速会通过常量折叠将其优化为数值存储--
ShrinkCPU计算※----
SigmoidBPU加速对于一个输入维度为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类型。
SignCPU计算--
SinBPU加速对于一个输入维度为1CHW的tensor,仅支持CxHxW <= 8192的情况type约束:仅支持float类型。
SinhCPU计算--type约束:仅支持float类型。
SizeBPU加速会通过常量折叠将其优化为数值存储--
SliceBPU加速无限制
SoftmaxBPU加速默认运行在CPU上,当该op输入为四维且axis=1,并且作为模型输出节点时,可以通过run_on_bpu指定该节点将其运行在BPU上。type约束:仅支持float类型。
SoftplusBPU加速对于一个输入维度为1CHW的tensor,仅支持CxHxW <= 8192的情况type约束:仅支持float类型。
SoftsignCPU计算--type约束:仅支持float类型。
SpaceToDepthBPU加速支持mode=DCR 和 mode=CRD。
仅支持H和W方向的重新排列,并且仅支持blocksize=2的重排列。
举例:NxCxHxW -> Nx(4C)x(H/2)x(W/2)
type约束:仅支持float类型。
SplitBPU加速1. 只支持输入大小为NCHW;
2. 原始输入的长度必须是每个被切分的tensor长度的倍数;
3. 只支持沿着C,H,W维度的切分,也就是axis支持等于1,2,3;
4. split数应可以整除
type约束:仅支持float类型。
SplitToSequenceCPU计算※----
SqrtBPU加速对于一个输入维度为1CHW的tensor,仅支持CxHxW <= 8192的情况type约束:仅支持float类型。
SqueezeCPU计算如果该op出现在模型中的常量计算子结构中,会被常量折叠优化删除掉,不参与推理--
StringNormalizerCPU计算※----
SubCPU计算--- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
SumBPU加速限制条件等同于Addtype约束:仅支持float类型。
TanCPU计算--type约束:仅支持float类型。
TanhBPU加速对于一个输入维度为1CHW的tensor,仅支持CxHxW <= 8192的情况type约束:仅支持float类型。
TfIdfVectorizerCPU计算※----
ThresholdedReluCPU计算--type约束:仅支持float类型。
TileCPU计算--type约束:仅支持float,int64,int32,uint64,uint32类型。
TopKCPU计算--- type约束:仅支持float类型。
- 仅支持opset-10。
TransposeCPU计算--- 支持nhwc2nchw,perm:[0, 3, 1, 2]。
- 支持nchw2nhwc,perm:[0, 2, 3, 1]。
- 支持指定perm维度转换,数据类型仅支持float,int8,int32。
UniqueCPU计算※----
UnsqueezeCPU计算如果该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属性不支持。
WhereCPU计算--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)。
XorCPU计算※----
FunctionCPU计算※----
CeluCPU计算※----
DynamicQuantizeLinearCPU计算※----
GreaterOrEqualCPU计算--- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
MeanVarianceNormalizationCPU计算※----
GridSample(PyTorch)CPU计算※--

RDK X5支持的Caffe算子列表

caffe算子名称CPU计算/BPU加速X5 BPU支持约束CPU支持约束
ConvolutionBPU加速限制条件等同于 ONNX Conv支持conv1d、conv2d、conv3d。
type约束支持:float,int32,int8。
auto_pad属性不支持。
pads属性约束:
- conv1d: [Dstart,Dend],pads长度等于2,并且Dstart = Dend。
- conv2d:[Hstart,Wstart,Hend,Wend],pads长度等于4 ,并且Hstart==Hend,Wstart==Wend。
- conv3d:[Dstart,Hstart,Wstart,Dend,Hend,Wend],pads长度等于6 ,并且Dstart = Dend,Hstart==Hend,Wstart==Wend。
DeconvolutionBPU加速限制条件等同于 ONNX ConvTransposeshape约束:仅支持4维Tensor计算。
type约束:仅支持float类型。
attribute约束:
- 仅支持dilations、group、output_padding、 pads 、strides 属性。
- pads属性约束:[hstart, wstart, hend, wend]必须满足(hstart==hend and wstart==wend)。
MaxUnpoolCPU计算---from_type支持:
- X:type约束:仅支持float类型。
- I:Tensor(int64)。
to_type支持:type约束:仅支持float类型。
PoolingBPU加速共有四种Pooling算子即MaxPooling,AveragePooling,GlobalMaxPooling,GlobalAveragePooling。对四种Pooling的约束分别为:
- MaxPooling:
该算子支持int16输入输出。
kernel <= 256;
stride <= 256;
padding <= 256。
MaxPooling不支持dilation。
- AveragePooling:
限制条件等同于 ONNX AveragePool
- GlobalAveragePooling:
无限制。
- GlobalMaxPooling:
H, W ∈ [1, 256]。
SPPCPU计算不支持支持pyramid_height,2^n 次pooling, n < 7;
pooling kernel 小于等于 255;
支持pool,配置可选值为 {0,1}
InnerProductBPU加速InnerProduct将被转化为Conv实现,边界约束参考Conv。
不支持配置axis属性。
LRNCPU计算不支持local_size 支持。
alpha支持。
beta 支持。
norm_region 支持,配置可选值{ACROSS_CHANNELS, WITHIN_CHANNEL }
k 支持。
MVNCPU计算不支持normalize_variance支持,配置可选值为1
across_channels支持,配置可选值为1
仅支持Float32类型的计算。
BatchNormBPU加速无限制
ELUBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
BNLLCPU计算不支持
PReLUBPU计算1. 该算子仅支持int8输入输出。
2. 输入输出仅支持4维。
- 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。
ReLU/LeakyReluBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
SigmoidBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
TanHBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
EltwiseBPU加速目前支持的operation包括Add、Sub、Mul。
1. 该算子支持int16输入输出。
2. 输入类型支持featurmap和常量,且最多支持一个常量输入。
3. 支持所有维度的广播,支持两个输入之间的互相广播,例如NH1C和N1WC。
4. 输入输出维度支持1-10维,大小为一般限制(见备注)。支持两个输入维度不同,输入大于4维时可通过合并相邻维度降维到4维(包括N),合并规则是:
(1)将输出dim为1的维度去除,例如[1, 2, 3, 4] [1, 2, 1, 4]->[1, 2, 3, 4]可看为[2, 3, 4],[2, 1, 4]->[2, 3,4]。
(2)相邻的非广播维度可以合并,如[2, 5, 4, 5, 3] [2, 5, 1, 5, 3], 2, 5可以合并。
(3)相邻的同一Tensor的广播维度可以合并: 如[2, 5, 4, 5, 2] [1, 1, 1, 5, 2] 2,5,4可以合并。
(4)广播维度不能和相邻非广播维度合并,如[2, 5, 4, 5, 2] [2, 1, 4, 1, 2]不能合并;非同一Tensor的广播维度不能合并 [2, 1, 4, 1, 2] [1, 5, 1, 5, 1]。
BiasBPU加速参考Eltwise等于Add的情况
ScaleBPU加速参考Eltwise等于Mul的情况
AbsValBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
ExpBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
LogBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
PowerBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
3. 第二个输入只支持标量。
ThresholdCPU计算不支持
ReductionCPU计算不支持operation 支持 SUM、ASUM、 SUMSQ、MEAN、Max、LogSum、Min、Prod;
axis 支持;
仅支持Float32类型的计算。
SoftmaxBPU加速1. 该算子支持int16输入输出。
2. 默认运行在CPU上,当该op输入为四维并且axis=1,2,3时,可以通过run_on_bpu指定该节点将其运行在BPU上。
ArgMaxBPU加速1. 仅支持 axis=1,c<=64。
2. 不支持配置top_k != 1。
3. 该算子支持int16输入输出。
ConcatBPU加速1. 该算子支持int16输入输出。
2. 不支持N维度concat。
SplitBPU加速1. 该算子支持int16输入输出。
2. 原始输入的长度必须是每个被切分的tensor长度的倍数。
3. 支持除N维度以外的任意维度。
4. split数应可以整除。
5. 支持非四维输入输出。
SliceBPU加速1. 该算子支持int16输入输出。
2. 无限制,支持非四维输入输出。
ReshapeBPU加速1. 该算子支持int16输入输出。
2. 支持1-10维输入输出。
shape 支持[1,4]个 shape_dim 配置 ;
axis 支持[-4,3]范围内可配,不支 持 N 维度,默认值 0,遵循 caffe 规则 ;
num_axes 支持[-1,3]范围内可配,默认 值 -1 表示对 axis 起始的所有 轴进行变换
FlattenCPU计算不支持(一些场景下可以融合)axis 取值范围[-4,3],默认值 为 1,-4 与 0 含义相同。
只支持End_axis == -1。
CropCPU计算不支持
DropoutBPU加速无限制
LSTMBPU加速仅支持batch=1--
NormalizeCPU计算不支持type约束:仅支持float类型。
PassThroughBPU加速支持mode=DCR 和 mode=CRD。
仅支持H和W方向的重新排列,并且仅支持blocksize=2的重排列。
举例:NxCxHxW -> Nx(4C)x(H/2)x(W/2)。
type约束:仅支持float类型。
CReLUCPU计算不支持type约束:仅支持float类型。
RReLUCPU计算不支持
PermuteBPU加速1. 支持任意输入维度。
2. 除batch维度(第一维)以外,支持任意其它维度的转换。
- 支持nhwc2nchw,perm:[0, 3, 1, 2]。
- 支持nchw2nhwc,perm:[0, 2, 3, 1]。
- 支持指定perm维度转换,数据类型仅支持float,int8,int32。
MatMulBPU加速C = MatMul(A,B),对输入A和输入B有以下维度限制:
- A和B均支持非四维输入但需满足约束:
- A和B的维度必须相同。
- A和B的最低两个维度M, K ∈ [1, 8192],其他更高维度∈[1, 4096]。
注:HDMK vs HDKN,MK/KN即为最低两个维度。
- 支持的broadcast需满足以下条件:
- A 跟B两个输入,除开最低两维的其他维度全是1或者全是不需要广播的值。
- 此场景支持的例子:HDMK vs H1KN
- 此场景不支持反例:H1MK vs 1DKN
- A除了最低两个维度,其他维度不能即有需要广播的值也有不需要广播的值。
- 此场景支持的例子:11MK vs HDKN
- 此场景不支持反例:H1MK vs HDKN
- B除了最低两个维度,如果其他维度即有需要广播的值也有不需要广播的值,那么不需要广播的值只能在连续的高维度上。
- 此场景支持的例子:BHDMK vs B11KN
- 此场景不支持反例:BHDMK vs B1DKN
注:需要广播的值和不需要广播的值:

- 如果A和B在对应维度轴上的两个值,一个为1,另一个为非1,那么1就是需要广播的值,非1就是不需要广播的值;
- 如果A和B在对应维度轴上的两个值相等,那么这两个值都是不需要广播的值(如HDMK vs H1KN,1是需要广播的值,H是不需要广播的值)。
type约束:仅支持float类型。
UpsampleBPU加速输入featuremap需为四维NCHW,并且只支持在H和W维度上进行resize;
放大系数factor不能同时小于2。
ROIPoolingCPU计算不支持
PSROIPoolingCPU计算不支持

RDK X5支持的ONNX算子列表

ONNX算子名称CPU计算/BPU加速X5 BPU支持约束CPU支持约束
AbsBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束:仅支持float类型。
AcosBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束支持float和double类型。
AcoshBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束支持float和double类型。
AddBPU加速1. 该算子支持int16输入输出。
2. 输入类型支持featurmap和常量,且最多支持一个常量输入。
3. 支持所有维度的广播,支持两个输入之间的互相广播,例如NH1C和N1WC。
4. 输入输出维度支持1-10维,大小为一般限制(见备注)。支持两个输入维度不同,输入大于4维时可通过合并相邻维度降维到4维(包括N),合并规则是:
(1)将输出dim为1的维度去除,例如[1, 2, 3, 4] [1, 2, 1, 4]->[1, 2, 3, 4]可看为[2, 3, 4],[2, 1, 4]->[2, 3,4]。
(2)相邻的非广播维度可以合并,如[2, 5, 4, 5, 3] [2, 5, 1, 5, 3], 2, 5可以合并。
(3)相邻的同一Tensor的广播维度可以合并: 如[2, 5, 4, 5, 2] [1, 1, 1, 5, 2] 2,5,4可以合并。
(4)广播维度不能和相邻非广播维度合并:如[2, 5, 4, 5, 2] [2, 1, 4, 1, 2]不能合并;非同一Tensor的广播维度不能合并 [2, 1, 4, 1, 2] [1, 5, 1, 5, 1]。
5. 作为resnet中的short-cut子结构的Add,会被融合到上一个conv中加速计算。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是8。
AndCPU计算--- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是8。
ArgMaxBPU加速1. 输入维度为四维输入NCHW。
2. N ∈ [1, 4096],H,W ∈ [1, 65536] ,C ∈ [1, 8191]。
3. 该算子支持int16输入输出。
4. 仅支持沿C维度进行argmax/argmin,即axis=1。
type约束:仅支持float类型。
ArgMinBPU加速1. 输入维度为四维输入NCHW。
2. N ∈ [1, 4096],H,W ∈ [1, 65536] ,C ∈ [1, 8191]。
3. 该算子支持int16输入输出。
4. 仅支持沿C维度进行argmax/argmin,即axis=1。
type约束:仅支持float类型。
AsinBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维。
type约束支持float和double类型。
AsinhBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维。
type约束支持float和double类型。
AtanBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维。
type约束支持float和double类型。
AtanhBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维。
type约束支持float和double类型。
AveragePoolBPU加速kernel: H,W ∈ [1, 256]
H * W <= 8192 ,H * W > 1
stride: H,W ∈ [1, 256]< br/>padding: H,W ∈ [0, 255]
输入和输出支持4维和5维。
BatchNormalizationBPU加速无限制。type约束:仅支持float类型。
支持第1个维度是channel的数据排布方式计算。
BitShiftCPU计算※----
CastCPU计算--from_type支持double, float, bool, int64, uint32, int32, uint16, int16, uint8, int8。
to_type支持double, float, bool, int64, uint32, int32, uint16, int16, uint8, int8。
CeilBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束支持double类型和float类型。
ClipBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
opset6:
min, max作为属性值,dtype仅支持float类型;
opset11:
min, max作为输入,仅有两个输入时,第二个为min;dtype支持float, double类型。
CompressCPU计算※----
ConcatBPU加速1. 该算子支持int16输入输出。
2. 不支持N维度concat。
--
ConcatFromSequenceCPU计算※----
ConstantBPU加速会通过常量折叠将其优化为数值存储目前不支持sparse_tensor属性。
ConstantOfShapeBPU加速会通过常量折叠将其优化为数值存储type约束支持:float,int32,int8。
ConvBPU加速支持四维输入(conv2d)和五维输入(conv3d)。
四维输入(conv2d):
Kernel shape范围:N,C ∈ [1, 8192]; H,W ∈ [1, 31]。C * H * W < = 32767。
输入输出Channel取值范围(one group) <= 8192,如果Conv是量化子图的最后一个算子,取值范围<= 65536。
stride取值范围:H,W ∈ [1, 256],但对于Conv后接Add(resnet shortcut-connecting) Stride取值范围为:2,对dilated>1的conv,stride只支持=1。
Dilation取值范围:H,W∈ [1, 16],H或W大于1时,只支持输出int8,且输入Tensor的H必须能被dilation的H整除,输入Tensor的W必须能被dilation的W整除。
padding取值范围:H,W ∈ [0, 256]。
五维输入(conv3d):
输入大小NCDHW:N ∈ [1, 128]; H,W,D,C ∈ [1, 65536]。
kernel大小NCDHW:N,C ∈ [1, 65536]; H,W ∈ [1, 31], D ∈ [1, 8191]。
padding大小DHW:H,W ∈ [0, 256], D ∈ [0, kernel_d/2]。
stride取值范围:H, W同为1或H, W同为2。
group,dilation暂不支持。
Size: 1G bytes;当D * C > 4096时, H * alignCeil(W, 256) * D * C < 1G。
weight的D * 输入的C <= 8192。
支持conv1d、conv2d、conv3d。
type约束支持:float,int32,int8。
auto_pad属性不支持。
pads属性约束:
- conv1d: [Dstart,Dend],pads长度等于2,并且Dstart = Dend。
- conv2d:[Hstart,Wstart,Hend,Wend],pads长度等于4 ,并且Hstart==Hend,Wstart==Wend。
- conv3d:[Dstart,Hstart,Wstart,Dend,Hend,Wend],pads长度等于6 ,并且Dstart = Dend,Hstart==Hend,Wstart==Wend。
ConvIntegerCPU计算※----
ConvTransposeBPU加速输入输出featuremap大小限制:
N ∈ [1, 128]。
H,W ∈ [1, 65536]。
C ∈ [1, 2048] 。
Size: 1G bytes。
weight大小限制:
N,C ∈ [1, 2048]。
H,W ∈ [1, 14]且HW不同时为1。
Size:
psh = padding.h % stride.h;
psw = padding.w % stride.w;
ksh = (kernel.h - 1 + psh) / stride.h +1
ksw = (kernel.w - 1 + psw) / stride.w + 1
group_num = fout.c / kernel.c
ksc = fin.c / group_num
kernel_size = ksh * ksw * ksc
kernel_size ∈ [1, 32767]
padding取值范围:
stride为奇数时,H,W ∈ [0, kernel / stride)。
stride为偶数,H,W ∈ [0, kernel / stride]。
out_pad取值范围:H,W ∈ 1
stride >= 1 && stride <=14 但不支持stride_h和stride_w同时等于1。
Dilation ∈ 1
shape约束:仅支持4维Tensor计算。
type约束:仅支持float类型。
attribute约束:
- 仅支持dilations、group、output_padding、 pads 、strides 属性。
- pads属性约束:[hstart, wstart, hend, wend]必须满足(hstart==hend and wstart==wend)。
CosBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束支持float类型。
CoshBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束支持float类型。
CumSumCPU计算--axis:type约束仅支持int32类型。
DepthToSpaceBPU加速该算子支持int16输入输出。
支持mode=DCR 和 mode=CRD。
仅支持H和W方向的重新排列,并且仅支持blocksize=2的重排列。
举例:NxCxHxW -> Nx(C/4)x(2H)x(2W) 输出的channel必须是4的倍数。
from_type支持:
- type约束仅支持float类型。
- 仅支持4维度Tensor计算。
to_type支持:
- type约束仅支持float类型。
- 仅支持4维度Tensor计算。
DequantizeLinearCPU计算----
DetCPU计算※----
DivBPU加速对input shape的约束请参考Mul算子。- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是8。
DropoutBPU加速该算子推理阶段不参加计算, 会被移除优化--
EinsumCPU计算※----
EluBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束:仅支持float类型。
EqualBPU加速1. 该算子支持int16输入。
2. 支持所有维度的广播,支持fin0或fin1其中一个输入的广播,不能支持互相广播。
3. 输入输出维度支持1-10维,大小为一般限制(见备注)。输入大于4维时可通过合并相邻维度降维到4维(包括N),合并规则是:
(1)将输出dim为1的维度去除,例如[1, 2, 3, 4] [1, 2, 1, 4]->[1, 2, 3, 4]可看为[2, 3, 4],[2, 1, 4]->[2, 3,4]。
(2)相邻的非广播维度可以合并,如[2, 5, 4, 5, 3] [2, 5, 1, 5, 3], 2, 5可以合并。
(3)相邻的同一Tensor的广播维度可以合并: 如[2, 5, 4, 5, 2] [1, 1, 1, 5, 2] 2,5,4可以合并。
(4)广播维度不能和相邻非广播维度合并:如[2, 5, 4, 5, 2] [2, 1, 4, 1, 2]不能合并。
4. 默认运行在CPU上,可以通过run_on_bpu指定该节点将其运行在BPU上。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是8。
ErfBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束:支持float数据类型。
ExpBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束:仅支持float类型。
ExpandBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,输入与输出仅支持有一个维度上的数值不同。
3. 输入与输出仅允许有一个维度上数值不同。
--
EyeLikeCPU计算----
FlattenBPU加速限制条件等同于Reshape。--
FloorBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束:仅支持float类型。
GRUCPU计算--- direction属性仅支持forward类型。
- type约束:仅支持float类型。
GatherBPU加速1. input/output/indices 的rank都要小于等于4。
2. indices支持:
- indices是feature(其他op输出)时,type约束仅支持int32类型。
- indices是weight(模型保存的常量)时,type约束支持int32和int64类型。
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。
GatherElementsBPU加速1. 该算子支持int16输入输出。
2. input/indices/output维度支持1-10维。
3. 当输入维度 i != axis时,要求indices.shape[i] <= input.shape[i]。
--
GatherNDCPU计算--from_type支持:
- input:type约束支持float,int32,int8。
- indices:tensor(int64)。
to_type支持:type约束支持float,int32,int8。
GemmBPU加速Gemm将被转化为Conv实现,边界约束参考Conv。type约束:仅支持float类型。
GlobalAveragePoolBPU加速无限制。- type约束:仅支持float类型。
- 仅支持四维Tensor。
GlobalLpPoolCPU计算--- type约束:支持float和double类型。
- 仅支持四维Tensor计算。
GlobalMaxPoolBPU加速H, W ∈ [1, 256]。- type约束仅支持float类型。
- 仅支持四维Tensor。
GreaterBPU加速1. 该算子支持int16输入。
2. 支持所有维度的广播,支持fin0或fin1其中一个输入的广播,不能支持互相广播。
3. 输入输出维度支持1-10维,大小为一般限制(见备注)。输入大于4维时可通过合并相邻维度降维到4维(包括N),合并规则是:
(1)将输出dim为1的维度去除,例如[1, 2, 3, 4] [1, 2, 1, 4]->[1, 2, 3, 4]可看为[2, 3, 4],[2, 1, 4]->[2, 3,4]。
(2)相邻的非广播维度可以合并,如[2, 5, 4, 5, 3] [2, 5, 1, 5, 3], 2, 5可以合并。
(3)相邻的同一Tensor的广播维度可以合并:如[2, 5, 4, 5, 2] [1, 1, 1, 5, 2] 2,5,4可以合并。
(4)广播维度不能和相邻非广播维度合并:如[2, 5, 4, 5, 2] [2, 1, 4, 1, 2]不能合并。
4. 默认运行在CPU上,可以通过run_on_bpu指定该节点将其运行在BPU上。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是8。
HardSigmoidBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束仅支持float类型。
HardmaxCPU计算※----
IdentityCPU计算----
IfCPU计算※----
InstanceNormalizationCPU计算--- type约束仅支持float类型。
- 支持第1个维度是channel的数据排布方式计算。
IsInfCPU计算※----
IsNaNCPU计算※----
LRNCPU计算--- type约束仅支持float类型。
- 仅支持四维Tensor。
LSTMBPU加速仅支持batch_size=1,如果需要配置多batch,需要在导出onnx时保证LSTM的batch为1并在yaml中配置参数input_batch=1。- type约束仅支持float类型。
- 属性约束:direction属性仅支持forward。
- 输入约束:
- 支持X、W、R输入配置;
- 支持X、W、R、B输入配置(sequence_lens为空或默认值);
- 支持X、W、R、B、sequence_lens、initial_h、initial_c、P输入配置(sequence_lens为空或者默认值)。
LeakyReluBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束:仅支持float类型。
LessBPU加速1. 该算子支持int16输入。
2. 支持所有维度的广播,支持fin0或fin1其中一个输入的广播,不能支持互相广播。
3. 输入输出维度支持1-10维,大小为一般限制(见备注)。输入大于4维时可通过合并相邻维度降维到4维(包括N),合并规则是:
(1)将输出dim为1的维度去除,例如[1, 2, 3, 4] [1, 2, 1, 4]->[1, 2, 3, 4]可看为[2, 3, 4],[2, 1, 4]->[2, 3,4]。
(2)相邻的非广播维度可以合并,如[2, 5, 4, 5, 3] [2, 5, 1, 5, 3], 2, 5可以合并。
(3)相邻的同一Tensor的广播维度可以合并:如[2, 5, 4, 5, 2] [1, 1, 1, 5, 2] 2,5,4可以合并。
(4)广播维度不能和相邻非广播维度合并:如[2, 5, 4, 5, 2] [2, 1, 4, 1, 2]不能合并。
4. 默认运行在CPU上,可以通过run_on_bpu指定该节点将其运行在BPU上。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是8。
LessOrEqualBPU加速opset11 不支持单个LessOrEqual算子,支持拆分后的算子Greater+Not运行在BPU上,限制条件与Greater相同。- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是8。
LogBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束:仅支持float类型。
LogSoftmaxCPU计算--type约束:仅支持float类型。
LoopCPU计算※----
LpNormalizationCPU计算--- p范数仅支持1或者2。
- type约束支持float类型。
LpPoolCPU计算--- auto_pad属性不支持。
- type约束支持float类型。
- 仅支持4维计算。
MatMulIntegerCPU计算※----
MatMulBPU加速C = MatMul(A,B),对输入A和输入B有以下维度限制:
- A和B均支持非四维输入但需满足约束:
- A和B的维度必须相同。
- A和B的最低两个维度M, K∈[1, 8192],其他更高维度∈[1, 4096]。
注:HDMK vs HDKN,MK/KN即为最低两个维度。
- 支持的broadcast需满足以下条件:
- A跟B两个输入,除开最低两维的其他维度全是1或者全是不需要广播的值。
- 此场景支持的例子:HDMK vs H1KN
- 此场景不支持反例:H1MK vs 1DKN
- A除了最低两个维度,其他维度不能即有需要广播的值也有不需要广播的值。
- 此场景支持的例子:11MK vs HDKN
- 此场景不支持反例:H1MK vs HDKN
- B除了最低两个维度,如果其他维度即有需要广播的值也有不需要广播的值,那么不需要广播的值只能在连续的高维度上。
- 此场景支持的例子:BHDMK vs B11KN
- 此场景不支持反例:BHDMK vs B1DKN
注:需要广播的值和不需要广播的值:
- 如果A和B在对应维度轴上的两个值,一个为1,另一个为非1,那么1就是需要广播的值,非1就是不需要广播的值;
- 如果A和B在对应维度轴上的两个值相等,那么这两个值都是不需要广播的值(如HDMK vs H1KN,1是需要广播的值,H是不需要广播的值)
type约束:仅支持float类型。
MaxBPU加速1.该算子支持int16输入输出。
2.支持所有维度的广播,支持两个输入之间的互相广播,例如NH1C和N1WC。
3.输入输出维度支持1-10维,大小为一般限制(见备注)。支持两个输入维度不同,输入大于4维时可通过合并相邻维度降维到4维(包括N),合并规则是:
(1)将输出dim为1的维度去除,例如[1, 2, 3, 4] [1, 2, 1, 4]->[1, 2, 3, 4]可看为[2, 3, 4],[2, 1, 4]->[2, 3,4]。
(2)相邻的非广播维度可以合并,如[2, 5, 4, 5, 3] [2, 5, 1, 5, 3], 2, 5可以合并。
(3)相邻的同一Tensor的广播维度可以合并:如[2, 5, 4, 5, 2] [1, 1, 1, 5, 2] 2,5,4可以合并。
(4)广播维度不能和相邻非广播维度合并:如[2, 5, 4, 5, 2] [2, 1, 4, 1, 2]不能合并;非同一Tensor的广播维度不能合并 [2, 1, 4, 1, 2] [1, 5, 1, 5, 1]。
- 支持1-∞个输入。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是8。
MaxPoolBPU加速该算子支持int16输入输出。
kernel <= 256。
stride <= 256。
padding <= 256。
MaxPool不支持dilation。
1. dilation只支持1x1。
2. 只支持数据行优先存储。
3. auto_pad属性不支持。
4. storage_order属性不支持。
5. 输入和输出支持4维和5维。
MaxRoiPoolCPU计算--
MeanCPU计算※----
MinBPU加速1.该算子支持int16输入输出。
2.支持所有维度的广播,支持两个输入之间的互相广播,例如NH1C和N1WC。
3.输入输出维度支持1-10维,大小为一般限制(见备注)。支持两个输入维度不同,输入大于4维时可通过合并相邻维度降维到4维(包括N),合并规则是:
(1)将输出dim为1的维度去除,例如[1, 2, 3, 4] [1, 2, 1, 4]->[1, 2, 3, 4]可看为[2, 3, 4],[2, 1, 4]->[2, 3,4]。
(2)相邻的非广播维度可以合并,如[2, 5, 4, 5, 3] [2, 5, 1, 5, 3], 2, 5可以合并。
(3)相邻的同一Tensor的广播维度可以合并:如[2, 5, 4, 5, 2] [1, 1, 1, 5, 2] 2,5,4可以合并。
(4)广播维度不能和相邻非广播维度合并:如[2, 5, 4, 5, 2] [2, 1, 4, 1, 2]不能合并;非同一Tensor的广播维度不能合并 [2, 1, 4, 1, 2] [1, 5, 1, 5, 1]。
4. 默认运行在CPU上,可以通过run_on_bpu指定该节点将其运行在BPU上。
- 支持1-∞个输入。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是8。
ModCPU计算----
MulBPU加速1. 该算子支持int16输入输出。
2.输入类型支持featurmap和常量,且最多支持一个常量输入。
3. 支持所有维度的广播,支持两个输入之间的互相广播,例如NH1C和N1WC。
4. 输入输出维度支持1-10维,大小为一般限制(见备注)。支持两个输入维度不同,输入大于4维时可通过合并相邻维度降维到4维(包括N),合并规则是:
(1)将输出dim为1的维度去除,例如[1, 2, 3, 4] [1, 2, 1, 4]->[1, 2, 3, 4]可看为[2, 3, 4],[2, 1, 4]->[2, 3,4]。
(2)相邻的非广播维度可以合并,如[2, 5, 4, 5, 3] [2, 5, 1, 5, 3], 2, 5可以合并。
(3)相邻的同一Tensor的广播维度可以合并: 如[2, 5, 4, 5, 2] [1, 1, 1, 5, 2] 2,5,4可以合并。
(4)广播维度不能和相邻非广播维度合并:如[2, 5, 4, 5, 2] [2, 1, 4, 1, 2]不能合并;非同一Tensor的广播维度不能合并 [2, 1, 4, 1, 2] [1, 5, 1, 5, 1]。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是8。
MultinomialCPU计算※----
NegCPU计算----
NotCPU计算----
OneHotCPU计算----
OrCPU计算--- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是8。
PReluBPU加速1. 该算子仅支持int8输入输出。
2. 输入输出仅支持4维。
- 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。
PadBPU加速1. 该算子支持int16输入输出。
2. 支持mode = Constant。
3. 支持所有维度的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维,仅支持2/3维度填充。
- 输入和输出支持5维,仅支持2/3/4维度填充。
PowBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
3. 第二个输入只支持标量。
- type约束支持:double, float,int64, int32。
- 支持相同输入shape的计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
- 仅支持X和Y相同type。
QLinearConvCPU计算※----
QLinearMatMulCPU计算※----
QuantizeLinearCPU计算----
RNNCPU计算--- type约束:仅支持float类型。
- 属性约束:direction属性仅支持forward。
- 输入约束:仅支持X、W、R输入,不支持可选输入B、sequence_lens、initial_h设置。
- 输出约束:仅支持Y_h的输出,shape [num_directions, batch_size, hidden_size]。
RandomNormalCPU计算※----
RandomNormalLikeCPU计算※----
RandomUniformCPU计算----
RandomUniformLikeCPU计算----
RangeCPU计算--type约束支持:float,int64,int32,int16。
ReciprocalBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
--
ReduceL1CPU计算----
ReduceL2CPU计算----
ReduceLogSumCPU计算----
ReduceLogSumExpCPU计算--type约束支持float、double数据类型。
ReduceMaxBPU加速1. 该算子支持int16输入输出。
2. 输入支持2-5维,需要指定axes属性,指定的axes数量为1,不支持沿大于1个维度进行reduce操作。
3. reduce维度对应的轴的size ∈ [1, 8192]。
4. 仅支持keepdims == 1。
axes支持0, 1或者等于输入数据的维数
ReduceMeanBPU加速1. 该算子支持int16输入输出。
2. 输入支持2-5维,需要指定axes属性,指定的axes数量为1,不支持沿大于1个维度进行reduce操作。
3. 当reduce维度=2时,支持同时沿HW维度进行reduce。
4. 仅支持keepdims == 1。
axes支持0, 1或者等于输入数据的维数
ReduceMinCPU计算----
ReduceProdCPU计算----
ReduceSumBPU加速1. 该算子支持int16输入输出。
2. 输入支持2-5维,需要指定axes属性,指定的axes数量为1,不支持沿大于1个维度进行reduce操作。
axes支持0, 1或者等于输入数据的维数
ReduceSumSquareCPU计算--axes支持0, 1或者等于输入数据的维数
ReluBPU加速无限制type约束:仅支持float类型。
ReshapeBPU加速1. 该算子支持int16输入输出。
2. 支持1-10维输入输出。
--
ResizeBPU加速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属性不支持。
ReverseSequenceCPU计算----
RoiAlignCPU计算----
RoundBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维。
--
ScanCPU计算※----
Scatter (deprecated)CPU计算※----
ScatterElementsCPU计算--from_type支持:
- data:type约束支持:float,int32,int8。
- indices:type约束仅支持int32类型。
- updates:type约束支持:float,int32,int8。
to_type支持:type约束支持:float,int32,int8。
ScatterNDCPU计算--from_type支持:
- data:type约束支持:float,int32,int8。
- updates : type约束支持:float,int32,int8。
to_type支持:type约束支持:float,int32,int8。
SeluBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维。
type约束:仅支持float类型。
SequenceAtCPU计算※----
SequenceConstructCPU计算※----
SequenceEmptyCPU计算※----
SequenceEraseCPU计算※----
SequenceInsertCPU计算※----
SequenceLengthCPU计算※----
ShapeBPU加速会通过常量折叠将其优化为数值存储--
ShrinkCPU计算※----
SigmoidBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束:仅支持float类型。
SignBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束:仅支持float类型。
SinBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束支持float和double类型。
SinhBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束支持float类型。
SizeBPU加速会通过常量折叠将其优化为数值存储--
SliceBPU加速1. 该算子支持int16输入输出。
2. 无限制,支持非四维输入输出。
SoftmaxBPU加速- 该算子支持int16输入输出。
- 默认运行在CPU上,由于onnx::softmax和pytorch::softmax计算存在区别,分以下两种情况:
1. 对于onnx::softmax,当该op输入为四维并且axis=3时,可以通过run_on_bpu指定该节点将其运行在BPU上。
2. 对于pytorch::softmax, 当该op输入为四维并且axis=1,2,3时,可以通过run_on_bpu指定该节点将其运行在BPU上。
type约束:仅支持float类型。
SoftplusBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束:仅支持float类型。
SoftsignBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束:仅支持float类型。
SpaceToDepthBPU加速1. 该算子支持int16输入输出。
2. 支持mode=DCR 和 mode=CRD。
仅支持H和W方向的重新排列,并且仅支持blocksize=2的重排列。
举例:NxCxHxW -> Nx(4C)x(H/2)x(W/2)
type约束:仅支持float类型。
SplitBPU加速1. 该算子支持int16输入输出。
2. 原始输入的长度必须是每个被切分的tensor长度的倍数。
3. 支持除N维度以外的任意维度。
4. split数应可以整除。
5. 支持非四维输入输出。
type约束:仅支持float类型。
SplitToSequenceCPU计算※----
SqrtBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束:仅支持float类型。
SqueezeBPU加速该op会被转换成Reshape,BPU约束详见Reshape op。--
StringNormalizerCPU计算※----
SubBPU加速1. 该算子支持int16输入输出。
2. 输入类型支持featurmap和常量,且最多支持一个常量输入。
3. 支持所有维度的广播,支持两个输入之间的互相广播,例如NH1C和N1WC。
4. 输入输出维度支持1-10维,大小为一般限制(见备注)。支持两个输入维度不同,输入大于4维时可通过合并相邻维度降维到4维(包括N),合并规则是:
(1)将输出dim为1的维度去除,例如[1, 2, 3, 4] [1, 2, 1, 4]->[1, 2, 3, 4]可看为[2, 3, 4],[2, 1, 4]->[2, 3,4]。
(2)相邻的非广播维度可以合并,如[2, 5, 4, 5, 3] [2, 5, 1, 5, 3], 2, 5可以合并。
(3)相邻的同一Tensor的广播维度可以合并: 如[2, 5, 4, 5, 2] [1, 1, 1, 5, 2] 2,5,4可以合并。
(4)广播维度不能和相邻非广播维度合并:如[2, 5, 4, 5, 2] [2, 1, 4, 1, 2]不能合并;非同一Tensor的广播维度不能合并 [2, 1, 4, 1, 2] [1, 5, 1, 5, 1]。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是8。
SumBPU加速限制条件等同于Addtype约束:仅支持float类型。
TanBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束:支持float类型。
TanhBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维
type约束:仅支持float类型。
TfIdfVectorizerCPU计算※----
ThresholdedReluCPU计算--type约束:仅支持float类型。
TileBPU加速1. 该算子支持int16输入输出。
2. 输入与输出仅允许有一个维度上数值不同。
type约束:仅支持float,int64,int32,uint64,uint32类型。
TopKBPU加速1. 该算子支持int16输入输出。
2. input/indices/output维度支持1-10维。
3. indices type约束支持int16/int32/int64。
4. 参数sorted只支持true。
- type约束:仅支持float类型。
TransposeBPU加速1. 该算子支持int16输入输出。
2. 支持任意输入维度。
- 支持nhwc2nchw,perm:[0, 3, 1, 2]。
- 支持nchw2nhwc,perm:[0, 2, 3, 1]。
- 支持指定perm维度转换,数据类型仅支持float,int8,int32。
UniqueCPU计算※----
UnsqueezeBPU加速该op会被转换成Reshape,BPU约束详见Reshape 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属性不支持。
WhereCPU计算--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)。
XorCPU计算※----
FunctionCPU计算※----
CeluCPU计算※----
DynamicQuantizeLinearCPU计算※----
GreaterOrEqualBPU加速opset11 不支持单个GreaterOrEqual算子,支持拆分后的算子Less+Not运行在BPU上,限制条件与Less相同。- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
MeanVarianceNormalizationCPU计算※----
GridSample(PyTorch)BPU加速1. 输入维度仅支持四维,第一个输入需满足N ∈ [1, 4096]; C ∈ [1, 65536]; H,W ∈ [1, 1024] 且 H * W <= 512 * 512。
2. mode只支持'bilinear'、'nearest'。
3. padding_mode只支持'zeros'、'border'。
4. 该算子为opset16的onnx算子,为在opset11支持,工具链以自定义算子的方式提供导出,导出包含该算子的onnx模型请使用horizon_nn.torch.export_onnx接口替换torch.onnx.export,接口传参相同,示例代码如下:
from horizon_nn.torch import export_onnx
...
export_onnx(...)

RDK Ultra支持的Caffe算子列表

caffe算子名称CPU计算/BPU加速RDK Ultra BPU支持约束CPU支持约束
ConvolutionBPU加速Kernel宽高限制:<=32
输入输出Channel取值范围(one group) <= 8192,如果Conv是量化子图的最后一个算子,取值范围<= 65536
stride无限制,但对于Conv后接Add(resnet shortcut-connecting) Stride取值范围为:2
Dilation取值限制:<=16
当dilation != 1时,stride只支持为1。
不支持配置axis,默认为1。
仅支持4维Conv计算。
auto_pad 属性不支持。
type约束支持:float,int32,int8。
pads属性约束:[Hstart, Wstart, Hend, Wend](pads长度等于4)并且Hstart==Hend,Wstart==Wend。
DeconvolutionBPU加速kernel >= stride。
输入输出featuremap大小 <= 2048
pad <= kernel / stride
out_pad < 2
stride >= 1 && stride <=14 但不支持stride_h和stride_w同时等于1。
不支持配置axis属性。
shape约束:仅支持4维Tensor计算。
type约束:仅支持float类型。
attribute约束:
- 仅支持dilations、group、output_padding、 pads 、strides 属性。
- pads属性约束:[hstart, wstart, hend, wend]必须满足(hstart==hend and wstart==wend)。
MaxUnpoolCPU计算---from_type支持:
- X:type约束:仅支持float类型。
- I:Tensor(int64)。
to_type支持:type约束:仅支持float类型。
PoolingBPU加速共有四种Pooling算子即MaxPooling,AveragePooling,GlobalMaxPooling,GlobalAveragePooling。
对四种Pooling的约束分别为:
MaxPooling:
该算子支持int16输入输出。
kernel <= 256;stride <= 256;padding <= 256
MaxPooling不支持dilation。
AveragePooling:
kernel <= 256; stride <= 256;padding <= 256
GlobalAveragePooling:
无限制。
GlobalMaxPooling:
H, W ∈ [1, 256]。
SPPCPU计算不支持支持pyramid_height,2^n 次pooling, n<7;
pooling kernel 小于等于 255;
支持pool,配置可选值为{0,1}
InnerProductBPU加速InnerProduct将被转化为Conv实现,边界约束参考Conv。
假不支持配置axis属性。
LRNCPU计算不支持local_size 支持。
alpha支持。
beta 支持。
norm_region 支持,配置可选值{ACROSS_CHANNELS, WITHIN_CHANNEL }
k 支持。
MVNCPU计算不支持normalize_variance支持,配置可选值为1
across_channels支持,配置可选值为1
仅支持Float32类型的计算。
BatchNormBPU加速无限制
ELUBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
BNLLCPU计算不支持
PReLUCPU计算不支持- 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。
ReLU/LeakyReluBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
SigmoidBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
TanHBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
EltwiseBPU加速目前支持的operation包括Add、Sub、Mul。
1. 该算子支持int16输入输出。
2. 输入类型支持featurmap和常量,且最多支持一个常量输入;
3. 支持除第一维外的广播,支持两个输入之间的互相广播,例如NH1C和N1WC;
4. 输入输出维度支持2维、3维、4维和5维,大小为一般限制(见备注)。支持两个输入维度不同,输入为5维时需要满足以下限制:
(1)首先可以通过合并相邻维度降维到4维,例如NHWD1和N1WDC可以合并W维和D维来降维;
(2)其次广播的维度不能和相邻维度合并,例如NHWD1和N11DC因为H维、W维和C维都是广播的维度,无法通过合并相邻维度降维,所以无法支持。
BiasBPU加速参考Eltwise等于Add的情况
ScaleBPU加速参考Eltwise等于Mul的情况
AbsValBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
ExpBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
LogBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
PowerBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
3. 第二个输入只支持标量。
ThresholdCPU计算不支持
ReductionCPU计算不支持operation 支持 SUM、ASUM、 SUMSQ、MEAN、Max、LogSum、Min、Prod;
axis 支持;
仅支持Float32类型的计算。
SoftmaxBPU加速1. 该算子支持int16输入输出。
2. 默认运行在CPU上,当该op输入为四维并且axis=1,2,3时,可以通过run_on_bpu指定该节点将其运行在BPU上。
ArgMaxBPU加速1. 仅支持 axis=1,c<=64
2. 不支持配置top_k != 1。
3. 该算子支持int16输入输出。
ConcatBPU加速1. 该算子支持int16输入输出。
2. 不支持N维度concat。
SplitBPU加速1. 该算子支持int16输入输出。
2. 原始输入的长度必须是每个被切分的tensor长度的倍数。
3. 支持除N维度以外的任意维度。
4. split数应可以整除。
5. 支持非四维输入输出。
SliceBPU加速1. 该算子支持int16输入输出。
2. 无限制,支持非四维输入输出。
ReshapeBPU加速1. 该算子支持int16输入输出。
2. 支持1-10维输入输出。
shape 支持[1,4]个 shape_dim 配置 ;
axis 支持[-4,3]范围内可配,不支 持 N 维度,默认值 0,遵循 caffe 规则 ;
num_axes 支持[-1,3]范围内可配,默认 值-1 表示对 axis 起始的所有 轴进行变换
FlattenCPU计算不支持(一些场景下可以融合)axis 取值范围[-4,3],默认值 为 1,-4 与 0 含义相同。
只支持End_axis == -1。
CropCPU计算不支持
DropoutBPU加速无限制
LSTMBPU加速仅支持batch=1--
NormalizeCPU计算不支持type约束:仅支持float类型。
PassThroughBPU加速支持mode=DCR 和 mode=CRD。
仅支持H和W方向的重新排列,并且仅支持blocksize=2的重排列。
举例:NxCxHxW -> Nx(4C)x(H/2)x(W/2)。
type约束:仅支持float类型。
CReLUCPU计算不支持type约束:仅支持float类型。
RReLUCPU计算不支持
PermuteBPU加速1. 支持任意输入维度。
2. 除batch维度(第一维)以外,支持任意其它维度的转换。
- 支持nhwc2nchw,perm:[0, 3, 1, 2]。
- 支持nchw2nhwc,perm:[0, 2, 3, 1]。
- 支持指定perm维度转换,数据类型仅支持float,int8,int32。
MatMulBPU加速C = MatMul(A,B),对输入A和输入B有以下维度限制:
- A和B均支持非四维输入但需满足约束:
- A和B的维度必须相同。
- A和B的最低两个维度M, K ∈ [1, 8192],其他更高维度∈[1, 4096]。
注:HDMK vs HDKN,MK/KN即为最低两个维度。
- 支持的broadcast需满足以下条件:
- A 跟B两个输入,除开最低两维的其他维度全是1或者全是不需要广播的值。
- 此场景支持的例子:HDMK vs H1KN
- 此场景不支持反例:H1MK vs 1DKN
- A除了最低两个维度,其他维度不能即有需要广播的值也有不需要广播的值。
- 此场景支持的例子:11MK vs HDKN
- 此场景不支持反例:H1MK vs HDKN
- B除了最低两个维度,如果其他维度即有需要广播的值也有不需要广播的值,那么不需要广播的值只能在连续的高维度上。
- 此场景支持的例子:BHDMK vs B11KN
- 此场景不支持反例:BHDMK vs B1DKN
注:需要广播的值和不需要广播的值:

- 如果A和B在对应维度轴上的两个值,一个为1,另一个为非1,那么1就是需要广播的值,非1就是不需要广播的值;
- 如果A和B在对应维度轴上的两个值相等,那么这两个值都是不需要广播的值(如HDMK vs H1KN,1是需要广播的值,H是不需要广播的值)。
type约束:仅支持float类型。
UpsampleBPU加速输入featuremap需为四维NCHW,并且只支持在H和W维度上进行resize;
放大系数factor不能同时小于2。
ROIPoolingCPU计算不支持
PSROIPoolingCPU计算不支持

RDK Ultra支持的ONNX算子列表

ONNX算子名称CPU计算/BPU加速RDK Ultra BPU支持约束CPU支持约束
AbsBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
type约束:仅支持float类型。
AcosCPU计算--type约束:仅支持float类型。
AcoshCPU计算--type约束:仅支持float类型。
AddBPU加速1. 该算子支持int16输入输出。
2. 输入类型支持featurmap和常量,且最多支持一个常量输入。
3. 支持除第一维外的广播,支持两个输入之间的互相广播,例如NH1C和N1WC。
4. 输入输出维度支持2维、3维、4维和5维,大小为一般限制(见备注)。支持两个输入维度不同,输入为5维时需要满足以下限制:
(1)首先可以通过合并相邻维度降维到4维,例如NHWD1和N1WDC可以合并W维和D维来降维;
(2)其次广播的维度不能和相邻维度合并,例如NHWD1和N11DC因为H维、W维和C维都是广播的维度,无法通过合并相邻维度降维,所以无法支持。
5. 作为resnet中的short-cut子结构的Add,会被融合到上一个conv中加速计算。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
AndCPU计算--- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
ArgMaxBPU加速1. 输入维度为四维输入NCHW。
2. 仅支持沿C维度进行argmax,即axis=1。
3. C <= 64
4. 该算子支持int16输入输出。
type约束:仅支持float类型。
ArgMinBPU加速1. 输入维度为四维输入NCHW。
2. 仅支持沿C维度进行argmax,即axis=1。
3. C <= 64
4. 该算子支持int16输入输出。
type约束:仅支持float类型。
AsinCPU计算--type约束:仅支持float类型。
AsinhCPU计算--type约束:仅支持float类型。
AtanBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
type约束:仅支持float类型。
AtanhCPU计算--type约束:仅支持float类型。
AveragePoolBPU加速kernel <= 256
stride <= 256
padding <= 256
auto_pad 属性不支持。
仅支持四维Tensor计算。
BatchNormalizationBPU加速无限制。type约束:仅支持float类型。
支持第1个维度是channel的数据排布方式计算。
BitShiftCPU计算※----
CastCPU计算--from_type支持double, float, bool, int64, uint32, int32, uint16, int16, uint8, int8。
to_type支持double, float, bool, int64, uint32, int32, uint16, int16, uint8, int8。
CeilBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
type约束:仅支持float类型。
ClipBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
opset6:
min, max作为属性值,dtype仅支持float类型;
opset11:
min, max作为输入,仅有两个输入时,第二个为min;dtype支持float, double类型。
CompressCPU计算※----
ConcatBPU加速1. 该算子支持int16输入输出。
2. 不支持N维度concat。
--
ConcatFromSequenceCPU计算※----
ConstantBPU加速会通过常量折叠将其优化为数值存储目前不支持sparse_tensor属性。
ConstantOfShapeBPU加速会通过常量折叠将其优化为数值存储type约束支持:float,int32,int8。
ConvBPU加速支持四维输入(conv2d)和五维输入(conv3d)。
四维输入(conv2d):
Kernel shape范围:N,C ∈ [1, 8192]; H,W ∈ [1, 31]C*H*W < = 65535
输入输出Channel取值范围 (one group) <= 8192,如果Conv是量化子图的最后一个算子,取值范围 <= 65536
stride取值范围:H,W ∈ [1, 256],但对于Conv后接Add(resnet shortcut-connecting) Stride取值范围为:{1, 2},对dilated>1的conv,stride只支持=1。
Dilation取值范围:H,W∈ [1, 16],H或W大于1时,只支持输出int8,且输入Tensor的H必须能被dilation的H整除,输入Tensor的W必须能被dilation的W整除。
padding取值范围:H,W ∈ [0, 256]
五维输入(conv3d):
输入大小NCDHW:N ∈ [1, 128]; H,W,D,C ∈ [1, 65536]
kernel大小NCDHW:N,C ∈ [1, 65536]; H,W ∈ [1, 31], D ∈ [1, 8191]
padding大小DHW:H,W ∈ [0, 256], D ∈ [0, kernel_d/2]
stride取值范围:H, W同为1或H, W同为2。
group,dilation暂不支持。
Size: 1G bytes;当 D * C > 4096时, H * alignCeil(W, 256) * D * C < 1G
weight的D * 输入的C <= 8192
仅支持4维Conv计算。
auto_pad 属性不支持。
type约束支持:float,int32,int8。
pads属性约束:[Hstart, Wstart, Hend, Wend](pads长度等于4)并且Hstart==Hend,Wstart==Wend。
ConvIntegerCPU计算※----
ConvTransposeBPU加速输入输出featuremap大小限制:
N ∈ [1, 128]。
H,W ∈ [1, 65536]。
C ∈ [1, 2048] 。
Size: 1G bytes。
weight大小限制:
N,C ∈ [1, 2048]。
H,W ∈ [1, 14]且HW不同时为1。
Size: [1, 65535]。
padding取值范围:
stride为奇数时,H,W ∈ [0, kernel / stride)
stride为偶数,H,W ∈ [0, kernel / stride]。
out_pad取值范围:H,W ∈ 1
stride >= 1 && stride <=14 但不支持stride_h和stride_w同时等于1。
Dilation ∈ {(1, 1)}
shape约束:仅支持4维Tensor计算。
type约束:仅支持float类型。
attribute约束:
- 仅支持dilations、group、output_padding、 pads 、strides 属性。
- pads属性约束:[hstart, wstart, hend, wend]必须满足(hstart==hend and wstart==wend)。
CosBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
type约束:仅支持float类型。
CoshCPU计算--type约束:仅支持float类型。
CumSumCPU计算--axis:type约束仅支持int32类型。
DepthToSpaceBPU加速支持mode=DCR 和 mode=CRD。
仅支持H和W方向的重新排列,并且仅支持blocksize=2的重排列。
举例:NxCxHxW -> Nx(C/4)x(2H)x(2W) 输出的channel必须是4的倍数。
from_type支持:
- type约束仅支持float类型。
- 仅支持4维度Tensor计算。
to_type支持:
- type约束仅支持float类型。
- 仅支持4维度Tensor计算。
DequantizeLinearCPU计算----
DetCPU计算※----
DivBPU加速1. 只支持两个输入均为featuremap(不支持输入来自于常量);
2. 对input shape的约束请参考Mul算子
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
DropoutBPU加速该算子推理阶段不参加计算, 会被移除优化--
EinsumCPU计算※----
EluBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
type约束:仅支持float类型。
EqualBPU加速1. 该算子支持int16输入。
2. 输入输出维度支持2-5维。
3. 支持所有维度的广播,支持fin0或fin1其中一个输入的广播,不能支持互相广播,5维广播时有以下限制:
(1)需要能够合并相邻维度降到4维(包括维度N),例如NHWDC和NH1D1可以合并NH维来降维。
(2)广播的维度不能和相邻维度合并,例如NHWDC和N1W1C因为无法合并相邻维度,所以无法支持。
4. 默认运行在CPU上,可以通过run_on_bpu指定该节点将其运行在BPU上。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
ErfCPU计算--type约束:支持float、double数据类型。
ExpBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
type约束:仅支持float类型。
ExpandBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,输入与输出仅支持有一个维度上的数值不同。
3. 输入与输出仅允许有一个维度上数值不同。
--
EyeLikeCPU计算----
FlattenBPU加速限制条件等同于Reshape。--
FloorBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
type约束:仅支持float类型。
GRUCPU计算--- direction属性仅支持forward类型。
- type约束:仅支持float类型。
GatherBPU加速1. input/output/indices 的rank都要小于等于4。
2. indices支持:
- indices是feature(其他op输出)时,type约束仅支持int32类型。
- indices是weight(模型保存的常量)时,type约束支持int32和int64类型。
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。
GatherElementsBPU加速1. 该算子支持int16输入输出。
2. input/indices/output维度支持1-10维。
3. indices type约束支持int16/int32/int64。
--
GatherNDCPU计算--from_type支持:
- input:type约束支持float,int32,int8。
- indices:tensor(int64)。
to_type支持:type约束支持float,int32,int8。
GemmBPU加速Gemm将被转化为Conv实现,边界约束参考Conv。type约束:仅支持float类型。
GlobalAveragePoolBPU加速无限制。- type约束:仅支持float类型。
- 仅支持四维Tensor。
GlobalLpPoolCPU计算--- type约束:支持float和double类型。
- 仅支持四维Tensor计算。
GlobalMaxPoolBPU加速H, W ∈ [1, 256]。- type约束仅支持float类型。
- 仅支持四维Tensor。
GreaterBPU加速1. 该算子支持int16输入。
2. 输入输出维度支持2-5维。
3. 支持所有维度的广播,支持fin0或fin1其中一个输入的广播,不能支持互相广播,5维广播时有以下限制:
(1)需要能够合并相邻维度降到4维(包括维度N),例如NHWDC和NH1D1可以合并NH维来降维。
(2)广播的维度不能和相邻维度合并,例如NHWDC和N1W1C因为无法合并相邻维度,所以无法支持。
4. 默认运行在CPU上,可以通过run_on_bpu指定该节点将其运行在BPU上。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
HardSigmoidBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
type约束仅支持float类型。
HardmaxCPU计算※----
IdentityCPU计算----
IfCPU计算※----
InstanceNormalizationCPU计算--- type约束仅支持float类型。
- 支持第1个维度是channel的数据排布方式计算。
IsInfCPU计算※----
IsNaNCPU计算※----
LRNCPU计算--- type约束仅支持float类型。
- 仅支持四维Tensor。
LSTMBPU加速仅支持batch_size=1,如果需要配置多batch,需要在导出onnx时保证LSTM的batch为1并在yaml中配置参数input_batch=1。- type约束仅支持float类型。
- 属性约束:direction属性仅支持forward。
- 输入约束:
- 支持X、W、R输入配置;
- 支持X、W、R、B输入配置(sequence_lens为空或默认值);
- 支持X、W、R、B、sequence_lens、initial_h、initial_c、P输入配置(sequence_lens为空或者默认值)。
LeakyReluBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
type约束:仅支持float类型。
LessBPU加速1. 该算子支持int16输入。
2. 输入输出维度支持2-5维。
3. 默认运行在CPU上,可以通过run_on_bpu指定该节点将其运行在BPU上。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
LessOrEqualBPU加速opset11 不支持单个LessOrEqual算子,支持拆分后的算子Greater+Not运行在BPU上,限制条件与Greater相同。- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
LogBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
type约束:仅支持float类型。
LogSoftmaxCPU计算--type约束:仅支持float类型。
LoopCPU计算※----
LpNormalizationCPU计算--- p范数仅支持1或者2。
- type约束支持double类型和float类型。
LpPoolCPU计算--- auto_pad属性不支持。
- type约束支持double类型和float类型。
- 仅支持4维计算。
MatMulIntegerCPU计算※----
MatMulBPU加速C = MatMul(A,B),对输入A和输入B有以下维度限制:
- A和B均支持非四维输入但需满足约束:
- A和B的维度必须相同。
- A和B的最低两个维度M, K∈[1, 8192],其他更高维度∈[1, 4096]。
注:HDMK vs HDKN,MK/KN即为最低两个维度。
- 支持的broadcast需满足以下条件:
- A跟B两个输入,除开最低两维的其他维度全是1或者全是不需要广播的值。
- 此场景支持的例子:HDMK vs H1KN
- 此场景不支持反例:H1MK vs 1DKN
- A除了最低两个维度,其他维度不能即有需要广播的值也有不需要广播的值。
- 此场景支持的例子:11MK vs HDKN
- 此场景不支持反例:H1MK vs HDKN
- B除了最低两个维度,如果其他维度即有需要广播的值也有不需要广播的值,那么不需要广播的值只能在连续的高维度上。
- 此场景支持的例子:BHDMK vs B11KN
- 此场景不支持反例:BHDMK vs B1DKN
注:需要广播的值和不需要广播的值:
- 如果A和B在对应维度轴上的两个值,一个为1,另一个为非1,那么1就是需要广播的值,非1就是不需要广播的值;
- 如果A和B在对应维度轴上的两个值相等,那么这两个值都是不需要广播的值(如HDMK vs H1KN,1是需要广播的值,H是不需要广播的值)
type约束:仅支持float类型。
MaxBPU加速1.该算子支持int16输入输出。
2.输入输出维度支持2-5维。
3.支持所有维度的广播,支持fin0或fin1其中一个输入的广播,不能支持互相广播,5维广播时有以下限制:
(1)需要能够合并相邻维度降到4维(包括维度N),例如NHWDC和NH1D1可以合并NH维来降维。
(2)广播的维度不能和相邻维度合并,例如NHWDC和N1W1C因为无法合并相邻维度,所以无法支持。
- 支持1-∞个输入。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
MaxPoolBPU加速该算子支持int16输入输出。
kernel <= 256
stride <= 256
padding <= 256
MaxPool不支持dilation。
1. dilation只支持1x1。
2. 只支持数据行优先存储。
3. auto_pad属性不支持。
4. storage_order属性不支持。
5.仅支持四维Tensor计算。
MaxRoiPoolCPU计算--
MeanCPU计算※----
MinBPU加速1.该算子支持int16输入输出。
2.输入输出维度支持2-5维。
3.支持所有维度的广播,支持fin0或fin1其中一个输入的广播,不能支持互相广播,5维广播时有以下限制:
(1)需要能够合并相邻维度降到4维(包括维度N),例如NHWDC和NH1D1可以合并NH维来降维。
(2)广播的维度不能和相邻维度合并,例如NHWDC和N1W1C因为无法合并相邻维度,所以无法支持。
4. 默认运行在CPU上,可以通过run_on_bpu指定该节点将其运行在BPU上。
- 支持1-∞个输入。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
ModCPU计算※----
MulBPU加速1. 该算子支持int16输入输出。
2.输入类型支持featurmap和常量,且最多支持一个常量输入。
3.支持除第一维外的广播,支持两个输入之间的互相广播,例如NH1C和N1WC。
4.输入输出维度支持2维、3维、4维和5维,大小为一般限制(见备注)。支持两个输入维度不同,输入为5维时需要满足以下限制:
(1)首先可以通过合并相邻维度降维到4维,例如NHWD1和N1WDC可以合并W维和D维来降维;
(2)其次广播的维度不能和相邻维度合并,例如NHWD1和N11DC因为H维、W维和C维都是广播的维度,无法通过合并相邻维度降维,所以无法支持。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
MultinomialCPU计算※----
NegCPU计算----
NotCPU计算----
OneHotCPU计算----
OrCPU计算--- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
PReluCPU计算--- 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。
PadBPU加速1. 该算子支持int16输入输出。
2. 支持mode = Constant。
3. 支持所有维度的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维度填充。
PowBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
3. 第二个输入只支持标量。
- type约束支持:double, float,int64, int32。
- 支持相同输入shape的计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
- 仅支持X和Y相同type。
QLinearConvCPU计算※----
QLinearMatMulCPU计算※----
QuantizeLinearCPU计算----
RNNCPU计算--- type约束:仅支持float类型。
- 属性约束:direction属性仅支持forward。
- 输入约束:仅支持X、W、R输入,不支持可选输入B、sequence_lens、initial_h设置。
- 输出约束:仅支持Y_h的输出,shape [num_directions, batch_size, hidden_size]。
RandomNormalCPU计算※----
RandomNormalLikeCPU计算※----
RandomUniformCPU计算----
RandomUniformLikeCPU计算----
RangeCPU计算--type约束支持:float,int64,int32,int16。
ReciprocalBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
--
ReduceL1CPU计算----
ReduceL2CPU计算----
ReduceLogSumCPU计算----
ReduceLogSumExpCPU计算--type约束支持float、double数据类型。
ReduceMaxBPU加速1. 该算子支持int16输入输出。
2. 输入支持2-5维,需要指定axes属性,指定的axes数量为1,不支持沿大于1个维度进行reduce操作。
3. reduce维度对应的轴的size ∈ [1, 8192]。
4. 仅支持keepdims == 1。
axes支持0, 1或者等于输入数据的维数
ReduceMeanBPU加速1. 该算子支持int16输入输出。
2. 输入支持2-5维,需要指定axes属性,指定的axes数量为1,不支持沿大于1个维度进行reduce操作。
3. 当reduce维度=2时,支持同时沿HW维度进行reduce。
4. 仅支持keepdims == 1。
axes支持0, 1或者等于输入数据的维数
ReduceMinCPU计算----
ReduceProdCPU计算----
ReduceSumBPU加速1. 该算子支持int16输入输出。
2. 输入支持2-5维,需要指定axes属性,指定的axes数量为1,不支持沿大于1个维度进行reduce操作。
axes支持0, 1或者等于输入数据的维数
ReduceSumSquareCPU计算--axes支持0, 1或者等于输入数据的维数
ReluBPU加速无限制type约束:仅支持float类型。
ReshapeBPU加速1. 该算子支持int16输入输出。
2. 支持1-10维输入输出。
--
ResizeBPU加速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属性不支持。
ReverseSequenceCPU计算----
RoiAlignCPU计算----
RoundCPU计算----
ScanCPU计算※----
Scatter (deprecated)CPU计算※----
ScatterElementsCPU计算--from_type支持:
- data:type约束支持:float,int32,int8。
- indices:type约束仅支持int32类型。
- updates:type约束支持:float,int32,int8。
to_type支持:type约束支持:float,int32,int8。
ScatterNDCPU计算--from_type支持:
- data:type约束支持:float,int32,int8。
- updates : type约束支持:float,int32,int8。
to_type支持:type约束支持:float,int32,int8。
SeluCPU计算--type约束:仅支持float类型。
SequenceAtCPU计算※----
SequenceConstructCPU计算※----
SequenceEmptyCPU计算※----
SequenceEraseCPU计算※----
SequenceInsertCPU计算※----
SequenceLengthCPU计算※----
ShapeBPU加速会通过常量折叠将其优化为数值存储--
ShrinkCPU计算※----
SigmoidBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
type约束:仅支持float类型。
SignCPU计算--type约束:仅支持float类型。
SinBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
type约束:仅支持float类型。
SinhCPU计算--type约束:仅支持float类型。
SizeBPU加速会通过常量折叠将其优化为数值存储--
SliceBPU加速1. 该算子支持int16输入输出。
2. 无限制,支持非四维输入输出。
SoftmaxBPU加速- 该算子支持int16输入输出。
- 默认运行在CPU上,由于onnx::softmax和pytorch::softmax计算存在区别,分以下两种情况:
1. 对于onnx::softmax,当该op输入为四维并且axis=3时,可以通过run_on_bpu指定该节点将其运行在BPU上。
2. 对于pytorch::softmax, 当该op输入为四维并且axis=1,2,3时,可以通过run_on_bpu指定该节点将其运行在BPU上。
type约束:仅支持float类型。
SoftplusBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
type约束:仅支持float类型。
SoftsignCPU计算--type约束:仅支持float类型。
SpaceToDepthBPU加速支持mode=DCR 和 mode=CRD。
仅支持H和W方向的重新排列,并且仅支持blocksize=2的重排列。
举例:NxCxHxW -> Nx(4C)x(H/2)x(W/2)
type约束:仅支持float类型。
SplitBPU加速1. 该算子支持int16输入输出。
2. 原始输入的长度必须是每个被切分的tensor长度的倍数。
3. 支持除N维度以外的任意维度。
4. split数应可以整除。
5. 支持非四维输入输出。
type约束:仅支持float类型。
SplitToSequenceCPU计算※----
SqrtBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
type约束:仅支持float类型。
SqueezeBPU加速该op会被转换成Reshape,BPU约束详见Reshape op。--
StringNormalizerCPU计算※----
SubBPU加速1. 该算子支持int16输入输出。
2. 输入类型支持featurmap和常量,且最多支持一个常量输入。
3. 支持除第一维外的广播,支持两个输入之间的互相广播,例如NH1C和N1WC。
4. 输入输出维度支持2维、3维、4维和5维,大小为一般限制(见备注)。支持两个输入维度不同,输入为5维时需要满足以下限制:
(1)首先可以通过合并相邻维度降维到4维,例如NHWD1和N1WDC可以合并W维和D维来降维;
(2)其次广播的维度不能和相邻维度合并,例如NHWD1和N11DC因为H维、W维和C维都是广播的维度,无法通过合并相邻维度降维,所以无法支持。
- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
SumBPU加速限制条件等同于Addtype约束:仅支持float类型。
TanCPU计算--type约束:仅支持float类型。
TanhBPU加速1. 该算子支持int16输入输出。
2. 输入输出支持1-10维,最高维 ∈ [1, 4096],其它维 ∈ [1, 65536]。
type约束:仅支持float类型。
TfIdfVectorizerCPU计算※----
ThresholdedReluCPU计算--type约束:仅支持float类型。
TileBPU加速1. 该算子支持int16输入输出。
2. 输入与输出仅允许有一个维度上数值不同。
type约束:仅支持float,int64,int32,uint64,uint32类型。
TopKBPU加速1. 该算子支持int16输入输出。
2. input/indices/output维度支持1-10维。
3. indices type约束支持int16/int32/int64。
4. 参数sorted只支持true。
- type约束:仅支持float类型。
TransposeBPU加速1. 该算子支持int16输入输出。
2. 支持任意输入维度。
- 支持nhwc2nchw,perm:[0, 3, 1, 2]。
- 支持nchw2nhwc,perm:[0, 2, 3, 1]。
- 支持指定perm维度转换,数据类型仅支持float,int8,int32。
UniqueCPU计算※----
UnsqueezeBPU加速该op会被转换成Reshape,BPU约束详见Reshape 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属性不支持。
WhereCPU计算--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)。
XorCPU计算※----
FunctionCPU计算※----
CeluCPU计算※----
DynamicQuantizeLinearCPU计算※----
GreaterOrEqualBPU加速opset11 不支持单个GreaterOrEqual算子,支持拆分后的算子Less+Not运行在BPU上,限制条件与Less相同。- 支持相同输入shape计算。
- 支持输入1是标量或者输入2是标量的计算。
- 支持broadcast计算,最大维度是5。
MeanVarianceNormalizationCPU计算※----
GridSample(PyTorch)BPU加速1. 输入维度仅支持四维,第一个输入需满足N ∈ [1, 4096]; C ∈ [1, 65536]; H,W ∈ [1, 1024] 且 H*W <= 720*1024
2. mode只支持'bilinear'、'nearest'。
3. padding_mode只支持'zeros'、'border'。
4. 该算子为opset16的onnx算子,为在opset11支持,工具链以自定义算子的方式提供导出,导出包含该算子的onnx模型请使用horizon_nn.torch.export_onnx接口替换torch.onnx.export,接口传参相同,示例代码如下:
from horizon_nn.torch import export_onnx
...
export_onnx(...)