mct-nightly 2.2.0.20250115.511__py3-none-any.whl → 2.2.0.20250115.124229__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.20250115.511.dist-info → mct_nightly-2.2.0.20250115.124229.dist-info}/METADATA +1 -1
- {mct_nightly-2.2.0.20250115.511.dist-info → mct_nightly-2.2.0.20250115.124229.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 +23 -7
- model_compression_toolkit/core/common/mixed_precision/resource_utilization_tools/resource_utilization_calculator.py +15 -7
- 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 +18 -13
- {mct_nightly-2.2.0.20250115.511.dist-info → mct_nightly-2.2.0.20250115.124229.dist-info}/LICENSE.md +0 -0
- {mct_nightly-2.2.0.20250115.511.dist-info → mct_nightly-2.2.0.20250115.124229.dist-info}/WHEEL +0 -0
- {mct_nightly-2.2.0.20250115.511.dist-info → mct_nightly-2.2.0.20250115.124229.dist-info}/top_level.txt +0 -0
{mct_nightly-2.2.0.20250115.511.dist-info → mct_nightly-2.2.0.20250115.124229.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: mct-nightly
|
3
|
-
Version: 2.2.0.20250115.
|
3
|
+
Version: 2.2.0.20250115.124229
|
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.20250115.511.dist-info → mct_nightly-2.2.0.20250115.124229.dist-info}/RECORD
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
model_compression_toolkit/__init__.py,sha256=
|
1
|
+
model_compression_toolkit/__init__.py,sha256=XzPQtEswf99NjIZ6WKNDM9aZ5p6w7n23Q3CF0XIUpOE,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=iFpcF1EFbMfEHIkL2XV7NXey3HnQT6kizB7_S0xwVwI,13624
|
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=fe8R1ZdllwL_YQoHgvzTBjoI3GJo4bEVk89I3zEVr14,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=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
|
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=ZvLxFIfMUPAyKKzPhJcuZyjjngLD9_1wWFU8e14vEbA,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.20250115.
|
527
|
-
mct_nightly-2.2.0.20250115.
|
528
|
-
mct_nightly-2.2.0.20250115.
|
529
|
-
mct_nightly-2.2.0.20250115.
|
530
|
-
mct_nightly-2.2.0.20250115.
|
526
|
+
mct_nightly-2.2.0.20250115.124229.dist-info/LICENSE.md,sha256=aYSSIb-5AFPeITTvXm1UAoe0uYBiMmSS8flvXaaFUks,10174
|
527
|
+
mct_nightly-2.2.0.20250115.124229.dist-info/METADATA,sha256=dzpp7TMHexI-0ubm_-SRvqQoFeEbOzarWf1MWBRvGA8,26604
|
528
|
+
mct_nightly-2.2.0.20250115.124229.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
529
|
+
mct_nightly-2.2.0.20250115.124229.dist-info/top_level.txt,sha256=gsYA8juk0Z-ZmQRKULkb3JLGdOdz8jW_cMRjisn9ga4,26
|
530
|
+
mct_nightly-2.2.0.20250115.124229.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.20250115.
|
30
|
+
__version__ = "2.2.0.20250115.124229"
|
@@ -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_targets()
|
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,15 +86,31 @@ 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_targets(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_targets())
|
95
95
|
|
96
|
-
def
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
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)
|
@@ -15,8 +15,7 @@
|
|
15
15
|
from collections import defaultdict
|
16
16
|
from copy import deepcopy
|
17
17
|
from enum import Enum, auto
|
18
|
-
from
|
19
|
-
from typing import Dict, NamedTuple, Optional, Tuple, List, Iterable, Union, Literal, Sequence
|
18
|
+
from typing import Dict, NamedTuple, Optional, Tuple, List, Iterable, Union, Literal, Sequence, Set
|
20
19
|
|
21
20
|
from model_compression_toolkit.constants import FLOAT_BITWIDTH
|
22
21
|
from model_compression_toolkit.core import FrameworkInfo
|
@@ -160,16 +159,17 @@ class ResourceUtilizationCalculator:
|
|
160
159
|
"""
|
161
160
|
ru_targets = set(ru_targets) if ru_targets else set(RUTarget)
|
162
161
|
|
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
|
+
|
163
167
|
w_total, a_total = None, None
|
164
168
|
if {RUTarget.WEIGHTS, RUTarget.TOTAL}.intersection(ru_targets):
|
165
169
|
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.')
|
168
170
|
|
169
171
|
if {RUTarget.ACTIVATION, RUTarget.TOTAL}.intersection(ru_targets):
|
170
172
|
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_targets() == 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,6 +464,14 @@ 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
|
+
|
467
475
|
def _get_cut_target_nodes(self, cut: Cut, target_criterion: TargetInclusionCriterion) -> List[BaseNode]:
|
468
476
|
"""
|
469
477
|
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_targets())
|
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_targets()
|
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, Optional
|
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,6 +170,7 @@ 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,
|
173
174
|
fw_info=fw_info,
|
174
175
|
fw_impl=fw_impl)
|
175
176
|
|
@@ -207,6 +208,7 @@ def core_runner(in_model: Any,
|
|
207
208
|
|
208
209
|
def _set_final_resource_utilization(graph: Graph,
|
209
210
|
final_bit_widths_config: List[int],
|
211
|
+
target_resource_utilization: Optional[ResourceUtilization],
|
210
212
|
fw_info: FrameworkInfo,
|
211
213
|
fw_impl: FrameworkImplementation):
|
212
214
|
"""
|
@@ -216,21 +218,24 @@ def _set_final_resource_utilization(graph: Graph,
|
|
216
218
|
Args:
|
217
219
|
graph: Graph to compute the resource utilization for.
|
218
220
|
final_bit_widths_config: The final bit-width configuration to quantize the model accordingly.
|
221
|
+
target_resource_utilization: Requested target resource utilization if relevant.
|
219
222
|
fw_info: A FrameworkInfo object.
|
220
223
|
fw_impl: FrameworkImplementation object with specific framework methods implementation.
|
221
224
|
|
222
225
|
"""
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
if
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
226
|
+
ru_targets = target_resource_utilization.get_restricted_targets() if target_resource_utilization else None
|
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}.')
|
235
240
|
graph.user_info.final_resource_utilization = final_ru
|
236
241
|
graph.user_info.mixed_precision_cfg = final_bit_widths_config
|
{mct_nightly-2.2.0.20250115.511.dist-info → mct_nightly-2.2.0.20250115.124229.dist-info}/LICENSE.md
RENAMED
File without changes
|
{mct_nightly-2.2.0.20250115.511.dist-info → mct_nightly-2.2.0.20250115.124229.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|