Custom Op - General

General Custom Ops

qonnx.custom_op.general.bipolar_quant

class qonnx.custom_op.general.bipolar_quant.BipolarQuant(onnx_node, onnx_opset_version=11)

Bases: CustomOp

Bipolar quantization operation for QONNX. Takes four inputs: - input tensor to quantize - the scale

The output is a tensor of the same shape as the input tensor, with quantized values.

execute_node(context, graph)

Execute this CustomOp instance, given the execution context and ONNX graph.

get_integer_datatype(model)
get_nodeattr_types()

Returns a dict of permitted attributes for node, where: ret_dict[attribute_name] = (dtype, require, default_value, <allowed_values>) - dtype indicates which member of the ONNX AttributeProto will be utilized - require indicates whether this attribute is required - default_val indicates the default value that will be used if the attribute is not set - <allowed_values> (if specified) indicates that this attribute can only be set to one of the values in the set <allowed_values>. If not specified, all values permitted by dtype are allowed.

get_output_dtype(model)
infer_node_datatype(model)

Set the DataType annotations corresponding to the outputs of this node.

make_shape_compatible_op(model)

Returns a standard ONNX op which is compatible with this CustomOp for performing shape inference.

verify_node()

Verifies that all attributes the node needs are there and that particular attributes are set correctly. Also checks if the number of inputs is equal to the expected number.

qonnx.custom_op.general.bipolar_quant.binary_quant(inp_tensor, scale)

qonnx.custom_op.general.debugmarker

class qonnx.custom_op.general.debugmarker.DebugMarker(onnx_node, onnx_opset_version=11)

Bases: CustomOp

execute_node(context, graph)

Execute this CustomOp instance, given the execution context and ONNX graph.

get_nodeattr_types()

Returns a dict of permitted attributes for node, where: ret_dict[attribute_name] = (dtype, require, default_value, <allowed_values>) - dtype indicates which member of the ONNX AttributeProto will be utilized - require indicates whether this attribute is required - default_val indicates the default value that will be used if the attribute is not set - <allowed_values> (if specified) indicates that this attribute can only be set to one of the values in the set <allowed_values>. If not specified, all values permitted by dtype are allowed.

infer_node_datatype(model)

Set the DataType annotations corresponding to the outputs of this node.

make_shape_compatible_op(model)

Returns a standard ONNX op which is compatible with this CustomOp for performing shape inference.

verify_node()

Verifies that all attributes the node needs are there and that particular attributes are set correctly. Also checks if the number of inputs is equal to the expected number.

qonnx.custom_op.general.genericpartition

class qonnx.custom_op.general.genericpartition.GenericPartition(onnx_node, onnx_opset_version=11)

Bases: CustomOp

Class that corresponds to the meta/container node GenericPartition which is a placeholder for a group of nodes that have been separated out into an ONNX model of its own.

execute_node(context, graph)

Execute this CustomOp instance, given the execution context and ONNX graph.

get_nodeattr_types()

Returns a dict of permitted attributes for node, where: ret_dict[attribute_name] = (dtype, require, default_value, <allowed_values>) - dtype indicates which member of the ONNX AttributeProto will be utilized - require indicates whether this attribute is required - default_val indicates the default value that will be used if the attribute is not set - <allowed_values> (if specified) indicates that this attribute can only be set to one of the values in the set <allowed_values>. If not specified, all values permitted by dtype are allowed.

infer_node_datatype(model)

Set the DataType annotations corresponding to the outputs of this node.

make_shape_compatible_op(model)

Returns a standard ONNX op which is compatible with this CustomOp for performing shape inference.

verify_node()

Verifies that all attributes the node needs are there and that particular attributes are set correctly. Also checks if the number of inputs is equal to the expected number.

qonnx.custom_op.general.im2col

class qonnx.custom_op.general.im2col.Im2Col(onnx_node, onnx_opset_version=11)

Bases: CustomOp

execute_node(context, graph)

Execute this CustomOp instance, given the execution context and ONNX graph.

get_nodeattr_types()

Returns a dict of permitted attributes for node, where: ret_dict[attribute_name] = (dtype, require, default_value, <allowed_values>) - dtype indicates which member of the ONNX AttributeProto will be utilized - require indicates whether this attribute is required - default_val indicates the default value that will be used if the attribute is not set - <allowed_values> (if specified) indicates that this attribute can only be set to one of the values in the set <allowed_values>. If not specified, all values permitted by dtype are allowed.

infer_node_datatype(model)

Set the DataType annotations corresponding to the outputs of this node.

make_shape_compatible_op(model)

Returns a standard ONNX op which is compatible with this CustomOp for performing shape inference.

verify_node()

Verifies that all attributes the node needs are there and that particular attributes are set correctly. Also checks if the number of inputs is equal to the expected number.

qonnx.custom_op.general.im2col.compute_conv_output_dim(ifm_dim, k, stride, total_pad=0, dilation=1)

Returns spatial output dimension size for convolution with given params. total_pad gives the total amount of padding along the entire axis (both sides included).

qonnx.custom_op.general.im2col.get_im2col_indices_nchw(x_shape, field_height, field_width, padding=0, stride_h=1, stride_w=1, dilation_h=1, dilation_w=1)

Returns im2col indices.

qonnx.custom_op.general.im2col.im2col_indices_nchw(x, ifm_h, ifm_w, field_height, field_width, padding=[0, 0, 0, 0], stride_h=1, stride_w=1, pad_val=0, dilation_h=1, dilation_w=1)

Performs im2col on image (2D tensor, possibly with 1-length dummy dimensions) x with given field height and width, as well as values for padding and stride size. Returns result of im2col.

qonnx.custom_op.general.maxpoolnhwc

class qonnx.custom_op.general.maxpoolnhwc.MaxPoolNHWC(onnx_node, onnx_opset_version=11)

Bases: CustomOp

execute_node(context, graph)

Execute this CustomOp instance, given the execution context and ONNX graph.

get_nodeattr_types()

Returns a dict of permitted attributes for node, where: ret_dict[attribute_name] = (dtype, require, default_value, <allowed_values>) - dtype indicates which member of the ONNX AttributeProto will be utilized - require indicates whether this attribute is required - default_val indicates the default value that will be used if the attribute is not set - <allowed_values> (if specified) indicates that this attribute can only be set to one of the values in the set <allowed_values>. If not specified, all values permitted by dtype are allowed.

infer_node_datatype(model)

Set the DataType annotations corresponding to the outputs of this node.

make_shape_compatible_op(model)

Returns a standard ONNX op which is compatible with this CustomOp for performing shape inference.

verify_node()

Verifies that all attributes the node needs are there and that particular attributes are set correctly. Also checks if the number of inputs is equal to the expected number.

qonnx.custom_op.general.maxpoolnhwc.compute_pool_output_dim(ifm_dim, k, stride, pad=0, ceil_mode=0)

Return spatial output dimension size for pooling with given params.

qonnx.custom_op.general.multithreshold

class qonnx.custom_op.general.multithreshold.MultiThreshold(onnx_node, onnx_opset_version=11)

Bases: CustomOp

Class that corresponds to a multithresholding node.

execute_node(context, graph)

Execute this CustomOp instance, given the execution context and ONNX graph.

get_nodeattr_types()

Returns a dict of permitted attributes for node, where: ret_dict[attribute_name] = (dtype, require, default_value, <allowed_values>) - dtype indicates which member of the ONNX AttributeProto will be utilized - require indicates whether this attribute is required - default_val indicates the default value that will be used if the attribute is not set - <allowed_values> (if specified) indicates that this attribute can only be set to one of the values in the set <allowed_values>. If not specified, all values permitted by dtype are allowed.

infer_node_datatype(model)

Set the DataType annotations corresponding to the outputs of this node.

make_shape_compatible_op(model)

Returns a standard ONNX op which is compatible with this CustomOp for performing shape inference.

verify_node()

Verifies that all attributes the node needs are there and that particular attributes are set correctly. Also checks if the number of inputs is equal to the expected number.

qonnx.custom_op.general.multithreshold.multithreshold(v, thresholds, out_scale=None, out_bias=None)

Given a set of threshold values t={t_0, t_1 … t_n} the successive thresholding maps any real number x to an integer in the interval [0, n], where the returned integer is the number of thresholds x is greater than or equal to.

The output tensor will be scaled by out_scale and biased by out_bias.

qonnx.custom_op.general.quant

class qonnx.custom_op.general.quant.Quant(onnx_node, onnx_opset_version=11)

Bases: CustomOp

Generic quantization operation for QONNX. Takes four inputs: - input tensor to quantize - the scale - the zero-point - the bit-width

The output is a tensor of the same shape as the input tensor, with quantized values.

execute_node(context, graph)

Execute this CustomOp instance, given the execution context and ONNX graph.

get_integer_datatype(model)
get_nodeattr_types()

Returns a dict of permitted attributes for node, where: ret_dict[attribute_name] = (dtype, require, default_value, <allowed_values>) - dtype indicates which member of the ONNX AttributeProto will be utilized - require indicates whether this attribute is required - default_val indicates the default value that will be used if the attribute is not set - <allowed_values> (if specified) indicates that this attribute can only be set to one of the values in the set <allowed_values>. If not specified, all values permitted by dtype are allowed.

get_output_dtype(model)
get_scaled_integer_datatype(model)
infer_node_datatype(model)

Set the DataType annotations corresponding to the outputs of this node.

make_shape_compatible_op(model)

Returns a standard ONNX op which is compatible with this CustomOp for performing shape inference.

verify_node()

Verifies that all attributes the node needs are there and that particular attributes are set correctly. Also checks if the number of inputs is equal to the expected number.

qonnx.custom_op.general.quant.max_int(signed: bool, narrow_range: bool, bit_width: int) int

Compute the maximum integer representable by a given number of bits. Args:

signed (bool): Indicates whether the represented integer is signed or not. narrow_range (bool): Indicates whether to narrow the maximum unsigned value represented by 1. bit_width (int): Number of bits available for the representation.

Returns:

Tensor: Maximum integer that can be represented according to the input arguments.

Examples:

>>> max_int(signed=True, narrow_range=True, bit_width=8)
int(127)
>>> max_int(signed=False, narrow_range=True, bit_width=8)
int(254)
>>> max_int(signed=True, narrow_range=False, bit_width=8)
int(127)
>>> max_int(signed=False, narrow_range=False, bit_width=8)
int(255)
qonnx.custom_op.general.quant.min_int(signed: bool, narrow_range: bool, bit_width: int) int

Compute the minimum integer representable by a given number of bits. Args:

signed (bool): Indicates whether the represented integer is signed or not. narrow_range (bool): Indicates whether to narrow the minimum value represented by 1. bit_width (int): Number of bits available for the representation.

Returns:

int: Maximum unsigned integer that can be represented according to the input arguments.

Examples:

>>> min_int(signed=True, narrow_range=True, bit_width=8)
int(-127)
>>> min_int(signed=False, narrow_range=True, bit_width=8)
int(0)
>>> min_int(signed=True, narrow_range=False, bit_width=8)
int(-128)
>>> min_int(signed=False, narrow_range=False, bit_width=8)
int(0)
qonnx.custom_op.general.quant.quant(inp_tensor, scale, zeropt, bitwidth, signed, narrow, rounding_mode)
qonnx.custom_op.general.quant.resolve_rounding_mode(mode_string)

Resolve the rounding mode string of Quant and Trunc ops to the corresponding numpy functions.

qonnx.custom_op.general.quantavgpool2d

class qonnx.custom_op.general.quantavgpool2d.QuantAvgPool2d(onnx_node, onnx_opset_version=11)

Bases: CustomOp

CustomOp that corresponds to the quantized average pooling layer from Brevitas

execute_node(context, graph)

Execute this CustomOp instance, given the execution context and ONNX graph.

get_accum_size()
get_nodeattr_types()

Returns a dict of permitted attributes for node, where: ret_dict[attribute_name] = (dtype, require, default_value, <allowed_values>) - dtype indicates which member of the ONNX AttributeProto will be utilized - require indicates whether this attribute is required - default_val indicates the default value that will be used if the attribute is not set - <allowed_values> (if specified) indicates that this attribute can only be set to one of the values in the set <allowed_values>. If not specified, all values permitted by dtype are allowed.

get_shifts()
infer_node_datatype(model)

Set the DataType annotations corresponding to the outputs of this node.

make_shape_compatible_op(model)

Returns a standard ONNX op which is compatible with this CustomOp for performing shape inference.

verify_node()

Verifies that all attributes the node needs are there and that particular attributes are set correctly. Also checks if the number of inputs is equal to the expected number.

qonnx.custom_op.general.trunc

class qonnx.custom_op.general.trunc.Trunc(onnx_node, onnx_opset_version=11)

Bases: CustomOp

Generic truncation operation for QONNX. Takes four inputs: - input tensor to truncate - the scale - the zero-point - the truncation bit-width

The output is a tensor of the same shape as the input tensor, with truncated values.

execute_node(context, graph)

Execute this CustomOp instance, given the execution context and ONNX graph.

get_nodeattr_types()

Returns a dict of permitted attributes for node, where: ret_dict[attribute_name] = (dtype, require, default_value, <allowed_values>) - dtype indicates which member of the ONNX AttributeProto will be utilized - require indicates whether this attribute is required - default_val indicates the default value that will be used if the attribute is not set - <allowed_values> (if specified) indicates that this attribute can only be set to one of the values in the set <allowed_values>. If not specified, all values permitted by dtype are allowed.

infer_node_datatype(model)

Set the DataType annotations corresponding to the outputs of this node.

make_shape_compatible_op(model)

Returns a standard ONNX op which is compatible with this CustomOp for performing shape inference.

verify_node()

Verifies that all attributes the node needs are there and that particular attributes are set correctly. Also checks if the number of inputs is equal to the expected number.

qonnx.custom_op.general.trunc.trunc(inp_tensor, scale, zeropt, input_bit_width, output_bit_width, rounding_mode)

qonnx.custom_op.general.xnorpopcount

class qonnx.custom_op.general.xnorpopcount.XnorPopcountMatMul(onnx_node, onnx_opset_version=11)

Bases: CustomOp

Class that corresponds to a XNOR-popcount matrix multiplication node.

execute_node(context, graph)

Execute this CustomOp instance, given the execution context and ONNX graph.

get_nodeattr_types()

Returns a dict of permitted attributes for node, where: ret_dict[attribute_name] = (dtype, require, default_value, <allowed_values>) - dtype indicates which member of the ONNX AttributeProto will be utilized - require indicates whether this attribute is required - default_val indicates the default value that will be used if the attribute is not set - <allowed_values> (if specified) indicates that this attribute can only be set to one of the values in the set <allowed_values>. If not specified, all values permitted by dtype are allowed.

infer_node_datatype(model)

Set the DataType annotations corresponding to the outputs of this node.

make_shape_compatible_op(model)

Returns a standard ONNX op which is compatible with this CustomOp for performing shape inference.

verify_node()

Verifies that all attributes the node needs are there and that particular attributes are set correctly. Also checks if the number of inputs is equal to the expected number.

qonnx.custom_op.general.xnorpopcount.xnorpopcountmatmul(inp0, inp1)

Simulates XNOR-popcount matrix multiplication as a regular bipolar matrix multiplication followed by some post processing.