mct-nightly 2.2.0.20250114.161150__py3-none-any.whl → 2.2.0.20250115.511__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: mct-nightly
3
- Version: 2.2.0.20250114.161150
3
+ Version: 2.2.0.20250115.511
4
4
  Summary: A Model Compression Toolkit for neural networks
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: License :: OSI Approved :: Apache Software License
@@ -1,4 +1,4 @@
1
- model_compression_toolkit/__init__.py,sha256=xA9z6KdE1v3DTO3wLGBTWy4O0yAMvWUgDyFZsuzNP78,1557
1
+ model_compression_toolkit/__init__.py,sha256=2u1DrGdQe9j4PDWnUfeyWGWTSmI4I_pIdm0vdAPRJ9k,1557
2
2
  model_compression_toolkit/constants.py,sha256=i_R6uXBfO1ph_X6DNJych2x59SUojfJbn7dNjs_mZnc,3846
3
3
  model_compression_toolkit/defaultdict.py,sha256=LSc-sbZYXENMCw3U9F4GiXuv67IKpdn0Qm7Fr11jy-4,2277
4
4
  model_compression_toolkit/logger.py,sha256=3DByV41XHRR3kLTJNbpaMmikL8icd9e1N-nkQAY9oDk,4567
@@ -8,7 +8,7 @@ model_compression_toolkit/core/__init__.py,sha256=8a0wUNBKwTdJGDk_Ho6WQAXjGuCqQZ
8
8
  model_compression_toolkit/core/analyzer.py,sha256=X-2ZpkH1xdXnISnw1yJvXnvV-ssoUh-9LkLISSWNqiY,3691
9
9
  model_compression_toolkit/core/graph_prep_runner.py,sha256=CVTjBaci8F6EP3IKDnRMfxkP-Sv8qY8GpkGt6FyII2U,11376
10
10
  model_compression_toolkit/core/quantization_prep_runner.py,sha256=OtL6g2rTC5mfdKrkzm47EPPW-voGGVYMYxpy2_sfu1U,6547
11
- model_compression_toolkit/core/runner.py,sha256=jcKvWUhS5zQBBptONKvRFnkWrdDENcS5Go7kPi8Ya4o,13583
11
+ model_compression_toolkit/core/runner.py,sha256=YuL6LFarg3rl65rm3ccdXI9aNVd-yUhGRqhYqztby0M,13114
12
12
  model_compression_toolkit/core/common/__init__.py,sha256=Wh127PbXcETZX_d1PQqZ71ETK3J9XO5A-HpadGUbj6o,1447
13
13
  model_compression_toolkit/core/common/base_substitutions.py,sha256=xDFSmVVs_iFSZfajytI0cuQaNRNcwHX3uqOoHgVUvxQ,1666
14
14
  model_compression_toolkit/core/common/framework_implementation.py,sha256=IkMydCj6voau7dwkYLYA_Ka_EFUKP3GKQdpYN6b1fgc,22163
@@ -67,16 +67,16 @@ model_compression_toolkit/core/common/mixed_precision/mixed_precision_candidates
67
67
  model_compression_toolkit/core/common/mixed_precision/mixed_precision_quantization_config.py,sha256=r1t025_QHshyoop-PZvL7x6UuXaeplCCU3h4VNBhJHo,4309
68
68
  model_compression_toolkit/core/common/mixed_precision/mixed_precision_ru_helper.py,sha256=7iJ2YprFvm2Dk9EkXYrwO7-Sf89f537D-KrQP7XhvPs,8889
69
69
  model_compression_toolkit/core/common/mixed_precision/mixed_precision_search_facade.py,sha256=aAuGIzSDKIDiq07nheeWRXLEatzr6Fvoa5ZHv-2BtCI,7130
70
- model_compression_toolkit/core/common/mixed_precision/mixed_precision_search_manager.py,sha256=fe8R1ZdllwL_YQoHgvzTBjoI3GJo4bEVk89I3zEVr14,32463
70
+ model_compression_toolkit/core/common/mixed_precision/mixed_precision_search_manager.py,sha256=7ROKH1bTQEoyl5yLj10NbOWLFJgJicHBBJmUT_s1xnw,32463
71
71
  model_compression_toolkit/core/common/mixed_precision/sensitivity_evaluation.py,sha256=gsigifJ-ykWNafF4t7UMEC_-nd6YPERAk1_z0kT-Y88,27172
72
72
  model_compression_toolkit/core/common/mixed_precision/set_layer_to_bitwidth.py,sha256=P8QtKgFXtt5b2RoubzI5OGlCfbEfZsAirjyrkFzK26A,2846
73
73
  model_compression_toolkit/core/common/mixed_precision/solution_refinement_procedure.py,sha256=UWgxzhKWFOoESLq0TFVz0M1PhkU9d9n6wccSA3RgUxk,7903
74
74
  model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/__init__.py,sha256=Rf1RcYmelmdZmBV5qOKvKWF575ofc06JFQSq83Jz99A,696
75
- model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/resource_utilization.py,sha256=T5yVr7lay-6QLuTDBZNI1Ufj02EMBWuY_yHjC8eHx5I,3998
76
- model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/resource_utilization_calculator.py,sha256=qkYrYORLL5wmdmCkEY3tDSgabsGYt3OaTDVsgHWYBfE,34885
77
- model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/resource_utilization_data.py,sha256=tfcbMppa5KP_brfkFWRiOX9LQVHGXJtlgxyAt9oDGuw,8529
75
+ model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/resource_utilization.py,sha256=89gXow5VMOsQX0SxLLoVvVDDxQd1z9b6crEWZgeWSaY,3453
76
+ model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/resource_utilization_calculator.py,sha256=jvPhYhzGMKKgoqkEBMeDcOiM8wHdHxn_hM1RVFgvERw,34262
77
+ model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/resource_utilization_data.py,sha256=5sbFXgDA6mpkXXAmk6HmR5UvBnuAmkoqTHu3ah6npsY,8529
78
78
  model_compression_toolkit/core/common/mixed_precision/search_methods/__init__.py,sha256=sw7LOPN1bM82o3SkMaklyH0jw-TLGK0-fl2Wq73rffI,697
79
- model_compression_toolkit/core/common/mixed_precision/search_methods/linear_programming.py,sha256=ZvLxFIfMUPAyKKzPhJcuZyjjngLD9_1wWFU8e14vEbA,17176
79
+ model_compression_toolkit/core/common/mixed_precision/search_methods/linear_programming.py,sha256=0NUmtGiAOLl3GObr6V5L6GU19fXmp89GKDlKAKZkxwU,17176
80
80
  model_compression_toolkit/core/common/network_editors/__init__.py,sha256=vZmu55bYqiaOQs3AjfwWDXHmuKZcLHt-wm7uR5fPEqg,1307
81
81
  model_compression_toolkit/core/common/network_editors/actions.py,sha256=nid0_j-Cn10xvmztT8yCKW_6uA7JEnom9SW9syx7wc0,19594
82
82
  model_compression_toolkit/core/common/network_editors/edit_network.py,sha256=dfgawi-nB0ocAJ0xcGn9E-Zv203oUnQLuMiXpX8vTgA,1748
@@ -523,8 +523,8 @@ model_compression_toolkit/xquant/pytorch/model_analyzer.py,sha256=b93o800yVB3Z-i
523
523
  model_compression_toolkit/xquant/pytorch/pytorch_report_utils.py,sha256=UVN_S9ULHBEldBpShCOt8-soT8YTQ5oE362y96qF_FA,3950
524
524
  model_compression_toolkit/xquant/pytorch/similarity_functions.py,sha256=CERxq5K8rqaiE-DlwhZBTUd9x69dtYJlkHOPLB54vm8,2354
525
525
  model_compression_toolkit/xquant/pytorch/tensorboard_utils.py,sha256=mkoEktLFFHtEKzzFRn_jCnxjhJolK12TZ5AQeDHzUO8,9767
526
- mct_nightly-2.2.0.20250114.161150.dist-info/LICENSE.md,sha256=aYSSIb-5AFPeITTvXm1UAoe0uYBiMmSS8flvXaaFUks,10174
527
- mct_nightly-2.2.0.20250114.161150.dist-info/METADATA,sha256=AjCYuWPjOdisumA9-7iUbEVGvFr1uzWV9809mi42JyQ,26604
528
- mct_nightly-2.2.0.20250114.161150.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
529
- mct_nightly-2.2.0.20250114.161150.dist-info/top_level.txt,sha256=gsYA8juk0Z-ZmQRKULkb3JLGdOdz8jW_cMRjisn9ga4,26
530
- mct_nightly-2.2.0.20250114.161150.dist-info/RECORD,,
526
+ mct_nightly-2.2.0.20250115.511.dist-info/LICENSE.md,sha256=aYSSIb-5AFPeITTvXm1UAoe0uYBiMmSS8flvXaaFUks,10174
527
+ mct_nightly-2.2.0.20250115.511.dist-info/METADATA,sha256=MWsnlz94L6FWAYZo3f4Iz6HwpXl-qth128ESSNECXYU,26601
528
+ mct_nightly-2.2.0.20250115.511.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
529
+ mct_nightly-2.2.0.20250115.511.dist-info/top_level.txt,sha256=gsYA8juk0Z-ZmQRKULkb3JLGdOdz8jW_cMRjisn9ga4,26
530
+ mct_nightly-2.2.0.20250115.511.dist-info/RECORD,,
@@ -27,4 +27,4 @@ from model_compression_toolkit import data_generation
27
27
  from model_compression_toolkit import pruning
28
28
  from model_compression_toolkit.trainable_infrastructure.keras.load_model import keras_load_quantized_model
29
29
 
30
- __version__ = "2.2.0.20250114.161150"
30
+ __version__ = "2.2.0.20250115.000511"
@@ -69,7 +69,7 @@ class MixedPrecisionSearchManager:
69
69
 
70
70
  # To define RU Total constraints we need to compute weights and activations even if they have no constraints
71
71
  # TODO currently this logic is duplicated in linear_programming.py
72
- targets = target_resource_utilization.get_restricted_targets()
72
+ targets = target_resource_utilization.get_restricted_metrics()
73
73
  if RUTarget.TOTAL in targets:
74
74
  targets = targets.union({RUTarget.ACTIVATION, RUTarget.WEIGHTS}) - {RUTarget.TOTAL}
75
75
  self.ru_targets_to_compute = targets
@@ -86,31 +86,15 @@ class ResourceUtilization:
86
86
  ru.total_memory <= self.total_memory and \
87
87
  ru.bops <= self.bops)
88
88
 
89
- def get_restricted_targets(self) -> Set[RUTarget]:
89
+ def get_restricted_metrics(self) -> Set[RUTarget]:
90
90
  d = self.get_resource_utilization_dict()
91
91
  return {k for k, v in d.items() if v < np.inf}
92
92
 
93
93
  def is_any_restricted(self) -> bool:
94
- return bool(self.get_restricted_targets())
94
+ return bool(self.get_restricted_metrics())
95
95
 
96
- def get_summary_str(self, restricted: bool):
97
- """
98
- Generate summary string.
99
-
100
- Args:
101
- restricted: whether to include non-restricted targets.
102
-
103
- Returns:
104
- Summary string.
105
- """
106
- targets = self.get_restricted_targets() if restricted else list(RUTarget)
107
- summary = []
108
- if RUTarget.WEIGHTS in targets:
109
- summary.append(f"Weights memory: {self.weights_memory}")
110
- if RUTarget.ACTIVATION in targets:
111
- summary.append(f"Activation memory: {self.activation_memory}")
112
- if RUTarget.TOTAL in targets:
113
- summary.append(f"Total memory: {self.total_memory}")
114
- if RUTarget.BOPS in targets:
115
- summary.append(f"BOPS: {self.bops}")
116
- return ', '.join(summary)
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}"
@@ -15,7 +15,8 @@
15
15
  from collections import defaultdict
16
16
  from copy import deepcopy
17
17
  from enum import Enum, auto
18
- from typing import Dict, NamedTuple, Optional, Tuple, List, Iterable, Union, Literal, Sequence, Set
18
+ from functools import lru_cache
19
+ from typing import Dict, NamedTuple, Optional, Tuple, List, Iterable, Union, Literal, Sequence
19
20
 
20
21
  from model_compression_toolkit.constants import FLOAT_BITWIDTH
21
22
  from model_compression_toolkit.core import FrameworkInfo
@@ -159,17 +160,16 @@ class ResourceUtilizationCalculator:
159
160
  """
160
161
  ru_targets = set(ru_targets) if ru_targets else set(RUTarget)
161
162
 
162
- if w_qcs is not None and not self.is_custom_weights_config_applicable(ru_targets):
163
- raise ValueError('Weight configuration passed but no relevant metric requested.')
164
- if act_qcs is not None and not self.is_custom_activation_config_applicable(ru_targets):
165
- raise ValueError('Activation configuration passed but no relevant metric requested.')
166
-
167
163
  w_total, a_total = None, None
168
164
  if {RUTarget.WEIGHTS, RUTarget.TOTAL}.intersection(ru_targets):
169
165
  w_total, *_ = self.compute_weights_utilization(target_criterion, bitwidth_mode, w_qcs)
166
+ elif w_qcs is not None: # pragma: no cover
167
+ raise ValueError('Weight configuration passed but no relevant metric requested.')
170
168
 
171
169
  if {RUTarget.ACTIVATION, RUTarget.TOTAL}.intersection(ru_targets):
172
170
  a_total = self.compute_activations_utilization(target_criterion, bitwidth_mode, act_qcs)
171
+ elif act_qcs is not None: # pragma: no cover
172
+ raise ValueError('Activation configuration passed but no relevant metric requested.')
173
173
 
174
174
  ru = ResourceUtilization()
175
175
  if RUTarget.WEIGHTS in ru_targets:
@@ -182,7 +182,7 @@ class ResourceUtilizationCalculator:
182
182
  ru.bops, _ = self.compute_bops(target_criterion=target_criterion,
183
183
  bitwidth_mode=bitwidth_mode, act_qcs=act_qcs, w_qcs=w_qcs)
184
184
 
185
- assert ru.get_restricted_targets() == set(ru_targets), 'Mismatch between the number of requested and computed metrics'
185
+ assert ru.get_restricted_metrics() == set(ru_targets), 'Mismatch between the number of requested and computed metrics'
186
186
  return ru
187
187
 
188
188
  def compute_weights_utilization(self,
@@ -464,14 +464,6 @@ class ResourceUtilizationCalculator:
464
464
  node_bops = a_nbits * w_nbits * node_mac
465
465
  return node_bops
466
466
 
467
- def is_custom_weights_config_applicable(self, ru_targets: Set[RUTarget]) -> bool:
468
- """ Whether custom configuration for weights is compatible with the requested targets."""
469
- return bool({RUTarget.WEIGHTS, RUTarget.TOTAL, RUTarget.BOPS}.intersection(ru_targets))
470
-
471
- def is_custom_activation_config_applicable(self, ru_targets: Set[RUTarget]) -> bool:
472
- """ Whether custom configuration for activations is compatible with the requested targets."""
473
- return bool({RUTarget.ACTIVATION, RUTarget.TOTAL, RUTarget.BOPS}.intersection(ru_targets))
474
-
475
467
  def _get_cut_target_nodes(self, cut: Cut, target_criterion: TargetInclusionCriterion) -> List[BaseNode]:
476
468
  """
477
469
  Retrieve target nodes from a cut filtered by a criterion.
@@ -118,7 +118,7 @@ def requires_mixed_precision(in_model: Any,
118
118
 
119
119
  ru_calculator = ResourceUtilizationCalculator(transformed_graph, fw_impl, fw_info)
120
120
  max_ru = ru_calculator.compute_resource_utilization(TargetInclusionCriterion.AnyQuantized, BitwidthMode.QMaxBit,
121
- ru_targets=target_resource_utilization.get_restricted_targets())
121
+ ru_targets=target_resource_utilization.get_restricted_metrics())
122
122
  return not target_resource_utilization.is_satisfied_by(max_ru)
123
123
 
124
124
 
@@ -196,7 +196,7 @@ def _add_ru_constraints(search_manager: MixedPrecisionSearchManager,
196
196
  """
197
197
  ru_indicated_vectors = {}
198
198
  # targets to add constraints for
199
- constraints_targets = target_resource_utilization.get_restricted_targets()
199
+ constraints_targets = target_resource_utilization.get_restricted_metrics()
200
200
  # to add constraints for Total target we need to compute weight and activation
201
201
  targets_to_compute = constraints_targets
202
202
  if RUTarget.TOTAL in constraints_targets:
@@ -14,7 +14,7 @@
14
14
  # ==============================================================================
15
15
 
16
16
  import copy
17
- from typing import Callable, Any, List, Optional
17
+ from typing import Callable, Any, List
18
18
 
19
19
  from model_compression_toolkit.core.common import FrameworkInfo
20
20
  from model_compression_toolkit.core.common.framework_implementation import FrameworkImplementation
@@ -170,7 +170,6 @@ def core_runner(in_model: Any,
170
170
 
171
171
  _set_final_resource_utilization(graph=tg,
172
172
  final_bit_widths_config=bit_widths_config,
173
- target_resource_utilization=target_resource_utilization,
174
173
  fw_info=fw_info,
175
174
  fw_impl=fw_impl)
176
175
 
@@ -208,7 +207,6 @@ def core_runner(in_model: Any,
208
207
 
209
208
  def _set_final_resource_utilization(graph: Graph,
210
209
  final_bit_widths_config: List[int],
211
- target_resource_utilization: Optional[ResourceUtilization],
212
210
  fw_info: FrameworkInfo,
213
211
  fw_impl: FrameworkImplementation):
214
212
  """
@@ -218,24 +216,21 @@ def _set_final_resource_utilization(graph: Graph,
218
216
  Args:
219
217
  graph: Graph to compute the resource utilization for.
220
218
  final_bit_widths_config: The final bit-width configuration to quantize the model accordingly.
221
- target_resource_utilization: Requested target resource utilization if relevant.
222
219
  fw_info: A FrameworkInfo object.
223
220
  fw_impl: FrameworkImplementation object with specific framework methods implementation.
224
221
 
225
222
  """
226
- ru_targets = target_resource_utilization.get_restricted_targets()
227
- final_ru = None
228
- if ru_targets:
229
- ru_calculator = ResourceUtilizationCalculator(graph, fw_impl, fw_info)
230
- w_qcs, a_qcs = None, None
231
- if ru_calculator.is_custom_weights_config_applicable(ru_targets):
232
- w_qcs = {n: n.final_weights_quantization_cfg for n in graph.nodes}
233
- if ru_calculator.is_custom_activation_config_applicable(ru_targets):
234
- a_qcs = {n: n.final_activation_quantization_cfg for n in graph.nodes}
235
- final_ru = ru_calculator.compute_resource_utilization(TargetInclusionCriterion.AnyQuantized,
236
- BitwidthMode.QCustom,
237
- act_qcs=a_qcs, w_qcs=w_qcs, ru_targets=ru_targets)
238
- summary = final_ru.get_summary_str(restricted=True)
239
- Logger.info(f'Resource utilization for quantized mixed-precision targets:\n {summary}.')
223
+ w_qcs = {n: n.final_weights_quantization_cfg for n in graph.nodes}
224
+ a_qcs = {n: n.final_activation_quantization_cfg for n in graph.nodes}
225
+ ru_calculator = ResourceUtilizationCalculator(graph, fw_impl, fw_info)
226
+ final_ru = ru_calculator.compute_resource_utilization(TargetInclusionCriterion.AnyQuantized, BitwidthMode.QCustom,
227
+ act_qcs=a_qcs, w_qcs=w_qcs)
228
+
229
+ for ru_target, ru in final_ru.get_resource_utilization_dict().items():
230
+ if ru == 0:
231
+ Logger.warning(f"No relevant quantized layers for the resource utilization target {ru_target} were found, "
232
+ f"the recorded final ru for this target would be 0.")
233
+
234
+ Logger.info(f'Resource utilization (of quantized targets):\n {str(final_ru)}.')
240
235
  graph.user_info.final_resource_utilization = final_ru
241
236
  graph.user_info.mixed_precision_cfg = final_bit_widths_config