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.
- {mct_nightly-2.2.0.20250114.161150.dist-info → mct_nightly-2.2.0.20250115.511.dist-info}/METADATA +1 -1
- {mct_nightly-2.2.0.20250114.161150.dist-info → mct_nightly-2.2.0.20250115.511.dist-info}/RECORD +12 -12
- model_compression_toolkit/__init__.py +1 -1
- model_compression_toolkit/core/common/mixed_precision/mixed_precision_search_manager.py +1 -1
- model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/resource_utilization.py +7 -23
- model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/resource_utilization_calculator.py +7 -15
- model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/resource_utilization_data.py +1 -1
- model_compression_toolkit/core/common/mixed_precision/search_methods/linear_programming.py +1 -1
- model_compression_toolkit/core/runner.py +13 -18
- {mct_nightly-2.2.0.20250114.161150.dist-info → mct_nightly-2.2.0.20250115.511.dist-info}/LICENSE.md +0 -0
- {mct_nightly-2.2.0.20250114.161150.dist-info → mct_nightly-2.2.0.20250115.511.dist-info}/WHEEL +0 -0
- {mct_nightly-2.2.0.20250114.161150.dist-info → mct_nightly-2.2.0.20250115.511.dist-info}/top_level.txt +0 -0
{mct_nightly-2.2.0.20250114.161150.dist-info → mct_nightly-2.2.0.20250115.511.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: mct-nightly
|
3
|
-
Version: 2.2.0.
|
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
|
{mct_nightly-2.2.0.20250114.161150.dist-info → mct_nightly-2.2.0.20250115.511.dist-info}/RECORD
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
model_compression_toolkit/__init__.py,sha256=
|
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=
|
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=
|
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=
|
76
|
-
model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/resource_utilization_calculator.py,sha256=
|
77
|
-
model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/resource_utilization_data.py,sha256=
|
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=
|
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.
|
527
|
-
mct_nightly-2.2.0.
|
528
|
-
mct_nightly-2.2.0.
|
529
|
-
mct_nightly-2.2.0.
|
530
|
-
mct_nightly-2.2.0.
|
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.
|
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.
|
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
|
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.
|
94
|
+
return bool(self.get_restricted_metrics())
|
95
95
|
|
96
|
-
def
|
97
|
-
""
|
98
|
-
|
99
|
-
|
100
|
-
|
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
|
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.
|
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.
|
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.
|
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
|
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
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
if
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
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
|
{mct_nightly-2.2.0.20250114.161150.dist-info → mct_nightly-2.2.0.20250115.511.dist-info}/LICENSE.md
RENAMED
File without changes
|
{mct_nightly-2.2.0.20250114.161150.dist-info → mct_nightly-2.2.0.20250115.511.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|