跳到主要内容

模型算子支持列表

使用限制说明

本章节主要介绍 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 中。

  • 基于 tensorflow-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(...)