Supported ONNX Operators#
2025-01-15
13 min read time
MIGraphX supports operators up to Opset 19. Latest information of ONNX operators can be found in the ONNX GitHub repository.
MIGraphX supports the following ONNX data types: BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FLOAT8, FLOAT16, FLOAT32, and DOUBLE
Note
FP8 support is only for E4M3FNUZ, see Float stored in 8 bits in the ONNX documentation.
See below for the support matrix of ONNX operators in MIGraphX.
Note
The listed supported types are taken from the ONNX specification. An operator might support other additional datatypes.
Operator Support Matrix#
| Operator | Supported | Supported Types | Limitations | 
|---|---|---|---|
| Abs | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Acos | ✅ | FP8, FP16, FP32, FP64 | |
| Acosh | ✅ | FP8, FP16, FP32, FP64 | |
| Add | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| And | ✅ | BOOL | |
| ArgMax | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| ArgMin | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Asin | ✅ | FP8, FP16, FP32, FP64 | |
| Asinh | ✅ | FP8, FP16, FP32, FP64 | |
| Atan | ✅ | FP8, FP16, FP32, FP64 | |
| Atanh | ✅ | FP8, FP16, FP32, FP64 | |
| AveragePool | ✅ | FP8, FP16, FP32, FP64 | |
| BatchNormalization | ✅ | FP8, FP16, FP32, FP64 | |
| BiasGelu | ✅ | FP8, FP16, FP32, FP64 | |
| Bernoulli | ❌ | ||
| BitShift | ❌ | ||
| BitwiseAnd | ❌ | ||
| BitwiseNot | ❌ | ||
| BitwiseOr | ❌ | ||
| BitwiseXor | ❌ | ||
| BlackmanWindow | ❌ | ||
| Cast | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP16, FP32, FP64 | 
 | 
| CastLike | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP16, FP32, FP64 | 
 | 
| Ceil | ✅ | FP8, FP16, FP32, FP64 | |
| Celu | ✅ | FP32 | |
| CenterCropPad | ❌ | ||
| Clip | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Col2Im | ❌ | ||
| Compress | ❌ | ||
| Concat | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| ConcatFromSequence | ❌ | ||
| Constant | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| ConstantOfShape | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP16, FP32, FP64 | dynamic shape is not supported | 
| Conv | ✅ | FP8, FP16, FP32, FP64 | |
| ConvInteger | ✅ | INT8 | |
| ConvTranspose | ✅ | FP8, FP16, FP32, FP64 | 
 | 
| Cos | ✅ | FP8, FP16, FP32, FP64 | |
| Cosh | ✅ | FP8, FP16, FP32, FP64 | |
| CumSum | ✅ | UINT32, UINT64, INT32, INT64, FP8, FP16, FP32, FP64 | 
 | 
| DFT | ❌ | ||
| DeformConv | ❌ | ||
| DepthToSpace | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| DequantizeLinear | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Det | ❌ | ||
| Div | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Dropout | ✅ | Any | Changed to
 | 
| DynamicQuantizeLinear | ✅ | FP8, FP16, FP32, FP64 | 
 | 
| Einsum | ✅ | Any | more than 1 diagonal per
input is not supported
e.g.  batch diagonal where batches
are not the leading dims is
not supported
e.g.  | 
| Elu | ✅ | FP8, FP16, FP32, FP64 | |
| Equal | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Erf | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Exp | ✅ | FP8, FP16, FP32, FP64 | |
| Expand | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | dynamic shape is not supported | 
| EyeLike | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| FastGelu | ✅ | FP8, FP16, FP32 | |
| Flatten | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Floor | ✅ | FP8, FP16, FP32, FP64 | |
| Gather | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| GatherElements | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| GatherND | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Gelu | ✅ | FP8, FP16, FP32, FP64 | |
| Gemm | ✅ | UINT32, UINT64, INT32, INT64, FP8, FP16, FP32, FP64 | |
| GlobalAveragePool | ✅ | FP8, FP16, FP32, FP64 | |
| GlobalLpPool | ✅ | FP8, FP16, FP32, FP64 | |
| GlobalMaxPool | ✅ | FP8, FP16, FP32, FP64 | |
| Greater | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| GreaterOrEqual | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| GridSample | ✅ | UINT32, UINT64, INT32, INT64, FP16, FP32, FP64 | 5-D inputs not supported | 
| GroupNormalization | ✅ | FP8, FP16, FP32, FP64 | 
 | 
| GRU | ✅ | FP8, FP16, FP32, FP64 | 
 | 
| HammingWindow | ❌ | ||
| HannWindow | ❌ | ||
| HardSigmoid | ✅ | FP8, FP16, FP32, FP64 | |
| HardSwish | ✅ | FP8, FP16, FP32, FP64 | |
| Hardmax | ✅ | FP8, FP16, FP32, FP64 | |
| Identity | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | 
 | 
| If | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | 
 | 
| InstanceNormalization | ✅ | FP16, FP32, FP64 | |
| IsInf | ✅ | FP8, FP16, FP32, FP64 | |
| IsNaN | ✅ | FP8, FP16, FP32, FP64 | |
| LayerNormalization | ✅ | FP8, FP16, FP32, FP64 | 
 | 
| LeakyRelu | ✅ | FP8, FP16, FP32, FP64 | |
| Less | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| LessOrEqual | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Log | ✅ | FP8, FP16, FP32, FP64 | |
| LogSoftmax | ✅ | FP8, FP16, FP32, FP64 | |
| Loop | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | 
 | 
| LRN | ✅ | FP8, FP16, FP32, FP64 | |
| LSTM | ✅ | FP32, FP16 | 
 | 
| LpNormalization | ✅ | FP8, FP16, FP32, FP64 | |
| LpPool | ✅ | FP32, FP16, FP8, INT8 | 
 | 
| MatMul | ✅ | UINT32, UINT64, INT32, INT64, FP8, FP16, FP32, FP64 | |
| MatMulInteger | ✅ | UINT8, INT8 | dynamic shape is not supported | 
| Max | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| MaxPool | ✅ | FP32, FP16, FP8, INT8 | 
 | 
| MaxRoiPool | ❌ | ||
| MaxUnpool | ❌ | ||
| Mean | ✅ | FP8, FP16, FP32, FP64 | |
| MeanVarian ceNormalization | ✅ | FP8, FP16, FP32, FP64 | |
| MelWeightMatrix | ❌ | ||
| Min | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Mish | ❌ | ||
| Mod | ✅ | UINT8, UINT16, UINT32, UINT64, INT16, INT64, FP8, FP16, FP32, FP64 | 
 | 
| Mul | ✅ | UINT8, UINT16, UINT32, UINT64, INT16, INT64, FP8, FP16, FP32, FP64 | |
| Multinomial | ✅ | FP8, FP16, FP32, FP64 | |
| Neg | ✅ | INT8, INT32, INT64, FP8, FP16, FP32, FP64 | |
| NegativeLogLikelihoodLoss | ❌ | ||
| NonMaxSuppression | ✅ | FP8, FP16, FP32, FP64 | fixed output
size unless
 | 
| NonZero | ✅ | FP8, FP16, FP32, FP64 | fixed output
size unless
 | 
| Not | ✅ | BOOL | |
| OneHot | ✅ | UINT8, UINT16, UINT32, UINT64, INT16, INT64, FP8, FP16, FP32, FP64 | dynamic shape is not supported | 
| Optional | ❌ | ||
| OptionalGetElement | ❌ | ||
| OptionalHasElement | ❌ | ||
| Or | ✅ | BOOL | |
| Pad | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | 
 | 
| Pow | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| PRelu | ✅ | UINT32, UINT64, INT32, INT64, FP8, FP16, FP32, FP64 | |
| QLinearAdd | ✅ | UINT8, INT8 | |
| QLinearAveragePool | ✅ | UINT8, INT8 | |
| QLinearConcat | ✅ | UINT8, INT8 | |
| QLinearConv | ✅ | UINT8, INT8 | |
| QLinearGlobalAveragePool | ✅ | UINT8, INT8 | |
| QLinearLeakyRelu | ✅ | UINT8, INT8 | |
| QLinearMatMul | ✅ | UINT8, INT8 | non-scalar inputs are not supported | 
| QLinearMul | ✅ | UINT8, INT8 | |
| QLinearSigmoid | ✅ | UINT8, INT8 | |
| QuantizeLinear | ✅ | FP8, FP16, FP32, INT32 | 
 | 
| RandomNormal | ✅ | FP16, FP32, FP64 | |
| RandomNormalLike | ✅ | FP16, FP32, FP64 | |
| RandomUniform | ✅ | FP16, FP32, FP64 | |
| RandomUniformLike | ✅ | FP16, FP32, FP64 | |
| Range | ✅ | FP16, FP32, FP64, INT16, INT32, INT64 | 
 | 
| Reciprocal | ✅ | FP8, FP16, FP32, FP64 | |
| ReduceL1 | ✅ | FP16, FP32, FP64, UINT32, UINT64, INT32, INT64 | 
 | 
| ReduceL2 | ✅ | FP16, FP32, FP64, UINT32, UINT64, INT32, INT64 | 
 | 
| ReduceLogSum | ✅ | FP16, FP32, FP64, UINT32, UINT64, INT32, INT64 | 
 | 
| ReduceLogSumExp | ✅ | FP16, FP32, FP64, UINT32, UINT64, INT32, INT64 | 
 | 
| ReduceMax | ✅ | FP16, FP32, FP64, UINT32, UINT64, INT32, INT64 | 
 | 
| ReduceMean | ✅ | FP16, FP32, FP64, UINT32, UINT64, INT32, INT64 | 
 | 
| ReduceMin | ✅ | FP16, FP32, FP64, UINT32, UINT64, INT32, INT64 | 
 | 
| ReduceProd | ✅ | FP16, FP32, FP64, UINT32, UINT64, INT32, INT64 | 
 | 
| ReduceSum | ✅ | FP16, FP32, FP64, UINT32, UINT64, INT32, INT64 | 
 | 
| ReduceSumSquare | ✅ | FP16, FP32, FP64, UINT32, UINT64, INT32, INT64 | 
 | 
| Relu | ✅ | FP16, FP32, FP64, INT8, INT16, INT32, INT64 | |
| Reshape | ✅ | FP32, FP16, INT32, INT64, FP8, INT8, BOOL | 
 | 
| Resize | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | 
 | 
| ReverseSequence | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | variable
 | 
| RNN | ✅ | FP32, FP16 | 
 | 
| RoiAlign | ✅ | FP8, FP16, FP32, FP64 | |
| Round | ✅ | FP8, FP16, FP32, FP64 | |
| STFT | ❌ | ||
| Scan | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | 
 | 
| Scatter (deprecated) | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| ScatterElements | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| ScatterND | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Selu | ✅ | FP8, FP16, FP32, FP64 | |
| SequenceAt | ❌ | ||
| SequenceConstruct | ❌ | ||
| SequenceEmpty | ❌ | ||
| SequenceErase | ❌ | ||
| SequenceInsert | ❌ | ||
| SequenceLength | ❌ | ||
| SequenceMap | ❌ | ||
| Shape | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Shrink | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Sigmoid | ✅ | FP8, FP16, FP32, FP64 | |
| Sign | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Sin | ✅ | FP8, FP16, FP32, FP64 | |
| Sinh | ✅ | FP8, FP16, FP32, FP64 | |
| Size | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Slice | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | variable inputs are not supported | 
| Softmax | ✅ | FP8, FP16, FP32, FP64 | |
| SoftmaxCrossEntropyLoss | ❌ | ||
| Softplus | ✅ | FP8, FP16, FP32, FP64 | |
| Softsign | ✅ | FP8, FP16, FP32, FP64 | |
| SpaceToDepth | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Split | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | dynamic shape is not supported | 
| SplitToSequence | ❌ | ||
| Sqrt | ✅ | FP8, FP16, FP32, FP64 | |
| Squeeze | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | variable  | 
| StringNormalizer | ❌ | ||
| Sub | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Sum | ✅ | FP8, FP16, FP32, FP64 | |
| Tan | ✅ | FP8, FP16, FP32, FP64 | |
| Tanh | ✅ | FP8, FP16, FP32, FP64 | |
| TfIdfVectorizer | ❌ | ||
| ThresholdedRelu | ✅ | FP8, FP16, FP32, FP64 | |
| Tile | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | dynamic shape is not supported | 
| TopK | ✅ | UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | dynamic  | 
| Transpose | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Trilu | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | dynamic  | 
| Unique | ✅ | Any | only
 | 
| Unsqueeze | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | variable
 | 
| Upsample (deprecated) | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | |
| Where | ✅ | BOOL, UINT8, UINT16, UINT32, UINT64, INT8, INT16, INT32, INT64, FP8, FP16, FP32, FP64 | mixed static and dynamic shape inputs are not supported | 
| Xor | ✅ | BOOL |