onnx

How can I view the size of each layer in an ONNX file?


I would like to analyze an ONNX (Open Neural Network Exchange) file. How can I examine the size of each layer to better understand what contributes to the total file size?


Solution

  • One can use this Python script to view the size of each layer in an ONNX file. It display the number of parameters, the number of bytes and the parameter type for each layer:

    '''
    pip install onnx numpy
    Tested with Python 3.12 on Ubuntu 22.04.
    '''
    import onnx
    import numpy as np
    from onnx import numpy_helper
    
    def show_layer_sizes(onnx_model_path):
        model = onnx.load(onnx_model_path)
        initializer_map = {init.name: init for init in model.graph.initializer}
    
        print(f"{'Layer Name':<40} {'# Params':>12} {'Size (Bytes)':>15} {'Data Types':>20}")
        print("-" * 95)
    
        total_params = 0
        total_bytes = 0
    
        for node in model.graph.node:
            layer_params = 0
            layer_bytes = 0
            dtypes = set()
    
            for input_name in node.input:
                if input_name in initializer_map:
                    tensor = numpy_helper.to_array(initializer_map[input_name])
                    layer_params += tensor.size
                    layer_bytes += tensor.nbytes
                    dtypes.add(str(tensor.dtype))
    
            total_params += layer_params
            total_bytes += layer_bytes
            dtype_str = ", ".join(sorted(dtypes)) if dtypes else "-"
            print(f"{node.name or node.output[0]:<40} {layer_params:>12,} {layer_bytes:>15,} {dtype_str:>20}")
    
        print("-" * 95)
        print(f"{'Total':<40} {total_params:>12,} {total_bytes:>15,} {'-'*20}")
    
    if __name__ == "__main__":
        onnx_model_path = "outs/fr-en/model.onnx"
        show_layer_sizes(onnx_model_path)
    

    Example of output:

    Layer Name                                   # Params    Size (Bytes)           Data Types
    -----------------------------------------------------------------------------------------------
    Identity_484                                  262,144       1,048,576              float32
    /model/encoder/Shape                                0               0                    -
    /model/encoder/Constant                             0               0                    -
    /model/encoder/Gather                               0               0                    -
    /model/encoder/Constant_1                           0               0                    -
    /model/encoder/Unsqueeze                            0               0                    -
    /model/encoder/Concat                               0               0                    -
    /model/encoder/Reshape                              0               0                    -
    /model/encoder/shared/Gather               30,471,168     121,884,672              float32
    /model/encoder/Constant_2                           0               0                    -
    /model/encoder/Mul                                  0               0                    -
    /model/encoder/embed_positions/Constant             0               0                    -
    /model/encoder/embed_positions/Cast                 0               0                    -
    /model/encoder/embed_positions/Constant_1            0               0                    -
    /model/encoder/embed_positions/Range                0               0                    -
    /model/encoder/embed_positions/Gather         262,144       1,048,576              float32
    /model/encoder/Add                                  0               0                    -
    /model/encoder/Shape_1                              0               0                    -
    /model/encoder/Constant_3                           0               0                    -
    /model/encoder/Gather_1                             0               0                    -
    /model/encoder/Shape_2                              0               0                    -
    /model/encoder/Constant_4                           0               0                    -
    /model/encoder/Gather_2                             0               0                    -
    /model/encoder/Unsqueeze_1                          0               0                    -
    /model/encoder/Unsqueeze_2                          0               0                    -
    /model/encoder/Unsqueeze_3                          0               0                    -
    /model/encoder/Constant_5                           0               0                    -
    /model/encoder/Unsqueeze_4                          0               0                    -
    /model/encoder/Unsqueeze_5                          0               0                    -
    /model/encoder/Concat_1                             0               0                    -
    /model/encoder/Constant_6                           0               0                    -
    /model/encoder/Reshape_1                            0               0                    -
    /model/encoder/Shape_3                              0               0                    -
    /model/encoder/ConstantOfShape                      0               0                    -
    /model/encoder/Constant_7                           0               0                    -
    /model/encoder/Mul_1                                0               0                    -
    /model/encoder/Equal                                0               0                    -
    /model/encoder/Where                                0               0                    -
    /model/encoder/Expand                               0               0                    -
    /model/encoder/Cast                                 0               0                    -
    /model/encoder/Constant_8                           0               0                    -
    /model/encoder/Sub                                  0               0                    -
    /model/encoder/Cast_1                               0               0                    -
    /model/encoder/Cast_2                               0               0                    -
    /model/encoder/Constant_9                           0               0                    -
    /model/encoder/Where_1                              0               0                    -
    /model/encoder/layers.0/self_attn/Shape             0               0                    -
    /model/encoder/layers.0/self_attn/Constant            0               0                    -
    /model/encoder/layers.0/self_attn/Gather            0               0                    -
    /model/encoder/layers.0/self_attn/Shape_1            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_1            0               0                    -
    /model/encoder/layers.0/self_attn/Gather_1            0               0                    -
    /model/encoder/layers.0/self_attn/q_proj/MatMul      262,144       1,048,576              float32
    /model/encoder/layers.0/self_attn/q_proj/Add          512           2,048              float32
    /model/encoder/layers.0/self_attn/Constant_2            0               0                    -
    /model/encoder/layers.0/self_attn/Mul               0               0                    -
    /model/encoder/layers.0/self_attn/k_proj/MatMul      262,144       1,048,576              float32
    /model/encoder/layers.0/self_attn/k_proj/Add          512           2,048              float32
    /model/encoder/layers.0/self_attn/Unsqueeze            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_3            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_4            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_5            0               0                    -
    /model/encoder/layers.0/self_attn/Concat            0               0                    -
    /model/encoder/layers.0/self_attn/Unsqueeze_1            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_6            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_7            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_8            0               0                    -
    /model/encoder/layers.0/self_attn/Concat_1            0               0                    -
    /model/encoder/layers.0/self_attn/Reshape            0               0                    -
    /model/encoder/layers.0/self_attn/Transpose            0               0                    -
    /model/encoder/layers.0/self_attn/v_proj/MatMul      262,144       1,048,576              float32
    /model/encoder/layers.0/self_attn/v_proj/Add          512           2,048              float32
    /model/encoder/layers.0/self_attn/Reshape_1            0               0                    -
    /model/encoder/layers.0/self_attn/Transpose_1            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_9            0               0                    -
    /model/encoder/layers.0/self_attn/Mul_1             0               0                    -
    /model/encoder/layers.0/self_attn/Unsqueeze_2            0               0                    -
    /model/encoder/layers.0/self_attn/Unsqueeze_3            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_10            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_11            0               0                    -
    /model/encoder/layers.0/self_attn/Concat_2            0               0                    -
    /model/encoder/layers.0/self_attn/Reshape_2            0               0                    -
    /model/encoder/layers.0/self_attn/Transpose_2            0               0                    -
    /model/encoder/layers.0/self_attn/Unsqueeze_4            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_12            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_13            0               0                    -
    /model/encoder/layers.0/self_attn/Concat_3            0               0                    -
    /model/encoder/layers.0/self_attn/Unsqueeze_5            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_14            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_15            0               0                    -
    /model/encoder/layers.0/self_attn/Concat_4            0               0                    -
    /model/encoder/layers.0/self_attn/Unsqueeze_6            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_16            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_17            0               0                    -
    /model/encoder/layers.0/self_attn/Concat_5            0               0                    -
    /model/encoder/layers.0/self_attn/Reshape_3            0               0                    -
    /model/encoder/layers.0/self_attn/Reshape_4            0               0                    -
    /model/encoder/layers.0/self_attn/Reshape_5            0               0                    -
    /model/encoder/layers.0/self_attn/Shape_2            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_18            0               0                    -
    /model/encoder/layers.0/self_attn/Gather_2            0               0                    -
    /model/encoder/layers.0/self_attn/Transpose_3            0               0                    -
    /model/encoder/layers.0/self_attn/MatMul            0               0                    -
    /model/encoder/layers.0/self_attn/Unsqueeze_7            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_19            0               0                    -
    /model/encoder/layers.0/self_attn/Unsqueeze_8            0               0                    -
    /model/encoder/layers.0/self_attn/Unsqueeze_9            0               0                    -
    /model/encoder/layers.0/self_attn/Concat_6            0               0                    -
    /model/encoder/layers.0/self_attn/Reshape_6            0               0                    -
    /model/encoder/layers.0/self_attn/Add               0               0                    -
    /model/encoder/layers.0/self_attn/Unsqueeze_10            0               0                    -
    /model/encoder/layers.0/self_attn/Unsqueeze_11            0               0                    -
    /model/encoder/layers.0/self_attn/Unsqueeze_12            0               0                    -
    /model/encoder/layers.0/self_attn/Concat_7            0               0                    -
    /model/encoder/layers.0/self_attn/Reshape_7            0               0                    -
    /model/encoder/layers.0/self_attn/Softmax            0               0                    -
    /model/encoder/layers.0/self_attn/MatMul_1            0               0                    -
    /model/encoder/layers.0/self_attn/Unsqueeze_13            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_20            0               0                    -
    /model/encoder/layers.0/self_attn/Unsqueeze_14            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_21            0               0                    -
    /model/encoder/layers.0/self_attn/Concat_8            0               0                    -
    /model/encoder/layers.0/self_attn/Reshape_8            0               0                    -
    /model/encoder/layers.0/self_attn/Transpose_4            0               0                    -
    /model/encoder/layers.0/self_attn/Unsqueeze_15            0               0                    -
    /model/encoder/layers.0/self_attn/Unsqueeze_16            0               0                    -
    /model/encoder/layers.0/self_attn/Constant_22            0               0                    -
    /model/encoder/layers.0/self_attn/Concat_9            0               0                    -
    /model/encoder/layers.0/self_attn/Reshape_9            0               0                    -
    /model/encoder/layers.0/self_attn/out_proj/MatMul      262,144       1,048,576              float32
    /model/encoder/layers.0/self_attn/out_proj/Add          512           2,048              float32
    /model/encoder/layers.0/Add                         0               0                    -
    /model/encoder/layers.0/self_attn_layer_norm/ReduceMean            0               0                    -
    /model/encoder/layers.0/self_attn_layer_norm/Sub            0               0                    -
    /model/encoder/layers.0/self_attn_layer_norm/Constant            0               0                    -
    /model/encoder/layers.0/self_attn_layer_norm/Pow            0               0                    -
    /model/encoder/layers.0/self_attn_layer_norm/ReduceMean_1            0               0                    -
    /model/encoder/layers.0/self_attn_layer_norm/Constant_1            0               0                    -
    /model/encoder/layers.0/self_attn_layer_norm/Add            0               0                    -
    /model/encoder/layers.0/self_attn_layer_norm/Sqrt            0               0                    -
    /model/encoder/layers.0/self_attn_layer_norm/Div            0               0                    -
    /model/encoder/layers.0/self_attn_layer_norm/Mul          512           2,048              float32
    /model/encoder/layers.0/self_attn_layer_norm/Add_1          512           2,048              float32
    /model/encoder/layers.0/fc1/MatMul          1,048,576       4,194,304              float32
    /model/encoder/layers.0/fc1/Add                 2,048           8,192              float32
    [...]
    /model/decoder/shared/Gather               30,471,168     121,884,672              float32
    [...]
    /model/decoder/layers.5/encoder_attn/Unsqueeze_16            0               0                    -
    /model/decoder/layers.5/encoder_attn/Constant_22            0               0                    -
    /model/decoder/layers.5/encoder_attn/Concat_9            0               0                    -
    /model/decoder/layers.5/encoder_attn/Reshape_9            0               0                    -
    /model/decoder/layers.5/encoder_attn/out_proj/MatMul      262,144       1,048,576              float32
    /model/decoder/layers.5/encoder_attn/out_proj/Add          512           2,048              float32
    /model/decoder/layers.5/Add_1                       0               0                    -
    /model/decoder/layers.5/encoder_attn_layer_norm/ReduceMean            0               0                    -
    /model/decoder/layers.5/encoder_attn_layer_norm/Sub            0               0                    -
    /model/decoder/layers.5/encoder_attn_layer_norm/Constant            0               0                    -
    /model/decoder/layers.5/encoder_attn_layer_norm/Pow            0               0                    -
    /model/decoder/layers.5/encoder_attn_layer_norm/ReduceMean_1            0               0                    -
    /model/decoder/layers.5/encoder_attn_layer_norm/Constant_1            0               0                    -
    /model/decoder/layers.5/encoder_attn_layer_norm/Add            0               0                    -
    /model/decoder/layers.5/encoder_attn_layer_norm/Sqrt            0               0                    -
    /model/decoder/layers.5/encoder_attn_layer_norm/Div            0               0                    -
    /model/decoder/layers.5/encoder_attn_layer_norm/Mul          512           2,048              float32
    /model/decoder/layers.5/encoder_attn_layer_norm/Add_1          512           2,048              float32
    /model/decoder/layers.5/fc1/MatMul          1,048,576       4,194,304              float32
    /model/decoder/layers.5/fc1/Add                 2,048           8,192              float32
    /model/decoder/layers.5/activation_fn/Sigmoid            0               0                    -
    /model/decoder/layers.5/activation_fn/Mul            0               0                    -
    /model/decoder/layers.5/fc2/MatMul          1,048,576       4,194,304              float32
    /model/decoder/layers.5/fc2/Add                   512           2,048              float32
    /model/decoder/layers.5/Add_2                       0               0                    -
    /model/decoder/layers.5/final_layer_norm/ReduceMean            0               0                    -
    /model/decoder/layers.5/final_layer_norm/Sub            0               0                    -
    /model/decoder/layers.5/final_layer_norm/Constant            0               0                    -
    /model/decoder/layers.5/final_layer_norm/Pow            0               0                    -
    /model/decoder/layers.5/final_layer_norm/ReduceMean_1            0               0                    -
    /model/decoder/layers.5/final_layer_norm/Constant_1            0               0                    -
    /model/decoder/layers.5/final_layer_norm/Add            0               0                    -
    /model/decoder/layers.5/final_layer_norm/Sqrt            0               0                    -
    /model/decoder/layers.5/final_layer_norm/Div            0               0                    -
    /model/decoder/layers.5/final_layer_norm/Mul          512           2,048              float32
    /model/decoder/layers.5/final_layer_norm/Add_1          512           2,048              float32
    /lm_head/MatMul                            30,471,168     121,884,672              float32
    /Add                                           59,514         238,056              float32
    -----------------------------------------------------------------------------------------------
    Total                                     136,135,802     544,543,208 --------------------