onnx_diagnostic.helpers

onnx_diagnostic.helpers.flatten_object(x: Any, drop_keys: bool = False) Any[source][source]

Flattens the object. It accepts some common classes used in deep learning.

Parameters:
  • x – any object

  • drop_keys – drop the keys if a dictionary is flattened. Keeps the order defined by the dictionary if False, sort them if True.

Returns:

flattened object

onnx_diagnostic.helpers.max_diff(expected: Any, got: Any, verbose: int = 0, level: int = 0, flatten: bool = False, debug_info: List[str] | None = None, begin: int = 0, end: int = -1, _index: int = 0, allow_unique_tensor_with_list_of_one_element: bool = True, hist: bool | List[float] | None = None) Dict[str, float | int | Tuple[int, ...]][source][source]

Returns the maximum discrepancy.

Parameters:
  • expected – expected values

  • got – values

  • verbose – verbosity level

  • level – for embedded outputs, used for debug purpposes

  • flatten – flatten outputs

  • debug_info – debug information

  • begin – first output to considered

  • end – last output to considered (-1 for the last one)

  • _index – used with begin and end

  • allow_unique_tensor_with_list_of_one_element – allow a comparison between a single tensor and a list of one tensor

  • hist – compute an histogram of the discrepancies

Returns:

dictionary with many values

  • abs: max absolute error

  • rel: max relative error

  • sum: sum of the errors

  • n: number of outputs values, if there is one

    output, this number will be the number of elements of this output

  • dnan: difference in the number of nan

You may use string_diff() to display the discrepancies in one string.

onnx_diagnostic.helpers.string_diff(diff: Dict[str, Any]) str[source][source]

Renders discrepancies return by max_diff() into one string.

onnx_diagnostic.helpers.string_sig(f: Callable, kwargs: Dict[str, Any] | None = None) str[source][source]

Displays the signature of a function if the default if the given value is different from

onnx_diagnostic.helpers.string_type(obj: Any, with_shape: bool = False, with_min_max: bool = False, with_device: bool = False, ignore: bool = False, limit: int = 20, verbose: int = 0) str[source][source]

Displays the types of an object as a string.

Parameters:
  • obj – any

  • with_shape – displays shapes as well

  • with_min_max – displays information about the values

  • with_device – display the device

  • ignore – if True, just prints the type for unknown types

  • verbose – verbosity (to show the path it followed to get that print)

Returns:

str

The function displays something like the following for a tensor.

T7s2x7[0.5:6:A3.56]
^^^+-^^----+------^
|| |       |
|| |       +-- information about the content of a tensor or array
|| |           [min,max:A<average>]
|| |
|| +-- a shape
||
|+-- integer following the code defined by onnx.TensorProto,
|    7 is onnx.TensorProto.INT64 (see onnx_dtype_name)
|
+-- A,T,F
    A is an array from numpy
    T is a Tensor from pytorch
    F is a FakeTensor from pytorch

The element types for a tensor are displayed as integer to shorten the message. The semantic is defined by onnx.TensorProto and can be obtained by onnx_diagnostic.helpers.onnx_helper.onnx_dtype_name().

<<<

from onnx_diagnostic.helpers import string_type

print(string_type((1, ["r", 6.6])))

>>>

    (int,#2[str,float])

With pytorch:

<<<

import torch
from onnx_diagnostic.helpers import string_type

inputs = (
    torch.rand((3, 4), dtype=torch.float16),
    [
        torch.rand((5, 6), dtype=torch.float16),
        torch.rand((5, 6, 7), dtype=torch.float16),
    ],
)

# with shapes
print(string_type(inputs, with_shape=True))

# with min max
print(string_type(inputs, with_shape=True, with_min_max=True))

>>>

    (T10s3x4,#2[T10s5x6,T10s5x6x7])
    (T10s3x4[0.0625,0.9267578125:A0.4659423828125],#2[T10s5x6[0.01025390625,0.990234375:A0.499267578125],T10s5x6x7[0.0048828125,0.9892578125:A0.4501441592261905]])