LACInfer 算子支持情况
版权声明
本文档版权归龙芯中科技术股份有限公司所有,并保留一切权利。未经书面许可,任何公司和个人不得将此文档中的任何部分公开、转载或以其他方式散发给第三方。否则,必将追究其法律责任。
免责声明
本文档仅提供阶段性信息,所含内容可根据产品的实际情况随时更新,恕不另行通知。如因文档使用不当造成的直接或间接损失,本公司不承担任何责任。
读者对象
本文档主要适用于以下人员:
- 技术支持工程师
- 软件开发工程师
1. 关于本文档
1.1 编写目的
本文档列出 LACInfer 对 ONNX 标准算子、已废弃实验性算子以及 ONNX Runtime 扩展算子的支持情况,旨在帮助用户:
- 在模型转换或部署前,快速确认某个算子是否被 LACInfer 支持;
- 了解算子在受支持时的具体限制条件(如动态形状、量化类型、填充方式等);
- 为定位算子不支持所导致的转换或运行问题提供参考。
1.2 适用范围
本文档适用于 LACInfer V0.1.0 版本,算子支持情况以该版本的实际实现为准。后续版本如有变化,将在修订历史中说明。
1.3 术语说明
| 术语 | 说明 |
|---|---|
| ONNX | Open Neural Network Exchange,开放神经网络交换格式 |
| OpSet | ONNX 算子集版本,用于约束算子的定义与属性 |
| LACInfer | 龙芯加速计算推理引擎 |
| 动态形状 | 运行期才能确定的张量形状;文中“不支持动态形状”指该算子要求形状在编译期确定 |
1.4 参考资料
- ONNX 标准算子:https://github.com/onnx/onnx/blob/main/docs/Operators.md
- ONNX 已废弃实验性算子:https://github.com/onnx/onnx/blob/main/docs/ManagingExperimentalOps.md
- ONNX Runtime 扩展算子:https://github.com/microsoft/onnxruntime/blob/main/docs/ContribOperators.md
2. 修订历史
| 版本 | 修订日期 | 修订内容 |
|---|---|---|
| V0.1.0 | 2026-09-08 | 初始版本 |
3. 算子支持
本章节列出 LACInfer 对 ONNX 标准算子、已废弃实验性算子以及 ONNX Runtime 扩展算子的支持情况。其中,ONNX 标准算子共支持 165 个,已废弃实验性算子共支持 4 个,ONNX Runtime 扩展算子共支持 14 个,详细支持情况参考本章各节。
3.1. ONNX 标准算子
LACInfer 支持最高 ONNX OpSet 19 版本的 ONNX 标准算子,以及 OpSet 23 开始引入的 Attention 标准算子,支持情况如表 1 所示。最新的 ONNX 标准算子信息详见 ONNX Github 仓库。
表1. LACInfer 对 ONNX 标准算子的支持情况
| 算子名称 | 是否支持 | 备注 |
|---|---|---|
| Abs | 是 | |
| Acos | 是 | |
| Acosh | 是 | |
| Add | 是 | |
| And | 是 | |
| ArgMax | 是 | |
| ArgMin | 是 | |
| Asin | 是 | |
| Asinh | 是 | |
| Atan | 是 | |
| Atanh | 是 | |
| Attention | 是 | 由OpSet 23引入 |
| AveragePool | 是 | |
| BatchNormalization | 是 | |
| BiasGelu | 是 | |
| Bernoulli | 否 | |
| BitShift | 否 | |
| BitwiseAnd | 是 | |
| BitwiseNot | 否 | |
| BitwiseOr | 否 | |
| BitwiseXor | 否 | |
| BlackmanWindow | 否 | |
| Cast | 是 | 不支持saturate |
| CastLike | 是 | 不支持saturate |
| Ceil | 是 | |
| Celu | 是 | |
| CenterCropPad | 否 | |
| Clip | 是 | |
| Col2Im | 否 | |
| Compress | 否 | |
| Concat | 是 | |
| ConcatFromSequence | 否 | |
| Constant | 是 | |
| ConstantOfShape | 是 | 不支持动态形状 |
| Conv | 是 | |
| ConvInteger | 是 | |
| ConvTranspose | 是 | 不支持auto_pad,output_padding数学方法不同 |
| Cos | 是 | |
| Cosh | 是 | |
| CumSum | 是 | 不支持axis动态形状 |
| DFT | 否 | |
| DeformConv | 否 | |
| DepthToSpace | 是 | |
| DequantizeLinear | 是 | |
| Det | 否 | |
| Div | 是 | |
| Dropout | 是 | 更改为identity |
| DynamicQuantizeLinear | 是 | 仅uint8量化,不支持动态形状 |
| Einsum | 是 | 不支持每个输入超过一个对角线,例如:iijj→ij 不支持批次(batch)不是前导dims的批次对角线,例如:ii...->i... |
| Elu | 是 | |
| Equal | 是 | |
| Erf | 是 | |
| Exp | 是 | |
| Expand | 是 | 不支持动态形状 |
| EyeLike | 是 | |
| FastGelu | 是 | |
| Flatten | 是 | |
| Floor | 是 | |
| Gather | 是 | |
| GatherElements | 是 | |
| GatherND | 是 | |
| Gelu | 是 | |
| Gemm | 是 | |
| GlobalAveragePool | 是 | |
| GlobalLpPool | 是 | |
| GlobalMaxPool | 是 | |
| Greater | 是 | |
| GreaterOrEqual | 是 | |
| GridSample | 是 | 不支持5-D输入 |
| GroupNormalization | 是 | 不支持stash_type |
| GRU | 是 | 未使能可选的Affine/ThresholdRelu/ScaledTanh/HardSigmoid/Softsign/Softplus激活函数 |
| HammingWindow | 否 | |
| HannWindow | 否 | |
| HardSigmoid | 是 | |
| HardSwish | 是 | |
| Hardmax | 是 | |
| Identity | 是 | 不支持identity、sequence数据类型 |
| If | 是 | 不支持identity、sequence数据类型 |
| InstanceNormalization | 是 | |
| IsInf | 是 | |
| IsNaN | 是 | |
| LayerNormalization | 是 | 不支持stash_type |
| LeakyRelu | 是 | |
| Less | 是 | |
| LessOrEqual | 是 | |
| Log | 是 | |
| LogSoftmax | 是 | |
| Loop | 是 | 不支持identity、sequence数据类型,max_iteration有上限 |
| LRN | 是 | |
| LSTM | 是 | 未使能可选的Affine/ThresholdRelu/ScaledTanh/HardSigmoid/Softsign/Softplus激活函数 |
| LpNormalization | 是 | |
| LpPool | 是 | GPU不支持lpnorm的池化模式(lacdnn限制) |
| MatMul | 是 | |
| MatMulInteger | 是 | 不支持动态形状 |
| Max | 是 | |
| MaxPool | 是 | 不支持storage_order,GPU上部分支持dialtion(lacdnn限制),不支持可选的indices输出 |
| MaxRoiPool | 否 | |
| MaxUnpool | 否 | |
| Mean | 是 | |
| MeanVarianceNormalization | 是 | |
| MelWeightMatrix | 否 | |
| Min | 是 | |
| Mish | 否 | |
| Mod | 是 | |
| Mul | 是 | |
| Multinomial | 是 | |
| Neg | 是 | |
| NegativeLogLikelihoodLoss | 是 | |
| NonMaxSuppression | 是 | 固定输出大小,除非设置了use_dyn_output |
| NonZero | 是 | 固定输出大小,除非设置了use_dyn_output |
| Not | 是 | |
| OneHot | 是 | 不支持动态形状 |
| Optional | 否 | |
| OptionalGetElement | 否 | |
| OptionalHasElement | 否 | |
| Or | 是 | |
| Pad | 是 | 不支持edge和warp填充,pads必须是常量 |
| Pow | 是 | |
| PRelu | 是 | |
| QLinearAdd | 是 | |
| QLinearAveragePool | 是 | |
| QLinearConcat | 是 | |
| QLinearConv | 是 | |
| QLinearGlobalAveragePool | 是 | |
| QLinearLeakyRelu | 是 | |
| QLinearMatMul | 是 | 不支持非标量输入 |
| QLinearMul | 是 | |
| QLinearSigmoid | 是 | |
| QuantizeLinear | 是 | 不支持saturate |
| RandomNormal | 是 | |
| RandomNormalLike | 是 | |
| RandomUniform | 是 | |
| RandomUniformLike | 是 | |
| Range | 是 | 不支持start、end、delta动态形状 |
| Reciprocal | 是 | |
| ReduceL1 | 是 | 不支持axes动态形状 |
| ReduceL2 | 是 | 不支持axes动态形状 |
| ReduceLogSum | 是 | 不支持axes动态形状 |
| ReduceLogSumExp | 是 | 不支持axes动态形状 |
| ReduceMax | 是 | 不支持axes动态形状 |
| ReduceMean | 是 | 不支持axes动态形状 |
| ReduceMin | 是 | 不支持axes动态形状 |
| ReduceProd | 是 | 不支持axes动态形状 |
| ReduceSum | 是 | 不支持axes动态形状 |
| ReduceSumSquare | 是 | 不支持axes动态形状 |
| Relu | 是 | |
| Reshape | 是 | 不支持allowzero,不支持动态形状 |
| Resize | 是 | 不支持cubic、half_pixel_symmetric、tf_crop_and_resize,linear模式不支持非常量输入,不支持exclude_outside 1,不支持antialias、extrapolation_value、keep_aspect_ratio_policy |
| ReverseSequence | 是 | 不支持sequence_lens |
| RNN | 是 | 未使能可选的Affine/ThresholdRelu/ScaledTanh/HardSigmoid/Softsign/Softplus激活函数 |
| RoiAlign | 是 | |
| Round | 是 | |
| STFT | 否 | |
| Scan | 是 | 不支持identity、sequence数据类型,迭代次数有上限,Opset 8版本不支持 |
| Scatter (deprecated) | 是 | |
| ScatterElements | 是 | |
| ScatterND | 是 | |
| Selu | 是 | |
| SequenceAt | 否 | |
| SequenceConstruct | 否 | |
| SequenceEmpty | 否 | |
| SequenceErase | 否 | |
| SequenceInsert | 否 | |
| SequenceLength | 否 | |
| SequenceMap | 否 | |
| Shape | 是 | |
| Shrink | 是 | |
| Sigmoid | 是 | |
| Sign | 是 | |
| Sin | 是 | |
| Sinh | 是 | |
| Size | 是 | |
| Slice | 是 | 不支持变量输入 |
| Softmax | 是 | |
| SoftmaxCrossEntropyLoss | 是 | |
| Softplus | 是 | |
| Softsign | 是 | |
| SpaceToDepth | 是 | |
| Split | 是 | 不支持动态形状 |
| SplitToSequence | 否 | |
| Sqrt | 是 | |
| Squeeze | 是 | 不支持axes |
| StringNormalizer | 否 | |
| Sub | 是 | |
| Sum | 是 | |
| Tan | 是 | |
| Tanh | 是 | |
| TfIdfVectorizer | 否 | |
| ThresholdedRelu | 是 | |
| Tile | 是 | 不支持动态形状 |
| TopK | 是 | 不支持动态k,不支持sorted |
| Transpose | 是 | |
| Trilu | 是 | 不支持动态k |
| Unique | 是 | 仅支持axis=0 |
| Unsqueeze | 是 | 不支持axes |
| Upsample (deprecated) | 是 | |
| Where | 是 | 不支持混合静态和动态形状输入 |
| Xor | 是 |
3.2. ONNX 已废弃实验性算子
为了最大化兼容性,尤其是支持使用较早版本 ONNX 导出的模型,LACInfer 保留了部分已被 ONNX 官方废弃的“实验性”算子(请参考 ONNX Github 仓库)。这些算子主要服务于特定历史模型的推理需求,建议用户在新项目中避免使用这些算子,并参考 ONNX 文档中的替代方案更新模型。
- ATen
- ConstantFill
- DynamicScale
- ImageScaler
3.3. ONNX Runtime 扩展算子
LACInfer 支持部分 ONNX Runtime 扩展算子,支持的算子如下所示。最新的 ONNX Runtime 扩展算子信息详见 ONNX Runtime Github 仓库。
- Attention
- BiasAdd
- BiasSplitGelu
- GroupNorm
- GroupQueryAttention
- MatMulIntegerToFloat
- MatMulNBits
- MultiHeadAttention
- NhwcConv
- QuickGelu
- RotaryEmbedding
- SimplifiedLayerNormalization
- SkipLayerNormalization
- SkipSimplifiedLayerNormalization