mct-nightly 2.2.0.20250113.527__py3-none-any.whl → 2.2.0.20250114.84821__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 (106) hide show
  1. {mct_nightly-2.2.0.20250113.527.dist-info → mct_nightly-2.2.0.20250114.84821.dist-info}/METADATA +1 -1
  2. {mct_nightly-2.2.0.20250113.527.dist-info → mct_nightly-2.2.0.20250114.84821.dist-info}/RECORD +103 -105
  3. model_compression_toolkit/__init__.py +2 -2
  4. model_compression_toolkit/core/common/framework_info.py +1 -3
  5. model_compression_toolkit/core/common/fusion/layer_fusing.py +6 -5
  6. model_compression_toolkit/core/common/graph/base_graph.py +20 -21
  7. model_compression_toolkit/core/common/graph/base_node.py +44 -17
  8. model_compression_toolkit/core/common/mixed_precision/mixed_precision_candidates_filter.py +7 -6
  9. model_compression_toolkit/core/common/mixed_precision/mixed_precision_search_facade.py +0 -6
  10. model_compression_toolkit/core/common/mixed_precision/mixed_precision_search_manager.py +26 -135
  11. model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/resource_utilization.py +36 -62
  12. model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/resource_utilization_calculator.py +667 -0
  13. model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/resource_utilization_data.py +25 -202
  14. model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/ru_methods.py +164 -470
  15. model_compression_toolkit/core/common/mixed_precision/search_methods/linear_programming.py +30 -7
  16. model_compression_toolkit/core/common/mixed_precision/sensitivity_evaluation.py +3 -5
  17. model_compression_toolkit/core/common/mixed_precision/solution_refinement_procedure.py +2 -2
  18. model_compression_toolkit/core/common/pruning/greedy_mask_calculator.py +7 -6
  19. model_compression_toolkit/core/common/pruning/mask/per_channel_mask.py +0 -1
  20. model_compression_toolkit/core/common/pruning/mask/per_simd_group_mask.py +0 -1
  21. model_compression_toolkit/core/common/pruning/pruner.py +5 -3
  22. model_compression_toolkit/core/common/quantization/bit_width_config.py +6 -12
  23. model_compression_toolkit/core/common/quantization/filter_nodes_candidates.py +1 -2
  24. model_compression_toolkit/core/common/quantization/node_quantization_config.py +2 -2
  25. model_compression_toolkit/core/common/quantization/quantization_config.py +1 -1
  26. model_compression_toolkit/core/common/quantization/quantization_fn_selection.py +1 -1
  27. model_compression_toolkit/core/common/quantization/quantization_params_fn_selection.py +1 -1
  28. model_compression_toolkit/core/common/quantization/quantization_params_generation/error_functions.py +1 -1
  29. model_compression_toolkit/core/common/quantization/quantization_params_generation/power_of_two_selection.py +1 -1
  30. model_compression_toolkit/core/common/quantization/quantization_params_generation/qparams_activations_computation.py +1 -1
  31. model_compression_toolkit/core/common/quantization/quantization_params_generation/symmetric_selection.py +1 -1
  32. model_compression_toolkit/core/common/quantization/quantization_params_generation/uniform_selection.py +1 -1
  33. model_compression_toolkit/core/common/quantization/set_node_quantization_config.py +15 -14
  34. model_compression_toolkit/core/common/substitutions/batchnorm_reconstruction.py +1 -1
  35. model_compression_toolkit/core/common/substitutions/batchnorm_refusing.py +1 -1
  36. model_compression_toolkit/core/common/substitutions/shift_negative_activation.py +5 -5
  37. model_compression_toolkit/core/graph_prep_runner.py +12 -11
  38. model_compression_toolkit/core/keras/data_util.py +24 -5
  39. model_compression_toolkit/core/keras/default_framework_info.py +1 -1
  40. model_compression_toolkit/core/keras/mixed_precision/configurable_weights_quantizer.py +1 -2
  41. model_compression_toolkit/core/keras/resource_utilization_data_facade.py +5 -6
  42. model_compression_toolkit/core/pytorch/back2framework/pytorch_model_builder.py +1 -1
  43. model_compression_toolkit/core/pytorch/default_framework_info.py +1 -1
  44. model_compression_toolkit/core/pytorch/mixed_precision/configurable_activation_quantizer.py +1 -1
  45. model_compression_toolkit/core/pytorch/mixed_precision/configurable_weights_quantizer.py +1 -1
  46. model_compression_toolkit/core/pytorch/resource_utilization_data_facade.py +4 -5
  47. model_compression_toolkit/core/runner.py +33 -60
  48. model_compression_toolkit/exporter/model_wrapper/keras/builder/node_to_quantizer.py +1 -1
  49. model_compression_toolkit/exporter/model_wrapper/pytorch/builder/node_to_quantizer.py +1 -1
  50. model_compression_toolkit/gptq/keras/quantization_facade.py +8 -9
  51. model_compression_toolkit/gptq/keras/quantizer/soft_rounding/symmetric_soft_quantizer.py +1 -1
  52. model_compression_toolkit/gptq/keras/quantizer/soft_rounding/uniform_soft_quantizer.py +1 -1
  53. model_compression_toolkit/gptq/keras/quantizer/ste_rounding/symmetric_ste.py +1 -1
  54. model_compression_toolkit/gptq/pytorch/quantization_facade.py +8 -9
  55. model_compression_toolkit/gptq/pytorch/quantizer/soft_rounding/symmetric_soft_quantizer.py +1 -1
  56. model_compression_toolkit/gptq/pytorch/quantizer/soft_rounding/uniform_soft_quantizer.py +1 -1
  57. model_compression_toolkit/gptq/pytorch/quantizer/ste_rounding/symmetric_ste.py +1 -1
  58. model_compression_toolkit/metadata.py +11 -10
  59. model_compression_toolkit/pruning/keras/pruning_facade.py +5 -6
  60. model_compression_toolkit/pruning/pytorch/pruning_facade.py +6 -7
  61. model_compression_toolkit/ptq/keras/quantization_facade.py +8 -9
  62. model_compression_toolkit/ptq/pytorch/quantization_facade.py +8 -9
  63. model_compression_toolkit/qat/keras/quantization_facade.py +5 -6
  64. model_compression_toolkit/qat/keras/quantizer/lsq/symmetric_lsq.py +1 -1
  65. model_compression_toolkit/qat/keras/quantizer/ste_rounding/symmetric_ste.py +1 -1
  66. model_compression_toolkit/qat/pytorch/quantization_facade.py +5 -9
  67. model_compression_toolkit/qat/pytorch/quantizer/lsq/symmetric_lsq.py +1 -1
  68. model_compression_toolkit/qat/pytorch/quantizer/lsq/uniform_lsq.py +1 -1
  69. model_compression_toolkit/qat/pytorch/quantizer/ste_rounding/symmetric_ste.py +1 -1
  70. model_compression_toolkit/qat/pytorch/quantizer/ste_rounding/uniform_ste.py +1 -1
  71. model_compression_toolkit/target_platform_capabilities/__init__.py +9 -0
  72. model_compression_toolkit/target_platform_capabilities/constants.py +1 -1
  73. model_compression_toolkit/target_platform_capabilities/schema/mct_current_schema.py +2 -2
  74. model_compression_toolkit/target_platform_capabilities/schema/schema_functions.py +18 -18
  75. model_compression_toolkit/target_platform_capabilities/schema/v1.py +13 -13
  76. model_compression_toolkit/target_platform_capabilities/{target_platform/targetplatform2framework → targetplatform2framework}/__init__.py +6 -6
  77. model_compression_toolkit/target_platform_capabilities/{target_platform/targetplatform2framework → targetplatform2framework}/attach2fw.py +10 -10
  78. model_compression_toolkit/target_platform_capabilities/{target_platform/targetplatform2framework → targetplatform2framework}/attach2keras.py +3 -3
  79. model_compression_toolkit/target_platform_capabilities/{target_platform/targetplatform2framework → targetplatform2framework}/attach2pytorch.py +3 -2
  80. model_compression_toolkit/target_platform_capabilities/{target_platform/targetplatform2framework → targetplatform2framework}/current_tpc.py +8 -8
  81. model_compression_toolkit/target_platform_capabilities/{target_platform/targetplatform2framework/target_platform_capabilities.py → targetplatform2framework/framework_quantization_capabilities.py} +40 -40
  82. model_compression_toolkit/target_platform_capabilities/{target_platform/targetplatform2framework/target_platform_capabilities_component.py → targetplatform2framework/framework_quantization_capabilities_component.py} +2 -2
  83. model_compression_toolkit/target_platform_capabilities/{target_platform/targetplatform2framework → targetplatform2framework}/layer_filter_params.py +0 -1
  84. model_compression_toolkit/target_platform_capabilities/{target_platform/targetplatform2framework → targetplatform2framework}/operations_to_layers.py +8 -8
  85. model_compression_toolkit/target_platform_capabilities/tpc_io_handler.py +24 -24
  86. model_compression_toolkit/target_platform_capabilities/tpc_models/get_target_platform_capabilities.py +18 -18
  87. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/latest/__init__.py +3 -3
  88. model_compression_toolkit/target_platform_capabilities/tpc_models/imx500_tpc/v1/{tp_model.py → tpc.py} +31 -32
  89. model_compression_toolkit/target_platform_capabilities/tpc_models/qnnpack_tpc/latest/__init__.py +3 -3
  90. model_compression_toolkit/target_platform_capabilities/tpc_models/qnnpack_tpc/v1/{tp_model.py → tpc.py} +27 -27
  91. model_compression_toolkit/target_platform_capabilities/tpc_models/tflite_tpc/latest/__init__.py +4 -4
  92. model_compression_toolkit/target_platform_capabilities/tpc_models/tflite_tpc/v1/{tp_model.py → tpc.py} +27 -27
  93. model_compression_toolkit/trainable_infrastructure/common/get_quantizers.py +1 -2
  94. model_compression_toolkit/trainable_infrastructure/common/trainable_quantizer_config.py +2 -1
  95. model_compression_toolkit/trainable_infrastructure/keras/activation_quantizers/lsq/symmetric_lsq.py +1 -2
  96. model_compression_toolkit/trainable_infrastructure/keras/config_serialization.py +1 -1
  97. model_compression_toolkit/xquant/common/model_folding_utils.py +7 -6
  98. model_compression_toolkit/xquant/keras/keras_report_utils.py +4 -4
  99. model_compression_toolkit/xquant/pytorch/pytorch_report_utils.py +3 -3
  100. model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/ru_aggregation_methods.py +0 -105
  101. model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/ru_functions_mapping.py +0 -33
  102. model_compression_toolkit/target_platform_capabilities/target_platform/__init__.py +0 -23
  103. {mct_nightly-2.2.0.20250113.527.dist-info → mct_nightly-2.2.0.20250114.84821.dist-info}/LICENSE.md +0 -0
  104. {mct_nightly-2.2.0.20250113.527.dist-info → mct_nightly-2.2.0.20250114.84821.dist-info}/WHEEL +0 -0
  105. {mct_nightly-2.2.0.20250113.527.dist-info → mct_nightly-2.2.0.20250114.84821.dist-info}/top_level.txt +0 -0
  106. /model_compression_toolkit/target_platform_capabilities/{target_platform/targetplatform2framework → targetplatform2framework}/attribute_filter.py +0 -0
@@ -12,29 +12,21 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
+ from dataclasses import dataclass
15
16
  from enum import Enum
16
- from typing import Dict, Any
17
+ from typing import Dict, Any, Set
17
18
 
18
19
  import numpy as np
19
20
 
20
21
 
21
22
  class RUTarget(Enum):
22
23
  """
23
- Targets for which we define Resource Utilization metrics for mixed-precision search.
24
- For each target that we care to consider in a mixed-precision search, there should be defined a set of
25
- resource utilization computation function, resource utilization aggregation function,
26
- and resource utilization target (within a ResourceUtilization object).
27
-
28
- Whenever adding a resource utilization metric to ResourceUtilization class we should add a matching target to this enum.
29
-
30
- WEIGHTS - Weights memory ResourceUtilization metric.
31
-
32
- ACTIVATION - Activation memory ResourceUtilization metric.
33
-
34
- TOTAL - Total memory ResourceUtilization metric.
35
-
36
- BOPS - Total Bit-Operations ResourceUtilization Metric.
24
+ Resource Utilization targets for mixed-precision search.
37
25
 
26
+ WEIGHTS - Weights memory.
27
+ ACTIVATION - Activation memory.
28
+ TOTAL - Total memory.
29
+ BOPS - Total Bit-Operations.
38
30
  """
39
31
 
40
32
  WEIGHTS = 'weights'
@@ -43,34 +35,20 @@ class RUTarget(Enum):
43
35
  BOPS = 'bops'
44
36
 
45
37
 
38
+ @dataclass
46
39
  class ResourceUtilization:
47
40
  """
48
41
  Class to represent measurements of performance.
49
- """
50
-
51
- def __init__(self,
52
- weights_memory: float = np.inf,
53
- activation_memory: float = np.inf,
54
- total_memory: float = np.inf,
55
- bops: float = np.inf):
56
- """
57
-
58
- Args:
59
- weights_memory: Memory of a model's weights in bytes. Note that this includes only coefficients that should be quantized (for example, the kernel of Conv2D in Keras will be affected by this value, while the bias will not).
60
- activation_memory: Memory of a model's activation in bytes, according to the given activation resource utilization metric.
61
- total_memory: The sum of model's activation and weights memory in bytes, according to the given total resource utilization metric.
62
- bops: The total bit-operations in the model.
63
- """
64
- self.weights_memory = weights_memory
65
- self.activation_memory = activation_memory
66
- self.total_memory = total_memory
67
- self.bops = bops
68
42
 
69
- def __repr__(self):
70
- return f"Weights_memory: {self.weights_memory}, " \
71
- f"Activation_memory: {self.activation_memory}, " \
72
- f"Total_memory: {self.total_memory}, " \
73
- f"BOPS: {self.bops}"
43
+ weights_memory: Memory of a model's weights in bytes.
44
+ activation_memory: Memory of a model's activation in bytes.
45
+ total_memory: The sum of model's activation and weights memory in bytes.
46
+ bops: The total bit-operations in the model.
47
+ """
48
+ weights_memory: float = np.inf
49
+ activation_memory: float = np.inf
50
+ total_memory: float = np.inf
51
+ bops: float = np.inf
74
52
 
75
53
  def weight_restricted(self):
76
54
  return self.weights_memory < np.inf
@@ -93,34 +71,30 @@ class ResourceUtilization:
93
71
  RUTarget.TOTAL: self.total_memory,
94
72
  RUTarget.BOPS: self.bops}
95
73
 
96
- def set_resource_utilization_by_target(self, ru_mapping: Dict[RUTarget, float]):
74
+ def is_satisfied_by(self, ru: 'ResourceUtilization') -> bool:
97
75
  """
98
- Setting a ResourceUtilization object values for each ResourceUtilization target in the given dictionary.
76
+ Checks whether another ResourceUtilization object satisfies the constraints defined by the current object.
99
77
 
100
78
  Args:
101
- ru_mapping: A mapping from a RUTarget to a matching resource utilization value.
79
+ ru: A ResourceUtilization object to check against the current object.
102
80
 
81
+ Returns:
82
+ Whether all constraints are satisfied.
103
83
  """
104
- self.weights_memory = ru_mapping.get(RUTarget.WEIGHTS, np.inf)
105
- self.activation_memory = ru_mapping.get(RUTarget.ACTIVATION, np.inf)
106
- self.total_memory = ru_mapping.get(RUTarget.TOTAL, np.inf)
107
- self.bops = ru_mapping.get(RUTarget.BOPS, np.inf)
84
+ return bool(ru.weights_memory <= self.weights_memory and \
85
+ ru.activation_memory <= self.activation_memory and \
86
+ ru.total_memory <= self.total_memory and \
87
+ ru.bops <= self.bops)
108
88
 
109
- def holds_constraints(self, ru: Any) -> bool:
110
- """
111
- Checks whether the given ResourceUtilization object holds a set of ResourceUtilization constraints defined by
112
- the current ResourceUtilization object.
89
+ def get_restricted_metrics(self) -> Set[RUTarget]:
90
+ d = self.get_resource_utilization_dict()
91
+ return {k for k, v in d.items() if v < np.inf}
113
92
 
114
- Args:
115
- ru: A ResourceUtilization object to check if it holds the constraints.
116
-
117
- Returns: True if all the given resource utilization values are not greater than the referenced resource utilization values.
93
+ def is_any_restricted(self) -> bool:
94
+ return bool(self.get_restricted_metrics())
118
95
 
119
- """
120
- if not isinstance(ru, ResourceUtilization):
121
- return False
122
-
123
- return ru.weights_memory <= self.weights_memory and \
124
- ru.activation_memory <= self.activation_memory and \
125
- ru.total_memory <= self.total_memory and \
126
- ru.bops <= self.bops
96
+ def __repr__(self):
97
+ return f"Weights_memory: {self.weights_memory}, " \
98
+ f"Activation_memory: {self.activation_memory}, " \
99
+ f"Total_memory: {self.total_memory}, " \
100
+ f"BOPS: {self.bops}"