Supported LiteRT operators
When you import a model, each LiteRT (formerly TensorFlow Lite) operator in the model graph becomes one or more Sentis layers. For more information, refer to How Sentis optimizes a model.
Supported LiteRT operators
The following table shows the LiteRT operators that Sentis supports. It also outlines the data types that Sentis supports for each backend type.
| Name | Sentis operators | Supported data types with BackendType.CPU |
Supported data types with BackendType.GPUCompute |
Supported data types with BackendType.GPUPixel |
Notes |
|---|---|---|---|---|---|
| abs | Abs |
float, int | float, int | float, int | |
| add | Add |
float, int | float, int | float, int | |
| add_n | Add |
float, int | float, int | float, int | |
| arg_max | ArgMax |
float, int | float, int | float, int | Dynamic dim input tensor is not supported |
| arg_min | ArgMin |
float, int | float, int | float, int | Dynamic dim input tensor is not supported |
| atan2 | Atan2 |
float | float | float | |
| average_pool_2d | AveragePool |
float | float | float | |
| batch_matmul | MatMul |
float | float* | float | |
| bitwise_xor | BitwiseXor |
int | int | int | |
| broadcast_args | BroadcastArgs |
float, int | float, int | float, int | |
| broadcast_to | Expand |
float, int | float, int | float, int | |
| cast | Cast |
float, int | float, int | float, int | |
| ceil | Ceil |
float | float | float | |
| concatenation | Concat |
float, int | float, int | float, int | |
| conv_2d | Conv |
float | float* | float | |
| conv_3d | Conv |
float | float* | float | |
| conv_3d_transpose | ConvTranspose |
float | float | float | Dynamic output_shape input tensor is not supported. |
| cos | Cos |
float | float | float | |
| cumsum | CumSum |
float, int | float, int | float, int | |
| depth_to_space | DepthToSpace |
float, int | float, int | float, int | |
| depthwise_conv_2d | Conv |
float | float* | float | |
| dequantize | Identity |
float | float | float | int type is not supported |
| div | Div |
float, int | float, int | float, int | |
| elu | Elu |
float | float | float | |
| embedding_lookup | Gather |
float, int | float, int | float, int | |
| equal | Equal |
float, int | float, int | float, int | |
| exp | Exp |
float | float | float | |
| expand_dims | Unsqueeze |
float, int | float, int | float, int | |
| fill | Expand |
float, int | float, int | float, int | |
| floor | Floor |
float | float | float | |
| floor_div | FloorDiv |
float, int | float, int | float, int | |
| floor_mod | Mod |
float | float | float | |
| fully_connected | MatMul |
float | float* | float | |
| gather | Gather |
float, int | float, int | float, int | |
| gather_nd | GatherND |
float, int | float, int | float, int | |
| gelu | Gelu |
float | float | float | |
| greater | Greater |
float, int | float, int | float, int | |
| greater_equal | GreaterOrEqual |
float, int | float, int | float, int | |
| hard_swish | HardSwish |
float | float | float | |
| l2_normalization | ReduceSumSquare + Sqrt + Div |
float | float* | float | |
| l2_pool_2d | Square + AveragePool + Sqrt |
float | float | float | |
| leaky_relu | LeakyRelu |
float | float | float | |
| less | Less |
float, int | float, int | float, int | |
| less_equal | LessOrEqual |
float, int | float, int | float, int | |
| local_response_normalization | LRN |
float | Not supported | Not supported | |
| log | Log |
float | float | float | |
| log_softmax | LogSoftmax |
float | float | float | |
| logical_and | LogicalAnd |
int | int | int | |
| logical_not | LogicalNot |
int | int | int | |
| logical_or | LogicalOr |
int | int | int | |
| logistic | Sigmoid |
float | float | float | |
| max_pool_2d | MaxPool |
float | float | float | |
| maximum | Max |
float, int | float, int | float, int | |
| mean | ReduceMean |
float | float | float | Reduction over an axis of length 0 is not supported. int type is not supported. |
| minimum | Min |
float, int | float, int | float, int | |
| mirror_pad | Pad |
float, int | float, int | float, int | |
| mul | Mul |
float, int | float, int | float, int | |
| multinomial | Multinomial |
float | float | float | Dynamic num_samples input tensor is not supported |
| neg | Neg |
float, int | float, int | float, int | |
| not_equal | NotEqual |
float, int | float, int | float, int | |
| one_hot | OneHot |
float, int | float, int | float, int | |
| pack | Unsqueeze + Concat |
float, int | float, int | float, int | |
| pad | Pad |
float, int | float, int | float, int | |
| padv2 | Pad |
float, int | float, int | float, int | |
| pow | Pow |
float, int | float, int | float, int | |
| prelu | PRelu |
float | float | float | |
| random_standard_normal | RandomNormal |
float | float | float | |
| random_uniform | RandomUniform |
float | float | float | |
| range | Range |
float, int | float, int | float, int | |
| rank | Shape + Size |
- | - | - | The operator returns a CPU tensor without downloading the input tensor |
| reduce_all | ReduceMin |
float, int | float*, int* | float, int | |
| reduce_any | ReduceMax |
float, int | float*, int* | float, int | |
| reduce_max | ReduceMax |
float, int | float*, int* | float, int | |
| reduce_min | ReduceMin |
float, int | float*, int* | float, int | |
| reduce_prod | ReduceProd |
float, int | float*, int* | float, int | |
| relu | Relu |
float | float | float | |
| relu6 | Relu6 |
float | float | float | |
| relu_0_to_1 | Clip |
float | float | float | |
| relu_n1_to_1 | Clip |
float | float | float | |
| reshape | Reshape |
float, int | float, int | float, int | |
| resize_bilinear | Resize |
float | float | float | |
| resize_nearest_neighbor | Resize |
float | float | float | |
| reverse_v2 | Slice |
float, int | float, int | float, int | |
| round | Round |
float | float | float | |
| rsqrt | Rsqrt |
float | float | float | |
| scatter_nd | ScatterND |
float, int | float, int | float, int | |
| select | Where |
float, int | float, int | float, int | |
| select_v2 | Where |
float, int | float, int | float, int | |
| shape | Shape |
- | - | - | The operator returns a CPU tensor without downloading the input tensor |
| sign | Sign |
float, int | float, int | float, int | |
| sin | Sin |
float | float | float | |
| slice | Slice |
float, int | float, int | float, int | Dynamic begin and size input tensors are not supported |
| softmax | Softmax |
float | float | float | |
| space_to_depth | SpaceToDepth |
float, int | float, int | float, int | |
| sparse_to_dense | Expand + ScatterND |
float, int | float, int | float, int | indices input tensor must have a rank greater than 0 |
| split | Split |
float, int | float, int | float, int | Dynamic split_dim input tensor is not supported |
| split_v | Split |
float, int | float, int | float, int | Dynamic size_split and split_dim input tensors are not supported |
| sqrt | Sqrt |
float | float | float | |
| square | Square |
float, int | float, int | float, int | |
| squared_difference | Sub + Square |
float, int | float, int | float, int | |
| squeeze | Squeeze |
float, int | float, int | float, int | |
| strided_slice | Slice |
float, int | float, int | float, int | The offset and ellipsis_mask attributes are not supported. Dynamic begin, end, and strides input tensors are not supported for masked slices. |
| sub | Sub |
float, int | float, int | float, int | |
| sum | ReduceSum |
float, int | float, int | float, int | |
| tanh | Tanh |
float | float | float | |
| tile | Tile |
float, int | float, int | float, int | |
| topk_v2 | TopK |
float, int | float, int | Not supported | |
| transpose | Transpose |
float, int | float, int | float, int | Dynamic perm input tensor is not supported |
| transpose_conv | ConvTranspose |
float | float* | float | Supports 1D, 2D or 3D convolutions. Dynamic output_shape input tensor is not supported. |
| unpack | Select |
float, int | float, int | float, int | |
| where | NonZero + Transpose |
float, int | float, int | float, int | |
| zeros_like | Shape + ConstantOfShape |
float, int | float, int | float, int |
* Sentis uses DirectML to accelerate these operators on supported hardware.
Additional layers
LiteRT uses NHWC (batch size, height, width, channels) layout for image operations, such as convolution and pooling. Sentis uses NCHW (batch size, channels, height, width) internally, and might insert Transpose operators where needed in the model graph. The Sentis importer tries to minimize the number of transposes used for intermediate tensor operations. Consequently, intermediate tensors in the Sentis model may use a different layout than in the original LiteRT model. Input and output tensor shapes remain unchanged.
Sentis might create additional layers when it optimizes the model. A full list of Sentis-only layers is available here.
Unsupported features
Sentis currently does not support the following LiteRT features:
- Multiple subgraphs: If the model contains multiple subgraphs, only the first one is used. All others are ignored.
- SIGN_BIT activation: Operators using the
fused_activation_functionattribute with the valueSIGN_BITare not supported. - Custom operators: Custom LiteRT operators are not supported.
- Sparse tensors: Sparse tensor formats are not supported.
Unsupported tensor types
The following tensor data types are not supported in any context:
stringcomplex64complex128resourcevariant
In addition, the following types are not supported for constant tensors:
int4bfloat16
Unsupported operators
The following LiteRT operators are not supported in the current version of Sentis.
- assign_variable
- basic_lstm
- batch_to_space_nd
- bidirectional_sequence_lstm
- bitcast
- bucketize
- call_once
- complex_abs
- control_node
- custom
- custom_tf
- densify
- dilate
- dynamic_update_slice
- external_const
- fake_quant
- hashtable
- hashtable_find
- hashtable_import
- hashtable_size
- if
- imag
- lstm
- matrix_diag
- matrix_set_diag
- no_value
- non_max_suppression_v4
- non_max_suppression_v5
- NumericVerify
- poly_call
- pseudo_const
- pseudo_qconst
- pseudo_sparse_const
- pseudo_sparse_qconst
- quantize
- read_variable
- real
- reverse_sequence
- rfft2d
- right_shift
- segment_sum
- space_to_batch_nd
- StableHLO - All operators
- svdf
- unidirectional_sequence_lstm
- unidirectional_sequence_rnn
- unique
- unsorted_segment_max
- unsorted_segment_min
- unsorted_segment_prod
- unsorted_segment_sum
- var_handle
- while
- yield