mct-nightly 2.2.0.20241201.617__py3-none-any.whl → 2.2.0.20241202.131715__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. {mct_nightly-2.2.0.20241201.617.dist-info → mct_nightly-2.2.0.20241202.131715.dist-info}/METADATA +1 -1
  2. {mct_nightly-2.2.0.20241201.617.dist-info → mct_nightly-2.2.0.20241202.131715.dist-info}/RECORD +58 -58
  3. model_compression_toolkit/__init__.py +1 -1
  4. model_compression_toolkit/constants.py +0 -3
  5. model_compression_toolkit/core/common/graph/base_node.py +7 -5
  6. model_compression_toolkit/core/common/graph/functional_node.py +1 -1
  7. model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/resource_utilization_data.py +2 -2
  8. model_compression_toolkit/core/common/quantization/candidate_node_quantization_config.py +2 -2
  9. model_compression_toolkit/core/common/quantization/node_quantization_config.py +2 -2
  10. model_compression_toolkit/core/common/quantization/quantization_params_generation/qparams_activations_computation.py +2 -1
  11. model_compression_toolkit/core/common/quantization/set_node_quantization_config.py +1 -1
  12. model_compression_toolkit/core/common/statistics_correction/apply_activation_bias_correction_to_graph.py +1 -1
  13. model_compression_toolkit/core/common/statistics_correction/apply_bias_correction_to_graph.py +1 -1
  14. model_compression_toolkit/core/common/substitutions/batchnorm_reconstruction.py +2 -2
  15. model_compression_toolkit/core/common/substitutions/shift_negative_activation.py +2 -2
  16. model_compression_toolkit/core/keras/back2framework/keras_model_builder.py +5 -1
  17. model_compression_toolkit/metadata.py +14 -5
  18. model_compression_toolkit/target_platform_capabilities/schema/__init__.py +14 -0
  19. model_compression_toolkit/target_platform_capabilities/schema/mct_current_schema.py +11 -0
  20. model_compression_toolkit/target_platform_capabilities/schema/schema_functions.py +37 -0
  21. model_compression_toolkit/target_platform_capabilities/{target_platform/op_quantization_config.py → schema/v1.py} +377 -24
  22. model_compression_toolkit/target_platform_capabilities/target_platform/__init__.py +3 -5
  23. model_compression_toolkit/target_platform_capabilities/target_platform/target_platform_model.py +2 -214
  24. model_compression_toolkit/target_platform_capabilities/target_platform/targetplatform2framework/operations_to_layers.py +1 -2
  25. model_compression_toolkit/target_platform_capabilities/target_platform/targetplatform2framework/target_platform_capabilities.py +6 -10
  26. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1/tp_model.py +39 -32
  27. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1/tpc_keras.py +3 -2
  28. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1/tpc_pytorch.py +3 -5
  29. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1_lut/tp_model.py +36 -31
  30. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1_lut/tpc_keras.py +3 -2
  31. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1_lut/tpc_pytorch.py +3 -4
  32. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1_pot/tp_model.py +37 -32
  33. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1_pot/tpc_keras.py +3 -2
  34. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1_pot/tpc_pytorch.py +3 -4
  35. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v2/tp_model.py +39 -32
  36. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v2/tpc_keras.py +3 -2
  37. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v2/tpc_pytorch.py +3 -4
  38. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v2_lut/tp_model.py +36 -31
  39. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v2_lut/tpc_keras.py +3 -2
  40. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v2_lut/tpc_pytorch.py +3 -4
  41. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v3/tp_model.py +45 -38
  42. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v3/tpc_keras.py +3 -2
  43. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v3/tpc_pytorch.py +3 -4
  44. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v3_lut/tp_model.py +37 -32
  45. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v3_lut/tpc_keras.py +3 -2
  46. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v3_lut/tpc_pytorch.py +3 -4
  47. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v4/tp_model.py +70 -62
  48. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v4/tpc_keras.py +3 -2
  49. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v4/tpc_pytorch.py +3 -4
  50. model_compression_toolkit/target_platform_capabilities/tpc_models/qnnpack_tpc/v1/tp_model.py +22 -17
  51. model_compression_toolkit/target_platform_capabilities/tpc_models/qnnpack_tpc/v1/tpc_keras.py +3 -4
  52. model_compression_toolkit/target_platform_capabilities/tpc_models/qnnpack_tpc/v1/tpc_pytorch.py +3 -4
  53. model_compression_toolkit/target_platform_capabilities/tpc_models/tflite_tpc/v1/tp_model.py +56 -51
  54. model_compression_toolkit/target_platform_capabilities/tpc_models/tflite_tpc/v1/tpc_keras.py +3 -4
  55. model_compression_toolkit/target_platform_capabilities/tpc_models/tflite_tpc/v1/tpc_pytorch.py +3 -4
  56. model_compression_toolkit/target_platform_capabilities/target_platform/fusing.py +0 -85
  57. model_compression_toolkit/target_platform_capabilities/target_platform/operators.py +0 -87
  58. model_compression_toolkit/target_platform_capabilities/target_platform/target_platform_model_component.py +0 -40
  59. {mct_nightly-2.2.0.20241201.617.dist-info → mct_nightly-2.2.0.20241202.131715.dist-info}/LICENSE.md +0 -0
  60. {mct_nightly-2.2.0.20241201.617.dist-info → mct_nightly-2.2.0.20241202.131715.dist-info}/WHEEL +0 -0
  61. {mct_nightly-2.2.0.20241201.617.dist-info → mct_nightly-2.2.0.20241202.131715.dist-info}/top_level.txt +0 -0
@@ -24,12 +24,9 @@ from model_compression_toolkit.target_platform_capabilities.target_platform.targ
24
24
  from model_compression_toolkit.target_platform_capabilities.target_platform.targetplatform2framework.target_platform_capabilities_component import TargetPlatformCapabilitiesComponent
25
25
  from model_compression_toolkit.target_platform_capabilities.target_platform.targetplatform2framework.layer_filter_params import LayerFilterParams
26
26
  from model_compression_toolkit.target_platform_capabilities.immutable import ImmutableClass
27
- from model_compression_toolkit.target_platform_capabilities.target_platform.op_quantization_config import QuantizationConfigOptions, \
28
- OpQuantizationConfig
29
- from model_compression_toolkit.target_platform_capabilities.target_platform.operators import OperatorsSetBase
30
- from model_compression_toolkit.target_platform_capabilities.target_platform.target_platform_model import TargetPlatformModel
27
+ from model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema import TargetPlatformModel, OperatorsSetBase, \
28
+ OpQuantizationConfig, QuantizationConfigOptions
31
29
  from model_compression_toolkit.target_platform_capabilities.target_platform.targetplatform2framework.current_tpc import _current_tpc
32
- from model_compression_toolkit.constants import MCT_VERSION, TPC_VERSION
33
30
 
34
31
 
35
32
  class TargetPlatformCapabilities(ImmutableClass):
@@ -38,14 +35,12 @@ class TargetPlatformCapabilities(ImmutableClass):
38
35
  """
39
36
  def __init__(self,
40
37
  tp_model: TargetPlatformModel,
41
- name: str = "base",
42
- version: str = None):
38
+ name: str = "base"):
43
39
  """
44
40
 
45
41
  Args:
46
42
  tp_model (TargetPlatformModel): Modeled hardware to attach framework information to.
47
43
  name (str): Name of the TargetPlatformCapabilities.
48
- version (str): TPC version.
49
44
  """
50
45
 
51
46
  super().__init__()
@@ -57,7 +52,6 @@ class TargetPlatformCapabilities(ImmutableClass):
57
52
  # Track the unused opsets for warning purposes.
58
53
  self.__tp_model_opsets_not_used = [s.name for s in tp_model.operator_set]
59
54
  self.remove_fusing_names_from_not_used_list()
60
- self.version = version
61
55
 
62
56
  def get_layers_by_opset_name(self, opset_name: str) -> List[Any]:
63
57
  """
@@ -117,7 +111,9 @@ class TargetPlatformCapabilities(ImmutableClass):
117
111
 
118
112
  """
119
113
  return {"Target Platform Capabilities": self.name,
120
- "Version": self.version,
114
+ "Minor version": self.tp_model.tpc_minor_version,
115
+ "Patch version": self.tp_model.tpc_patch_version,
116
+ "Platform type": self.tp_model.tpc_platform_type,
121
117
  "Target Platform Model": self.tp_model.get_info(),
122
118
  "Operations to layers": {op2layer.name:[l.__name__ for l in op2layer.layers] for op2layer in self.op_sets_to_layers.op_sets_to_layers}}
123
119
 
@@ -15,12 +15,12 @@
15
15
  from typing import List, Tuple
16
16
 
17
17
  import model_compression_toolkit as mct
18
+ import model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema as schema
18
19
  from model_compression_toolkit.constants import FLOAT_BITWIDTH
19
- from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, BIAS_ATTR, WEIGHTS_N_BITS
20
- from model_compression_toolkit.target_platform_capabilities.target_platform import OpQuantizationConfig, \
21
- TargetPlatformModel, Signedness
22
- from model_compression_toolkit.target_platform_capabilities.target_platform.op_quantization_config import \
23
- AttributeQuantizationConfig
20
+ from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, BIAS_ATTR, WEIGHTS_N_BITS, \
21
+ IMX500_TP_MODEL
22
+ from model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema import TargetPlatformModel, Signedness, \
23
+ AttributeQuantizationConfig, OpQuantizationConfig
24
24
 
25
25
  tp = mct.target_platform
26
26
 
@@ -63,7 +63,8 @@ def get_op_quantization_configs() -> Tuple[OpQuantizationConfig, List[OpQuantiza
63
63
  weights_quantization_method=tp.QuantizationMethod.POWER_OF_TWO,
64
64
  weights_n_bits=8,
65
65
  weights_per_channel_threshold=False,
66
- enable_weights_quantization=False, # TODO: this will changed to True once implementing multi-attributes quantization
66
+ enable_weights_quantization=False,
67
+ # TODO: this will changed to True once implementing multi-attributes quantization
67
68
  lut_values_bitwidth=None)
68
69
 
69
70
  # define a quantization config to quantize the kernel (for layers where there is a kernel attribute).
@@ -88,7 +89,7 @@ def get_op_quantization_configs() -> Tuple[OpQuantizationConfig, List[OpQuantiza
88
89
 
89
90
  # We define a default config for operation without kernel attribute.
90
91
  # This is the default config that should be used for non-linear operations.
91
- eight_bits_default = tp.OpQuantizationConfig(
92
+ eight_bits_default = schema.OpQuantizationConfig(
92
93
  default_weight_attr_config=default_weight_attr_config,
93
94
  attr_weights_configs_mapping={},
94
95
  activation_quantization_method=tp.QuantizationMethod.POWER_OF_TWO,
@@ -102,7 +103,7 @@ def get_op_quantization_configs() -> Tuple[OpQuantizationConfig, List[OpQuantiza
102
103
  signedness=Signedness.AUTO)
103
104
 
104
105
  # We define an 8-bit config for linear operations quantization, that include a kernel and bias attributes.
105
- linear_eight_bits = tp.OpQuantizationConfig(
106
+ linear_eight_bits = schema.OpQuantizationConfig(
106
107
  default_weight_attr_config=default_weight_attr_config,
107
108
  attr_weights_configs_mapping={KERNEL_ATTR: kernel_base_config, BIAS_ATTR: bias_config},
108
109
  activation_quantization_method=tp.QuantizationMethod.POWER_OF_TWO,
@@ -152,12 +153,18 @@ def generate_tp_model(default_config: OpQuantizationConfig,
152
153
  # of possible configurations to consider when quantizing a set of operations (in mixed-precision, for example).
153
154
  # If the QuantizationConfigOptions contains only one configuration,
154
155
  # this configuration will be used for the operation quantization:
155
- default_configuration_options = tp.QuantizationConfigOptions([default_config])
156
+ default_configuration_options = schema.QuantizationConfigOptions([default_config])
156
157
 
157
158
  # Create a TargetPlatformModel and set its default quantization config.
158
159
  # This default configuration will be used for all operations
159
160
  # unless specified otherwise (see OperatorsSet, for example):
160
- generated_tpc = tp.TargetPlatformModel(default_configuration_options, name=name)
161
+ generated_tpc = schema.TargetPlatformModel(
162
+ default_configuration_options,
163
+ tpc_minor_version=1,
164
+ tpc_patch_version=0,
165
+ tpc_platform_type=IMX500_TP_MODEL,
166
+ name=name,
167
+ add_metadata=False)
161
168
 
162
169
  # To start defining the model's components (such as operator sets, and fusing patterns),
163
170
  # use 'with' the TargetPlatformModel instance, and create them as below:
@@ -172,42 +179,42 @@ def generate_tp_model(default_config: OpQuantizationConfig,
172
179
 
173
180
  # May suit for operations like: Dropout, Reshape, etc.
174
181
  default_qco = tp.get_default_quantization_config_options()
175
- tp.OperatorsSet("NoQuantization",
176
- default_qco.clone_and_edit(enable_activation_quantization=False)
177
- .clone_and_edit_weight_attribute(enable_weights_quantization=False))
182
+ schema.OperatorsSet("NoQuantization",
183
+ default_qco.clone_and_edit(enable_activation_quantization=False)
184
+ .clone_and_edit_weight_attribute(enable_weights_quantization=False))
178
185
 
179
186
  # Create Mixed-Precision quantization configuration options from the given list of OpQuantizationConfig objects
180
- mixed_precision_configuration_options = tp.QuantizationConfigOptions(mixed_precision_cfg_list,
181
- base_config=base_config)
187
+ mixed_precision_configuration_options = schema.QuantizationConfigOptions(mixed_precision_cfg_list,
188
+ base_config=base_config)
182
189
 
183
190
  # Define operator sets that use mixed_precision_configuration_options:
184
- conv = tp.OperatorsSet("Conv", mixed_precision_configuration_options)
185
- fc = tp.OperatorsSet("FullyConnected", mixed_precision_configuration_options)
191
+ conv = schema.OperatorsSet("Conv", mixed_precision_configuration_options)
192
+ fc = schema.OperatorsSet("FullyConnected", mixed_precision_configuration_options)
186
193
 
187
194
  # Define operations sets without quantization configuration
188
195
  # options (useful for creating fusing patterns, for example):
189
- any_relu = tp.OperatorsSet("AnyReLU")
190
- add = tp.OperatorsSet("Add")
191
- sub = tp.OperatorsSet("Sub")
192
- mul = tp.OperatorsSet("Mul")
193
- div = tp.OperatorsSet("Div")
194
- prelu = tp.OperatorsSet("PReLU")
195
- swish = tp.OperatorsSet("Swish")
196
- sigmoid = tp.OperatorsSet("Sigmoid")
197
- tanh = tp.OperatorsSet("Tanh")
196
+ any_relu = schema.OperatorsSet("AnyReLU")
197
+ add = schema.OperatorsSet("Add")
198
+ sub = schema.OperatorsSet("Sub")
199
+ mul = schema.OperatorsSet("Mul")
200
+ div = schema.OperatorsSet("Div")
201
+ prelu = schema.OperatorsSet("PReLU")
202
+ swish = schema.OperatorsSet("Swish")
203
+ sigmoid = schema.OperatorsSet("Sigmoid")
204
+ tanh = schema.OperatorsSet("Tanh")
198
205
 
199
206
  # Combine multiple operators into a single operator to avoid quantization between
200
207
  # them. To do this we define fusing patterns using the OperatorsSets that were created.
201
208
  # To group multiple sets with regard to fusing, an OperatorSetConcat can be created
202
- activations_after_conv_to_fuse = tp.OperatorSetConcat(any_relu, swish, prelu, sigmoid, tanh)
203
- activations_after_fc_to_fuse = tp.OperatorSetConcat(any_relu, swish, sigmoid)
204
- any_binary = tp.OperatorSetConcat(add, sub, mul, div)
209
+ activations_after_conv_to_fuse = schema.OperatorSetConcat(any_relu, swish, prelu, sigmoid, tanh)
210
+ activations_after_fc_to_fuse = schema.OperatorSetConcat(any_relu, swish, sigmoid)
211
+ any_binary = schema.OperatorSetConcat(add, sub, mul, div)
205
212
 
206
213
  # ------------------- #
207
214
  # Fusions
208
215
  # ------------------- #
209
- tp.Fusing([conv, activations_after_conv_to_fuse])
210
- tp.Fusing([fc, activations_after_fc_to_fuse])
211
- tp.Fusing([any_binary, any_relu])
216
+ schema.Fusing([conv, activations_after_conv_to_fuse])
217
+ schema.Fusing([fc, activations_after_fc_to_fuse])
218
+ schema.Fusing([any_binary, any_relu])
212
219
 
213
220
  return generated_tpc
@@ -15,6 +15,7 @@
15
15
  import tensorflow as tf
16
16
  from packaging import version
17
17
 
18
+ from model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema import TargetPlatformModel
18
19
  from model_compression_toolkit.defaultdict import DefaultDict
19
20
  from model_compression_toolkit.verify_packages import FOUND_SONY_CUSTOM_LAYERS
20
21
  from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, KERAS_DEPTHWISE_KERNEL, \
@@ -48,7 +49,7 @@ def get_keras_tpc() -> tp.TargetPlatformCapabilities:
48
49
  return generate_keras_tpc(name='imx500_tpc_keras_tpc', tp_model=imx500_tpc_tp_model)
49
50
 
50
51
 
51
- def generate_keras_tpc(name: str, tp_model: tp.TargetPlatformModel):
52
+ def generate_keras_tpc(name: str, tp_model: TargetPlatformModel):
52
53
  """
53
54
  Generates a TargetPlatformCapabilities object with default operation sets to layers mapping.
54
55
 
@@ -59,7 +60,7 @@ def generate_keras_tpc(name: str, tp_model: tp.TargetPlatformModel):
59
60
  Returns: a TargetPlatformCapabilities object for the given TargetPlatformModel.
60
61
  """
61
62
 
62
- keras_tpc = tp.TargetPlatformCapabilities(tp_model, name=name, version=TPC_VERSION)
63
+ keras_tpc = tp.TargetPlatformCapabilities(tp_model)
63
64
 
64
65
  no_quant_list = [Reshape,
65
66
  tf.reshape,
@@ -23,12 +23,12 @@ from torch.nn import Dropout, Flatten, Hardtanh
23
23
  from torch.nn import ReLU, ReLU6, PReLU, SiLU, Sigmoid, Tanh, Hardswish, LeakyReLU
24
24
  from torch.nn.functional import relu, relu6, prelu, silu, hardtanh, hardswish, leaky_relu
25
25
 
26
+ from model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema import TargetPlatformModel
26
27
  from model_compression_toolkit.defaultdict import DefaultDict
27
28
  from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, BIAS_ATTR, PYTORCH_KERNEL, \
28
29
  BIAS
29
30
  from model_compression_toolkit.target_platform_capabilities.tpc_models.imx500_tpc.v1.tp_model import get_tp_model
30
31
  import model_compression_toolkit as mct
31
- from model_compression_toolkit.target_platform_capabilities.tpc_models.imx500_tpc.v1 import __version__ as TPC_VERSION
32
32
 
33
33
  tp = mct.target_platform
34
34
 
@@ -42,7 +42,7 @@ def get_pytorch_tpc() -> tp.TargetPlatformCapabilities:
42
42
  return generate_pytorch_tpc(name='imx500_tpc_pytorch_tpc', tp_model=imx500_tpc_tp_model)
43
43
 
44
44
 
45
- def generate_pytorch_tpc(name: str, tp_model: tp.TargetPlatformModel):
45
+ def generate_pytorch_tpc(name: str, tp_model: TargetPlatformModel):
46
46
  """
47
47
  Generates a TargetPlatformCapabilities object with default operation sets to layers mapping.
48
48
  Args:
@@ -51,9 +51,7 @@ def generate_pytorch_tpc(name: str, tp_model: tp.TargetPlatformModel):
51
51
  Returns: a TargetPlatformCapabilities object for the given TargetPlatformModel.
52
52
  """
53
53
 
54
- pytorch_tpc = tp.TargetPlatformCapabilities(tp_model,
55
- name=name,
56
- version=TPC_VERSION)
54
+ pytorch_tpc = tp.TargetPlatformCapabilities(tp_model)
57
55
 
58
56
  # we provide attributes mapping that maps each layer type in the operations set
59
57
  # that has weights attributes with provided quantization config (in the tp model) to
@@ -15,13 +15,12 @@
15
15
  from typing import List, Tuple
16
16
 
17
17
  import model_compression_toolkit as mct
18
+ import model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema as schema
18
19
  from model_compression_toolkit.constants import FLOAT_BITWIDTH
19
20
  from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, BIAS_ATTR, WEIGHTS_N_BITS, \
20
- WEIGHTS_QUANTIZATION_METHOD
21
- from model_compression_toolkit.target_platform_capabilities.target_platform import OpQuantizationConfig, \
22
- TargetPlatformModel, Signedness
23
- from model_compression_toolkit.target_platform_capabilities.target_platform.op_quantization_config import \
24
- AttributeQuantizationConfig
21
+ WEIGHTS_QUANTIZATION_METHOD, IMX500_TP_MODEL
22
+ from model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema import TargetPlatformModel, Signedness, \
23
+ AttributeQuantizationConfig, OpQuantizationConfig
25
24
 
26
25
  tp = mct.target_platform
27
26
 
@@ -84,7 +83,7 @@ def get_op_quantization_configs() -> Tuple[OpQuantizationConfig, List[OpQuantiza
84
83
 
85
84
  # We define a default config for operation without kernel attribute.
86
85
  # This is the default config that should be used for non-linear operations.
87
- eight_bits_default = tp.OpQuantizationConfig(
86
+ eight_bits_default = schema.OpQuantizationConfig(
88
87
  default_weight_attr_config=default_weight_attr_config,
89
88
  attr_weights_configs_mapping={},
90
89
  activation_quantization_method=tp.QuantizationMethod.POWER_OF_TWO,
@@ -98,7 +97,7 @@ def get_op_quantization_configs() -> Tuple[OpQuantizationConfig, List[OpQuantiza
98
97
  signedness=Signedness.AUTO)
99
98
 
100
99
  # We define an 8-bit config for linear operations quantization, that include a kernel and bias attributes.
101
- linear_eight_bits = tp.OpQuantizationConfig(
100
+ linear_eight_bits = schema.OpQuantizationConfig(
102
101
  default_weight_attr_config=default_weight_attr_config,
103
102
  attr_weights_configs_mapping={KERNEL_ATTR: kernel_base_config, BIAS_ATTR: bias_config},
104
103
  activation_quantization_method=tp.QuantizationMethod.POWER_OF_TWO,
@@ -151,12 +150,18 @@ def generate_tp_model(default_config: OpQuantizationConfig,
151
150
  # of possible configurations to consider when quantizing a set of operations (in mixed-precision, for example).
152
151
  # If the QuantizationConfigOptions contains only one configuration,
153
152
  # this configuration will be used for the operation quantization:
154
- default_configuration_options = tp.QuantizationConfigOptions([default_config])
153
+ default_configuration_options = schema.QuantizationConfigOptions([default_config])
155
154
 
156
155
  # Create a TargetPlatformModel and set its default quantization config.
157
156
  # This default configuration will be used for all operations
158
157
  # unless specified otherwise (see OperatorsSet, for example):
159
- generated_tpc = tp.TargetPlatformModel(default_configuration_options, name=name)
158
+ generated_tpc = schema.TargetPlatformModel(
159
+ default_configuration_options,
160
+ tpc_minor_version=1,
161
+ tpc_patch_version=0,
162
+ tpc_platform_type=IMX500_TP_MODEL,
163
+ add_metadata=False,
164
+ name=name)
160
165
 
161
166
  # To start defining the model's components (such as operator sets, and fusing patterns),
162
167
  # use 'with' the TargetPlatformModel instance, and create them as below:
@@ -169,42 +174,42 @@ def generate_tp_model(default_config: OpQuantizationConfig,
169
174
 
170
175
  # May suit for operations like: Dropout, Reshape, etc.
171
176
  default_qco = tp.get_default_quantization_config_options()
172
- tp.OperatorsSet("NoQuantization",
173
- default_qco.clone_and_edit(enable_activation_quantization=False)
174
- .clone_and_edit_weight_attribute(enable_weights_quantization=False))
177
+ schema.OperatorsSet("NoQuantization",
178
+ default_qco.clone_and_edit(enable_activation_quantization=False)
179
+ .clone_and_edit_weight_attribute(enable_weights_quantization=False))
175
180
 
176
181
  # Create Mixed-Precision quantization configuration options from the given list of OpQuantizationConfig objects
177
- mixed_precision_configuration_options = tp.QuantizationConfigOptions(mixed_precision_cfg_list,
178
- base_config=base_config)
182
+ mixed_precision_configuration_options = schema.QuantizationConfigOptions(mixed_precision_cfg_list,
183
+ base_config=base_config)
179
184
 
180
185
  # Define operator sets that use mixed_precision_configuration_options:
181
- conv = tp.OperatorsSet("Conv", mixed_precision_configuration_options)
182
- fc = tp.OperatorsSet("FullyConnected", mixed_precision_configuration_options)
186
+ conv = schema.OperatorsSet("Conv", mixed_precision_configuration_options)
187
+ fc = schema.OperatorsSet("FullyConnected", mixed_precision_configuration_options)
183
188
 
184
189
  # Define operations sets without quantization configuration
185
190
  # options (useful for creating fusing patterns, for example):
186
- any_relu = tp.OperatorsSet("AnyReLU")
187
- add = tp.OperatorsSet("Add")
188
- sub = tp.OperatorsSet("Sub")
189
- mul = tp.OperatorsSet("Mul")
190
- div = tp.OperatorsSet("Div")
191
- prelu = tp.OperatorsSet("PReLU")
192
- swish = tp.OperatorsSet("Swish")
193
- sigmoid = tp.OperatorsSet("Sigmoid")
194
- tanh = tp.OperatorsSet("Tanh")
191
+ any_relu = schema.OperatorsSet("AnyReLU")
192
+ add = schema.OperatorsSet("Add")
193
+ sub = schema.OperatorsSet("Sub")
194
+ mul = schema.OperatorsSet("Mul")
195
+ div = schema.OperatorsSet("Div")
196
+ prelu = schema.OperatorsSet("PReLU")
197
+ swish = schema.OperatorsSet("Swish")
198
+ sigmoid = schema.OperatorsSet("Sigmoid")
199
+ tanh = schema.OperatorsSet("Tanh")
195
200
 
196
201
  # Combine multiple operators into a single operator to avoid quantization between
197
202
  # them. To do this we define fusing patterns using the OperatorsSets that were created.
198
203
  # To group multiple sets with regard to fusing, an OperatorSetConcat can be created
199
- activations_after_conv_to_fuse = tp.OperatorSetConcat(any_relu, swish, prelu, sigmoid, tanh)
200
- activations_after_fc_to_fuse = tp.OperatorSetConcat(any_relu, swish, sigmoid)
201
- any_binary = tp.OperatorSetConcat(add, sub, mul, div)
204
+ activations_after_conv_to_fuse = schema.OperatorSetConcat(any_relu, swish, prelu, sigmoid, tanh)
205
+ activations_after_fc_to_fuse = schema.OperatorSetConcat(any_relu, swish, sigmoid)
206
+ any_binary = schema.OperatorSetConcat(add, sub, mul, div)
202
207
 
203
208
  # ------------------- #
204
209
  # Fusions
205
210
  # ------------------- #
206
- tp.Fusing([conv, activations_after_conv_to_fuse])
207
- tp.Fusing([fc, activations_after_fc_to_fuse])
208
- tp.Fusing([any_binary, any_relu])
211
+ schema.Fusing([conv, activations_after_conv_to_fuse])
212
+ schema.Fusing([fc, activations_after_fc_to_fuse])
213
+ schema.Fusing([any_binary, any_relu])
209
214
 
210
215
  return generated_tpc
@@ -15,6 +15,7 @@
15
15
  import tensorflow as tf
16
16
  from packaging import version
17
17
 
18
+ from model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema import TargetPlatformModel
18
19
  from model_compression_toolkit.defaultdict import DefaultDict
19
20
  from model_compression_toolkit.verify_packages import FOUND_SONY_CUSTOM_LAYERS
20
21
  from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, KERAS_KERNEL, BIAS_ATTR, \
@@ -48,7 +49,7 @@ def get_keras_tpc() -> tp.TargetPlatformCapabilities:
48
49
  return generate_keras_tpc(name='imx500_tpc_keras_tpc', tp_model=imx500_tpc_tp_model)
49
50
 
50
51
 
51
- def generate_keras_tpc(name: str, tp_model: tp.TargetPlatformModel):
52
+ def generate_keras_tpc(name: str, tp_model: TargetPlatformModel):
52
53
  """
53
54
  Generates a TargetPlatformCapabilities object with default operation sets to layers mapping.
54
55
 
@@ -59,7 +60,7 @@ def generate_keras_tpc(name: str, tp_model: tp.TargetPlatformModel):
59
60
  Returns: a TargetPlatformCapabilities object for the given TargetPlatformModel.
60
61
  """
61
62
 
62
- keras_tpc = tp.TargetPlatformCapabilities(tp_model, name=name, version=TPC_VERSION)
63
+ keras_tpc = tp.TargetPlatformCapabilities(tp_model)
63
64
 
64
65
  no_quant_list = [Reshape,
65
66
  tf.reshape,
@@ -23,6 +23,7 @@ from torch.nn import Dropout, Flatten, Hardtanh
23
23
  from torch.nn import ReLU, ReLU6, PReLU, SiLU, Sigmoid, Tanh, Hardswish, LeakyReLU
24
24
  from torch.nn.functional import relu, relu6, prelu, silu, hardtanh, hardswish, leaky_relu
25
25
 
26
+ import model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema as schema
26
27
  from model_compression_toolkit.defaultdict import DefaultDict
27
28
  from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, PYTORCH_KERNEL, BIAS_ATTR, \
28
29
  BIAS
@@ -42,7 +43,7 @@ def get_pytorch_tpc() -> tp.TargetPlatformCapabilities:
42
43
  return generate_pytorch_tpc(name='imx500_tpc_pytorch_tpc', tp_model=imx500_tpc_tp_model)
43
44
 
44
45
 
45
- def generate_pytorch_tpc(name: str, tp_model: tp.TargetPlatformModel):
46
+ def generate_pytorch_tpc(name: str, tp_model: schema.TargetPlatformModel):
46
47
  """
47
48
  Generates a TargetPlatformCapabilities object with default operation sets to layers mapping.
48
49
  Args:
@@ -51,9 +52,7 @@ def generate_pytorch_tpc(name: str, tp_model: tp.TargetPlatformModel):
51
52
  Returns: a TargetPlatformCapabilities object for the given TargetPlatformModel.
52
53
  """
53
54
 
54
- pytorch_tpc = tp.TargetPlatformCapabilities(tp_model,
55
- name=name,
56
- version=TPC_VERSION)
55
+ pytorch_tpc = tp.TargetPlatformCapabilities(tp_model)
57
56
 
58
57
  # we provide attributes mapping that maps each layer type in the operations set
59
58
  # that has weights attributes with provided quantization config (in the tp model) to
@@ -15,13 +15,12 @@
15
15
  from typing import List, Tuple
16
16
 
17
17
  import model_compression_toolkit as mct
18
+ import model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema as schema
18
19
  from model_compression_toolkit.constants import FLOAT_BITWIDTH
19
- from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, BIAS_ATTR, WEIGHTS_N_BITS
20
- from model_compression_toolkit.target_platform_capabilities.target_platform import OpQuantizationConfig, \
21
- TargetPlatformModel, Signedness
22
- from model_compression_toolkit.target_platform_capabilities.target_platform.op_quantization_config import \
23
- AttributeQuantizationConfig
24
-
20
+ from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, BIAS_ATTR, WEIGHTS_N_BITS, \
21
+ IMX500_TP_MODEL
22
+ from model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema import TargetPlatformModel, Signedness, \
23
+ AttributeQuantizationConfig, OpQuantizationConfig
25
24
 
26
25
  tp = mct.target_platform
27
26
 
@@ -84,7 +83,7 @@ def get_op_quantization_configs() -> Tuple[OpQuantizationConfig, List[OpQuantiza
84
83
 
85
84
  # We define a default config for operation without kernel attribute.
86
85
  # This is the default config that should be used for non-linear operations.
87
- eight_bits_default = tp.OpQuantizationConfig(
86
+ eight_bits_default = schema.OpQuantizationConfig(
88
87
  default_weight_attr_config=default_weight_attr_config,
89
88
  attr_weights_configs_mapping={},
90
89
  activation_quantization_method=tp.QuantizationMethod.POWER_OF_TWO,
@@ -98,7 +97,7 @@ def get_op_quantization_configs() -> Tuple[OpQuantizationConfig, List[OpQuantiza
98
97
  signedness=Signedness.AUTO)
99
98
 
100
99
  # We define an 8-bit config for linear operations quantization, that include a kernel and bias attributes.
101
- linear_eight_bits = tp.OpQuantizationConfig(
100
+ linear_eight_bits = schema.OpQuantizationConfig(
102
101
  activation_quantization_method=tp.QuantizationMethod.POWER_OF_TWO,
103
102
  default_weight_attr_config=default_weight_attr_config,
104
103
  attr_weights_configs_mapping={KERNEL_ATTR: kernel_base_config, BIAS_ATTR: bias_config},
@@ -147,12 +146,18 @@ def generate_tp_model(default_config: OpQuantizationConfig,
147
146
  # of possible configurations to consider when quantizing a set of operations (in mixed-precision, for example).
148
147
  # If the QuantizationConfigOptions contains only one configuration,
149
148
  # this configuration will be used for the operation quantization:
150
- default_configuration_options = tp.QuantizationConfigOptions([default_config])
149
+ default_configuration_options = schema.QuantizationConfigOptions([default_config])
151
150
 
152
151
  # Create a TargetPlatformModel and set its default quantization config.
153
152
  # This default configuration will be used for all operations
154
153
  # unless specified otherwise (see OperatorsSet, for example):
155
- generated_tpc = tp.TargetPlatformModel(default_configuration_options, name=name)
154
+ generated_tpc = schema.TargetPlatformModel(
155
+ default_configuration_options,
156
+ tpc_minor_version=1,
157
+ tpc_patch_version=0,
158
+ tpc_platform_type=IMX500_TP_MODEL,
159
+ add_metadata=False,
160
+ name=name)
156
161
 
157
162
  # To start defining the model's components (such as operator sets, and fusing patterns),
158
163
  # use 'with' the TargetPlatformModel instance, and create them as below:
@@ -165,42 +170,42 @@ def generate_tp_model(default_config: OpQuantizationConfig,
165
170
 
166
171
  # May suit for operations like: Dropout, Reshape, etc.
167
172
  default_qco = tp.get_default_quantization_config_options()
168
- tp.OperatorsSet("NoQuantization",
169
- default_qco.clone_and_edit(enable_activation_quantization=False)
170
- .clone_and_edit_weight_attribute(enable_weights_quantization=False))
173
+ schema.OperatorsSet("NoQuantization",
174
+ default_qco.clone_and_edit(enable_activation_quantization=False)
175
+ .clone_and_edit_weight_attribute(enable_weights_quantization=False))
171
176
 
172
177
  # Create Mixed-Precision quantization configuration options from the given list of OpQuantizationConfig objects
173
- mixed_precision_configuration_options = tp.QuantizationConfigOptions(mixed_precision_cfg_list,
174
- base_config=base_config)
178
+ mixed_precision_configuration_options = schema.QuantizationConfigOptions(mixed_precision_cfg_list,
179
+ base_config=base_config)
175
180
 
176
181
  # Define operator sets that use mixed_precision_configuration_options:
177
- conv = tp.OperatorsSet("Conv", mixed_precision_configuration_options)
178
- fc = tp.OperatorsSet("FullyConnected", mixed_precision_configuration_options)
182
+ conv = schema.OperatorsSet("Conv", mixed_precision_configuration_options)
183
+ fc = schema.OperatorsSet("FullyConnected", mixed_precision_configuration_options)
179
184
 
180
185
  # Define operations sets without quantization configuration
181
186
  # options (useful for creating fusing patterns, for example):
182
- any_relu = tp.OperatorsSet("AnyReLU")
183
- add = tp.OperatorsSet("Add")
184
- sub = tp.OperatorsSet("Sub")
185
- mul = tp.OperatorsSet("Mul")
186
- div = tp.OperatorsSet("Div")
187
- prelu = tp.OperatorsSet("PReLU")
188
- swish = tp.OperatorsSet("Swish")
189
- sigmoid = tp.OperatorsSet("Sigmoid")
190
- tanh = tp.OperatorsSet("Tanh")
187
+ any_relu = schema.OperatorsSet("AnyReLU")
188
+ add = schema.OperatorsSet("Add")
189
+ sub = schema.OperatorsSet("Sub")
190
+ mul = schema.OperatorsSet("Mul")
191
+ div = schema.OperatorsSet("Div")
192
+ prelu = schema.OperatorsSet("PReLU")
193
+ swish = schema.OperatorsSet("Swish")
194
+ sigmoid = schema.OperatorsSet("Sigmoid")
195
+ tanh = schema.OperatorsSet("Tanh")
191
196
 
192
197
  # Combine multiple operators into a single operator to avoid quantization between
193
198
  # them. To do this we define fusing patterns using the OperatorsSets that were created.
194
199
  # To group multiple sets with regard to fusing, an OperatorSetConcat can be created
195
- activations_after_conv_to_fuse = tp.OperatorSetConcat(any_relu, swish, prelu, sigmoid, tanh)
196
- activations_after_fc_to_fuse = tp.OperatorSetConcat(any_relu, swish, sigmoid)
197
- any_binary = tp.OperatorSetConcat(add, sub, mul, div)
200
+ activations_after_conv_to_fuse = schema.OperatorSetConcat(any_relu, swish, prelu, sigmoid, tanh)
201
+ activations_after_fc_to_fuse = schema.OperatorSetConcat(any_relu, swish, sigmoid)
202
+ any_binary = schema.OperatorSetConcat(add, sub, mul, div)
198
203
 
199
204
  # ------------------- #
200
205
  # Fusions
201
206
  # ------------------- #
202
- tp.Fusing([conv, activations_after_conv_to_fuse])
203
- tp.Fusing([fc, activations_after_fc_to_fuse])
204
- tp.Fusing([any_binary, any_relu])
207
+ schema.Fusing([conv, activations_after_conv_to_fuse])
208
+ schema.Fusing([fc, activations_after_fc_to_fuse])
209
+ schema.Fusing([any_binary, any_relu])
205
210
 
206
211
  return generated_tpc
@@ -15,6 +15,7 @@
15
15
  import tensorflow as tf
16
16
  from packaging import version
17
17
 
18
+ import model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema as schema
18
19
  from model_compression_toolkit.defaultdict import DefaultDict
19
20
  from model_compression_toolkit.verify_packages import FOUND_SONY_CUSTOM_LAYERS
20
21
  from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, KERAS_DEPTHWISE_KERNEL, \
@@ -48,7 +49,7 @@ def get_keras_tpc() -> tp.TargetPlatformCapabilities:
48
49
  return generate_keras_tpc(name='imx500_pot_tpc_keras_tpc', tp_model=imx500_pot_tpc_tp_model)
49
50
 
50
51
 
51
- def generate_keras_tpc(name: str, tp_model: tp.TargetPlatformModel):
52
+ def generate_keras_tpc(name: str, tp_model: schema.TargetPlatformModel):
52
53
  """
53
54
  Generates a TargetPlatformCapabilities object with default operation sets to layers mapping.
54
55
 
@@ -59,7 +60,7 @@ def generate_keras_tpc(name: str, tp_model: tp.TargetPlatformModel):
59
60
  Returns: a TargetPlatformCapabilities object for the given TargetPlatformModel.
60
61
  """
61
62
 
62
- keras_tpc = tp.TargetPlatformCapabilities(tp_model, name=name, version=TPC_VERSION)
63
+ keras_tpc = tp.TargetPlatformCapabilities(tp_model)
63
64
 
64
65
  no_quant_list = [Reshape,
65
66
  tf.reshape,
@@ -23,6 +23,7 @@ from torch.nn import Dropout, Flatten, Hardtanh
23
23
  from torch.nn import ReLU, ReLU6, PReLU, SiLU, Sigmoid, Tanh, Hardswish, LeakyReLU
24
24
  from torch.nn.functional import relu, relu6, prelu, silu, hardtanh, hardswish, leaky_relu
25
25
 
26
+ import model_compression_toolkit.target_platform_capabilities.schema.mct_current_schema as schema
26
27
  from model_compression_toolkit.defaultdict import DefaultDict
27
28
  from model_compression_toolkit.target_platform_capabilities.constants import KERNEL_ATTR, PYTORCH_KERNEL, BIAS_ATTR, \
28
29
  BIAS
@@ -43,7 +44,7 @@ def get_pytorch_tpc() -> tp.TargetPlatformCapabilities:
43
44
  return generate_pytorch_tpc(name='imx500_pot_tpc_pytorch_tpc', tp_model=imx500_pot_tpc_tp_model)
44
45
 
45
46
 
46
- def generate_pytorch_tpc(name: str, tp_model: tp.TargetPlatformModel):
47
+ def generate_pytorch_tpc(name: str, tp_model: schema.TargetPlatformModel):
47
48
  """
48
49
  Generates a TargetPlatformCapabilities object with default operation sets to layers mapping.
49
50
  Args:
@@ -52,9 +53,7 @@ def generate_pytorch_tpc(name: str, tp_model: tp.TargetPlatformModel):
52
53
  Returns: a TargetPlatformCapabilities object for the given TargetPlatformModel.
53
54
  """
54
55
 
55
- pytorch_tpc = tp.TargetPlatformCapabilities(tp_model,
56
- name=name,
57
- version=TPC_VERSION)
56
+ pytorch_tpc = tp.TargetPlatformCapabilities(tp_model)
58
57
 
59
58
  # we provide attributes mapping that maps each layer type in the operations set
60
59
  # that has weights attributes with provided quantization config (in the tp model) to